Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
В рамках данной темы поднимается вопрос сложность программного обеспечения как основного вызова при разработке ПО, понятию ОО программирования, приводится пример использования объектного подхода.
class Shape {
public String draw() {
return null;
}
public String erase() {
return null;
}
}
class Circle extends Shape {
@Override
public String draw() {
return "Рисуем круг";
}
@Override
public String erase() {
return "Стираем круг";
}
} int book_year[100];
int book_pages[100];
char book_author[100][50];
char book_title[100][100];
float book_price[100];printf("%s-%s %d page", book_author[3], book_title[3], book_pages[3]);struct Book {
char author[50];
char title[100];
int year;
int pages;
float price;
};int main() {
// Объявляем экземпляр структуры
struct Book book1;
// Заполняем поля экземпляра
strcpy(book1.author,"Иванов А.А");
strcpy(book1.title,"Программирование на Java");
book1.pages = 255;
book1.price = 350.25;
book1.year = 2018;
// Теперь мы можем работать с созданным экземпляром структуры
printf("%s - %s, %d страниц", book1.author, book1.title, book1.pages);
return 0;
}class Triangle {
}class Triangle {
// Цвет треугольника
int color;
}class Triangle {
// Цвет треугольника
int color;
// Координаты точек треугольника
int x1,y1,x2,y2,x3,y3;
}class Point2D {
int x;
int y;
}class Triangle {
// Цвет треугольника
int color;
// Координаты трех точек
Point2D point1;
Point2D point2;
Point2D point3;
}class Point2D {
int x;
int y;
void changeCoordinates(int new_x, int new_y) {
x = new_x;
y = new_y;
}
}class Triangle {
int color; // Цвет треугольника
// Координаты трех точек
Point2D point1;
Point2D point2;
Point2D point3;
// Меняем цвет фигуры
void changeColor(int new_color) {
color = new_color;
}
// Меняем расположение фигуры
// Для наглядности будем передавать входные параметры
// в виде 6 целых чисел
void move(int x1, int y1, int x2, int y2, int x3, int y3) {
point1.changeCoordinates(x1, y1);
point2.changeCoordinates(x2, y2);
point3.changeCoordinates(x3, y3);
}
}public class Main {
public static void main(String[] args) {
// Создали один объект треугольника
Triangle triangle1 = new Triangle();
// Создали еще один объект треугольника
Triangle triangle2 = new Triangle();
// Для первого треугольника поменяли цвет
triangle1.changeColor(10000);
// Поменяли цвет для второго треугольника
triangle2.changeColor(20000);
// Создали объект первой точки треугольника
// и назначили точке какие-то координаты
triangle1.point1 = new Point2D();
triangle1.point1.changeCoordinates(140,180);
// Сделаем это же для первой точки второго треугольника
triangle2.point1 = new Point2D();
triangle2.point1.changeCoordinates(50,80);
}
}abstract Shape draw();public interface ActionListener extends EventListener {
public void actionPerformed(ActionEvent e);
}public class Main {
public static void main(String[] args) {
class Local {
private int value;
private Local(int value) {
this.value = value;
}
}
Local local = new Local(10);
}
}public class Main {
public static void main(String[] args) {
Parcel parcel = new Parcel();
parcel.ship("Лимпопо");
}
}
class Parcel {
class Contents {
private int i = 11;
public int value() {return i;}
}
class Destination {
private String label;
public Destination(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
}
public void ship(String destination) {
Contents c = new Contents();
Destination d = new Destination(destination);
System.out.println(d.getLabel());
}
}public class Outer {
private List<Integer> numbers = new ArrayList<>();
public void printAnalyticalData() {
Inner inner = new Inner();
System.out.println("Min: " + inner.min());
System.out.println("Max: " + inner.max());
System.out.println("Sum: " + inner.sum());
}
private class Inner {
private int min() {
return numbers.stream().min(Integer::compareTo).orElse(0);
}
private int max() {
return numbers.stream().max(Integer::compareTo).orElse(0);
}
private int sum() {
return numbers.stream().reduce(Integer::sum).orElse(0);
}
}
}class StaticTest {
static int val = 924;
}StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();StaticTest.val++;class NetworkConnector {
public static final int baud;
private static final int bits_per_interval = 4;
static {
baud = 9600 / bits_per_interval;
}
// ...
}class Incrementable {
static void increment() {
StaticTest.val++;
}
}Incrementable sf = new Incrementable();
sf.increment();Incrementable.increment();double side1 = 3.0;
double side2 = 4.0;
double hypot;
hypot = Math.sqrt(Math.pow(side1, 2) + Math.pow(si de2, 2));hypot = Math.sqrt(Math.pow(side1, 2) + Math.pow(side2, 2));import static java.lang.Math.pow;
import static java.lang.Math.sqrt;
public class Main {
public static void main(String[] args) {
double side1 = 3.0;
double side2 = 4.0;
double hypot;
hypot = sqrt(pow(side1, 2) + pow(side2, 2));
}
}import static java.lang.Math.*;

package ai181.ivanov;
/**
* Это специальный комментарий для документирования (Doc comment).
* С помощью специальной утилиты (javadoc), такие комментарии можно превратить в HTML-странички,
* которые вместе создают документацию к вашей программе.
* Для удобства, здесь можно использовать специальные ссылки {@link Main} и <i>HTML-тэги</i>
*/
public class Main {
/**
* Этот метод является "точкой входа" приложения. В проекте может быть только один метод с такой сигнатурой
* @param args аргументы при запуске приложения
*/
public static void main(String[] args) {
// Это однострочный комментарий (single line comment)
/*
* Это комментарий в виде блока (block comment)
*/
// TODO: это специальный TODO-комментарий. Тут можно описать, что нужно доделать на каком-то участке кода
// FIXME: это тоже TODO-комментарий, обычно тут мелкие баги и что нужно исправить на данном участке кода
// TODO:2018-09-01:NickGodov: дописать вывод данных в файл
int my_variable = 5; /* Комментарии после statement должны быть выровнены слева */
int my_other_variable = 999; /* с помощью табуляции */
// Если нужно закомментировать код, то каждая строчка комментируется однострочным комментарием
// int my_old_variable = 100;
// int my_other_old_variable = 200;
// Перед комментарием принято оставлять пустую строку
int number = 924;
}
}int spd = 25; // ПЛОХО: Можно, но не рекомендуется, т.к. название не информативно
int carminspd = 25; // ПЛОХО: Не экономьте на названиях переменных!
int carMinSpeed = 25; // ХОРОШО: Название переменной говорит само за себя
int s = 0; // МОЖНО: однобуквенные допускаются, только если это какие-то короткоживущие бросовые переменные
int speed = 150; // ХОРОШО: Нормально, понятно, что переменная отвечает за скорость
int Speed = 150; // ПЛОХО: Крайне не рекомендуется, переменные не должны начинаться с капса
int SPEED = 150; // ПЛОХО: Крайне не рекомендуется, полностью капсом пишутся константы
const int MIN_SPEED = 25; // НЕЛЬЗЯ: в Java const не используется (хотя это зарезервированное слово)
final int MIN_SPEED = 25; // ХОРОШО: в Java для констант используется final
int моя_переменная = 356; // ПЛОХО: Только латиница
int DŽDžDzȯȺώϷЂ = 145; // ПЛОХО: Только латиница
int translit_epta = 29; // ПЛОХО: Транслит - это полный моветон, только английский!
int $myvar = 100; // ПЛОХО: Теоретически можно, но НЕ РЕКОМЕНДУЕТСЯ
int _myvar = 100; // ПЛОХО: Теоретически можно, но НЕ РЕКОМЕНДУЕТСЯ
int 2pac = 0; // НЕЛЬЗЯ: с цифры начинать нельзя
int %d = 5; // НЕЛЬЗЯ: с других знаков начинать нельзя
int 'f' = 5; // НЕЛЬЗЯ: с кавычек начинать нельзя
// Если название переменной состоит из двух слов
int max_speed = 150; // ПЛОХО: Использовать _ для отделения слов не в константах не рекомендуется
int MaxSpeed = 150; // ПЛОХО: Крайне не рекомендуется, переменные не должны начинаться с заглавной буквы
int maxSpeed = 150; // ХОРОШО: Вот так нормально, используется lowerCamelCase
final int MAX_SPEED = 150; // ХОРОШО: Константы пишутся капсом, каждое слово отделяется _int a = 5;
int b = 4;
int min;
// Так нужно оформлять обычный if
if (a >= b) {
min = b;
}
// Так нужно оформлять if-else
if (a >= b) {
min = b;
} else {
min = a;
}
// Так нужно оформлять if-else if-else
if (a > b) {
min = b;
} else if (a < b) {
min = a;
} else {
min = a;
}
// В Java используется тернарный оператор
min = (a >= b) ? b : a;
// Это равнозначно следующему выражению
if (a >=b) {
min = b;
} else {
min = a;
}
// Так оформляется switch
switch (a) {
case 1:
// что-то делаем
break;
case 2:
// делаем что-то другое
break;
default:
// это выполняется в том случае, если ни одно из кейсов не выполнился
break;
}int progression = 0;
// Так офориляется for
for (int i=0; i < 5; i++) {
progression +=i;
}
// ПЛОХО: так офорилять циклы не рекомендуется
for (int i=0; i < 5; i++) progression +=i;
// ПЛОХО: так офорилять циклы тоже не рекомендуется
for (int i=0; i < 5; i++)
progression +=i;
// Пустой for
for (int j=0; j < 10; j++);
// Так оформляется while
int iterator = 0;
while (iterator < 10) {
// делаем что-то в цикле
iterator++;
}
// Так оформляется do-while
int loops = 10;
do {
// что-то делаем
loops--;
} while (loops > 0);
// Также, в Java есть аналог foreach
int[] array = { 1, 2, 3, 4, 5 };
int sum = 0;
for(int i : array) {
sum += i;
}
// Этот же цикл можно представить обычным for`ом
for(int i = 0; i < 5; i++) {
sum += array[i];
}// Объявление массивов
/*
* ХОРОШО: согласно всем соглашениям по коду и различным рекомендациям, квадратные скобки
* ставят ПОСЛЕ ТИПА ДАННЫХ
*/
int[] goodArray;
/*
* ПЛОХО: компилятор не выдаст ошибку, но такой синтаксис делает код менее читабельным
*/
int badArray[];
/*
* НЕЛЬЗЯ: при объявлении массива нельзя указать его размерность.
* Java не выделит память, пока массив не будет инициализирован
*/
int[5] anotherBadArray;
// Объявления многомерных массивов
int [][] twoDimensionalArray;
int [][][] threeDimensionalArray;
// Инициализация массивов
goodArray = new int[10]; // Инициализируем массив с 10 элементами
goodArray[0] = 15; // Присваиваем значение первому элементу массива
goodArray[1] = 25; // Присваиваем значение второму элементу массива
twoDimensionalArray = new int [5][4]; // Двумерный массив 5х
twoDimensionalArray[0] = new int[4];
twoDimensionalArray[1] = new int[8]; // ПЛОХО: Компилятор проглотит, но по факту выделится место всего под 4 инта
twoDimensionalArray[0][0] = 1; // Присваиваем значение
twoDimensionalArray[1][5] = 5; // НЕЛЬЗЯ: Компилятор выдаст ошибку
System.out.print(twoDimensionalArray[1][6]); // НЕЛЬЗЯ: Компилятор выдаст ошибку
// Объявление с инициализацией
int[] quickArray = {1, 2, 3 ,4}; // Объявляем и сразу заполняем данные. Компилятор выделит место под 4 инта
quickArray[5] = 6; // НЕЛЬЗЯ: Компилятор выдаст ошибку, т.к. индекс выходит за пределы массива
int[][] quick2DArray = {
{1 ,2 ,3},
{1, 3, 4}
};/*
* Синтаксис функции:
* [1-модификаторы доступа] [2-тип возвращаемого значения] [3-имя]([4-аргументы]) [5-список исключений] {
* 6- тело функции
* }
*
* 1 - модификаторы доступа: на данный момент они нас не интересует, можно ничего не писать или писать private
* 2 - тип возвращаемого значения - тип данных либо void, если функция ничего не возвращает
* 3 - ограничения как и на имена переменных, но есть дополнительные правила наименования, о них ниже
* 4 - список аргументов через запятую. Например (int a, double b). Если нет аргументов - пустые скобки
* 5 - исключение пока не рассматриваем, если их нет, то просто ничего не пишут
* 6 - тело функции, в нем происходит выполнение функции. Если есть возвращаемый тип данных - должен быть return
*/
private int findMinimum(int a, int b) {
int min;
min = (a < b) ? a : b;
return min;
}
/*
* Название метода начинается с маленькой буквы, если несколько слов - используется lowerCamelCase.
* Первое слово должно быть глаголом (т.к. метод, как правило, "что-то делает"), остальные слова могут быть
* прилагательными, существительными и тд. Символ _ крайне желательно не использовать (кроме юнит-тестов)
*/
// ХОРОШО: с маленькой буквы, первое слово - глагол
private void drawCircle() {}
// ПЛОХО: Символы $ и _ не используем
private void $er () {}
// ПЛОХО: я сказал "не используем"!
private void draw_circle () {}
// ПЛОХО: первое слово с маленькой буквы
private void Draw() {}
// ПЛОХО: первое слово должно быть глаголом
private void circle() {}




<dependencies>
...
<!-- jpa, crud repository -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- PostgreSQL -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
</dependencies>spring:
jpa:
database: POSTGRESQL
show-sql: true
hibernate:
ddl-auto: create-drop
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
datasource:
platform: postgres
url: jdbc:postgresql://localhost:5432/ejournal
username: ejournal_user
password: 123456
driverClassName: org.postgresql.Driver@Entity
@Table(name = "students")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
private int age;
}<dependencies>
...
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>@Entity
@Table(name = "students")
@Data
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
private int age;
}@org.springframework.stereotype.Service
public class Service {
public void addStudent(Student student, int id) {
// Добавление нового студента
}
public List<Student> getAllStudents() {
// Получение списка студентов
}
}@RestController
public class Controller {
@Autowired
private Service service;
@PostMapping("/student")
public void addStudent(@RequestBody Student student) {
service.addStudent(student);
}
@GetMapping("/student")
public List<Student> getAllStudents() {
return service.getAllStudents();
}
}@Entity
@Table(name = "groups")
@Data
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
@OneToMany(mappedBy = "group")
private List<Student> studentList;
}public interface StudentRepository extends JpaRepository<Student, Integer> {
}@org.springframework.stereotype.Service
public class Service {
@Autowired
private StudentRepository studentRepo;
public void addStudent(Student student) {
studentRepo.save(student);
}
public List<Student> getAllStudents() {
return studentRepo.findAll();
}
}@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String firstname;
private String lastname;
private int age;
@ManyToOne (fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "group_id",nullable = false)
@JsonIgnore
private Group group;
}@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "groups")
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL)
private List<Student> students;
public void addStudent(Student student) {
students.add(student);
}
}@RestController
public class Controller {
@Autowired
private Service service;
@PostMapping("/student/{group_id}")
public void addStudent(@RequestBody Student student, @PathVariable(name = "group_id") int group_id) {
service.addStudent(student, group_id);
}
@GetMapping("/student")
public List<Student> getAllStudents() {
return service.getAllStudents();
}
@PostMapping("/group")
public void addGroup(@RequestBody Group group) {
service.addGroup(group);
}
@GetMapping("/group")
public List<Group> getAllGroups() {
return service.getAllGroups();
}
}public interface GroupRepository extends JpaRepository<Group, Integer> {}@org.springframework.stereotype.Service
public class Service {
@Autowired
private StudentRepository studentRepo;
@Autowired
private GroupRepository groupRepo;
public void addStudent(Student student, int id) {
Group g = groupRepo.getOne(id);
student.setGroup(g);
studentRepo.save(student);
}
public List<Student> getAllStudents() {
return studentRepo.findAll();
}
public void addGroup(Group group) {
groupRepo.saveAndFlush(group);
}
public List<Group> getAllGroups() {
return groupRepo.findAll();
}
}



public class DepartmentMember {
private String firstName;
private String lastName;
private String position;
public DepartmentMember
(String firstName, String lastName, String position) {
this.firstName = firstName;
this.lastName = lastName;
this.position = position;
}
}public static void main(String[] args) {
DepartmentMember member1 = new DepartmentMember(
"Иван",
"Иванов",
"доцент"
);
DepartmentMember member2 = new DepartmentMember(
"Иван",
"Иванов",
"старший преподаватель"
);
}class DepartmentMember {
public static final int ENGINEER = 0;
public static final int ASSISTANT = 1;
public static final int LECTURER = 2;
public static final int SENIOR_LECTURER = 3;
public static final int PROFESSOR = 4;
private String firstName;
private String lastName;
private int position;
public DepartmentMember
(String firstName, String lastName, int position) {
this.firstName = firstName;
this.lastName = lastName;
this.position = position;
}
}public static void main(String[] args) {
DepartmentMember member1 = new DepartmentMember(
"Иван",
"Иванов",
DepartmentMember.ENGINEER
);
DepartmentMember member2 = new DepartmentMember(
"Петр",
"Петров",
DepartmentMember.PROFESSOR
);
}class DepartmentMember {
public static final int ENGINEER = 0;
public static final int ASSISTANT = 1;
public static final int LECTURER = 2;
public static final int SENIOR_LECTURER = 3;
public static final int PROFESSOR = 4;
public static final int FULL_TIME = 100;
public static final int PART_TIME = 101;
private String firstName;
private String lastName;
private int position;
private int contractType;
public DepartmentMember
(String firstName, String lastName, int position, int contractType) {
this.firstName = firstName;
this.lastName = lastName;
this.position = position;
this.contractType = contractType;
}
}public static void main(String[] args) {
DepartmentMember member1 = new DepartmentMember(
"Петр",
"Петров",
DepartmentMember.FULL_TIME, // ???
DepartmentMember.PART_TIME // ???
);
}class DepartmentMember {
private String firstName;
private String lastName;
private Position position;
public DepartmentMember
(String firstName, String lastName, Position position) {
this.firstName = firstName;
this.lastName = lastName;
this.position = position;
}
public enum Position {
Engineer, Assistant, Lecturer, SeniorLecturer, Professor;
}
}public static void main(String[] args) {
DepartmentMember member1 = new DepartmentMember(
"Иван",
"Иванов",
DepartmentMember.Position.Assistant
);
DepartmentMember member2 = new DepartmentMember(
"Петр",
"Петров",
DepartmentMember.Position.Professor
);
}enum Palette {
RED("#ff0000"),
YELLOW("#ffff00"),
CYAN("#00ffff"),
GREEN("#008000");
private final String color;
Palette(String color) {
this.color = color;
}
}class Controller implements Initializable {
@FXML Button button1;
@FXML Button button2;
@FXML Button button3;
@FXML Button button4;
@Override
public void initialize(URL location, ResourceBundle resources) {
button1.setStyle("-fx-background-color: " + Palette.CYAN);
button2.setStyle("-fx-background-color: " + Palette.GREEN);
button3.setStyle("-fx-background-color: " + Palette.YELLOW);
button4.setStyle("-fx-background-color: " + Palette.RED);
}
}



