Глухих Михаил Игоревич mailto:...

58
Глухих Михаил Игоревич mailto: [email protected]

Upload: others

Post on 06-Oct-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

Глухих Михаил Игоревичmailto: [email protected]

Page 2: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

Лекции, 2 часа в неделю◦ Отчётность – экзамен в конце семестра◦ Экзамен – собеседование по теории, с оценкой

Практика, 1 (?) час в неделю◦ Три задания, за каждое ставится оценка◦ Отчётность – курсовой проект с оценкой◦ Оценка за курсовой проект =

Сумма оценок за три задания / 3◦ «5» за курсовой проект до конца зачётной недели ➔ +1 балл к экзаменационной оценке

Самостоятельная работа студентов◦ Не менее 2-3 часов в неделю

2

Page 3: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

1. Проектирование класса (5 недель)◦ Язык = Java или Kotlin◦ Аттестация после 9 марта

2. Консольное приложение (5.5 недель)◦ Язык = Java или Kotlin◦ Аттестация после 15 апреля

3. GUI-приложение (5.5 недель)◦ Язык = Java или Kotlin◦ Курсовой проект◦ Защита в конце семестра (скорее всего в форме

беседы с преподавателем)◦ Отчёт по курсовому проекту

3

Page 4: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

Если на Котлине◦ Или делаем один класс FixedPointNumber /

UnsignedBigInteger◦ Или делаем два класса:

один из урока 11 и один из урока 12◦ Сдаём через систему Котоед◦ Тесты дописываем

Если на Java◦ Делаем один класс с нуля (задания раздают

преподаватели практики)◦ Сами пишем и класс, и тесты◦ Сдаём в виде репозитория на GitHub

4

Page 5: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

На выбор, Kotlin или Java

Пишем с нуля

Не забываем писать тесты

Сдаём в виде репозитория на GitHub

5

Page 6: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

JDK 1.8 или 1.11◦ Скачать с сайта Oracle и установить

Intellij IDEA Community Edition (бесплатна)◦ Скачать с сайта JetBrains и установить◦ Альтернативы: Eclipse, Netbeans

GitHub account◦ Рецензирование кода – исключительно там!◦ Оценивается, в том числе, аккуратность ведения

проекта на GitHub

JUnit (или другая библиотека тестирования)◦ Написание тестов обязательно!

6

Page 7: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

26

Структура лекций

Типы, операции, конструкции

Классы, интерфейсы, наследование

Коллекции и утилиты

GUI на Java: AWT, Swing, JavaFX

Многопоточные приложения на Java

Page 8: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

8

Литература

Ильдар Хабибуллин. Java 7. СПб.: БХВ-Петербург, 2012

Арнольд К., Гослинг Дж., Холмс Д. Язык программирования Java, 3-е издание. М.: Издательский дом «Вильямс», 2001.

James Gosling, Bill Joy, Guy Steele, Gilad Bracha. The Java Language Specification, Second Edition.

Joshua Bloch. Effective Java: Programming Language Guide, second edition. ISBN 978-0-321-35668-0, 2008.

Page 9: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

9

Полезные ссылки

Проект с примерами

https://github.com/Kotlin-Polytech/FromKotlinToJava

Страничка курса

http://kspt.icc.spbstu.ru/course/javaintro

KotlinAsFirst, chapter11, chapter12

Page 10: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

10

Java vs Kotlin

Kotlin

Уже частично изучен

Разработка идёт быстрее

Java

Лекции этого семестра про Java

Более востребован

Page 11: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

Версии Java SE

Java SE 1.11 – 2018 год, небольшие изменения в языке / библиотеке

Java SE 1.8 – 2014 год, довольно существенные усовершенствования

Java SE 1.6 – 2006 год

11

Page 12: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

12

Простейшая программа на Java (1, hello world)

// Hello.java

package test;

public class Hello {

public static void main(String[] args) {

System.out.println("Здравствуй, мир!");

}

}

Page 13: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

13

Простейшая программа на Java (2, square)

// Math.java

package test;

public class Math {

public static int sqr(int x) {

int y = x * x;

return y;

}

}

Page 14: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

14

Классы в Java

Класс – структурный элемент программы

По правилам Java, все прочие элементы программы должны находится внутри классов

ООП – класс описывает какой-либо объект / понятие и объединяет в себе данные и функции для работы с ними

Page 15: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

15

Классы в Java

Класс – структурный элемент программы

По правилам Java, все прочие элементы программы должны находится внутри классов

ООП – класс описывает какой-либо объект / понятие и объединяет в себе данные и функции для работы с ними

Java: класс = поля + методы

Kotlin: класс = свойства + функции

Page 16: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

16

Функции vs Методы

Приблизительно одно и то же

Методы ~ Функции класса

Так как в Java все функции принадлежат классам ➔ Методы

Page 17: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

17

Поля vs Свойства

РАЗНЫЕ вещи

Поле = Член-данное класса

Page 18: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

18

Поля vs Свойства

РАЗНЫЕ вещи

Поле = Член-данное класса

Свойство = что-то в классе, что можно читать (опционально также писать)

В том числе поле!

Page 19: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

19

Поля vs Свойства

РАЗНЫЕ вещи

Поле = Член-данное класса

Свойство = что-то в классе, что можно читать (опционально также писать)

В том числе поле!

Не факт, что значение свойства где-то хранится!

Page 20: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

20

Поля vs Свойства

Пример – Планета

Планета описывается массой и радиусом –это поля класса «Планета»

Page 21: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

21

Поля vs Свойства

Пример – Планета

Планета описывается массой и радиусом –это поля класса «Планета»

На их основе можно рассчитать ускорение свободного падения на поверхности – это свойство класса «Планета»

Page 22: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

22

Видимость в Java

public – класс (метод, поле) видят все

(no modifier) – класс (метод, поле) видят все в том же пакете (package private)

Page 23: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

23

Видимость в Java

public – класс (метод, поле) видят все

(no modifier) – класс (метод, поле) видят все в том же пакете (package private)

private –метод / поле видят все внутри класса

Page 24: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

24

Видимость в Kotlin

(no modifier) – видят все

private – видят все внутри класса

Page 25: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

25

Статические и обычные методы класса

Отличаются наличием (или отсутствием) модификатора static

Статические методы

~ замена глобальных

Вызов: Math.sqr, где Math – имя класса

Нестатические методы

Привязаны к конкретному объекту и вызываются через него

Вызов: list.size()

Page 26: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

26

Типы в Kotlin / Java

Kotlin

val (var) name: (Type) (= …) (;)

Java

Type name (= …);

JDK 10+:

var name = …;

Page 27: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

27

Типы в Java

Примитивные

Называются с маленькой буквы

byte, short, int, long, float, double, char, boolean

Page 28: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

28

Типы в Java

Примитивные

Называются с маленькой буквы

byte, short, int, long, float, double, char, boolean

Ссылочные

Все остальные, называются с большой буквы

Page 29: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

29

Типы в Java

Примитивные

Называются с маленькой буквы

byte, short, int, long, float, double, char, boolean

Ссылочные

Все остальные, называются с большой буквы

Kotlin

Все типы ссылочные или притворяются ими

Page 30: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

30

Типы-обёртки в Java

Ссылочные аналоги примитивных типов

Byte, Short, Integer, Long, Float, Double, Character, Boolean

Page 31: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

31

Примитивные типы

Целые

◼ byte (1 байт, -128...127)

◼ short (2 байта, -32768...32767)

◼ int (4 байта, -231...231-1)

◼ long (8 байт, -263...263-1)

Page 32: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

32

Примитивные типы

Целые

◼ byte (1 байт, -128...127)

◼ short (2 байта, -32768...32767)

◼ int (4 байта, -231...231-1)

◼ long (8 байт, -263...263-1)

Вещественные

◼ float (4 байта)

◼ double (8 байт)

Page 33: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

33

Примитивные типы

Целые

◼ byte (1 байт, -128...127)

◼ short (2 байта, -32768...32767)

◼ int (4 байта, -231...231-1)

◼ long (8 байт, -263...263-1)

Вещественные

◼ float (4 байта)

◼ double (8 байт)

Символьный

◼ char (2 байта, Unicode, 0...65535)

Page 34: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

34

Примитивные типы

Целые

◼ byte (1 байт, -128...127)

◼ short (2 байта, -32768...32767)

◼ int (4 байта, -231...231-1)

◼ long (8 байт, -263...263-1)

Вещественные

◼ float (4 байта)

◼ double (8 байт)

Символьный

◼ char (2 байта, Unicode, 0...65535)

Логический

◼ boolean (true или false)

Page 35: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

35

Константы

Целые

◼ 57, +323, -48 (десятичная форма, 4 байта)

◼ 024, -0634, 0777 (восьмеричная форма)

◼ 0xabcd, -0x19f (шестнадцатеричная форма)

◼ 0b010001001 (двоичная форма, только JDK 7+)

◼ 43_934 (форма с _, только в JDK 7+)

◼ 1234567890123L, 0xabcdef1234L (8-байтные)

Page 36: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

36

Константы

Целые

◼ 57, +323, -48 (десятичная форма, 4 байта)

◼ 024, -0634, 0777 (восьмеричная форма)

◼ 0xabcd, -0x19f (шестнадцатеричная форма)

◼ 0b010001001 (двоичная форма, только JDK 7+)

◼ 43_934 (форма с _, только в JDK 7+)

◼ 1234567890123L, 0xabcdef1234L (8-байтные)

Вещественные

◼ 37.29, -19.41 (обычная форма, 8 байт)

◼ 3e+12, -1.1e-7 (экспоненциальная форма)

◼ 3.6F, -1.0e-1F (4-байтные)

Page 37: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

37

Константы

Символьные

◼ 'a', '?', ' ', '\n', '\t', '\\' (обычный вариант)

◼ '\40', '\62' – восьмеричный код

◼ '\u0053' – юникод

Page 38: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

38

Константы

Символьные

◼ 'a', '?', ' ', '\n', '\t', '\\' (обычный вариант)

◼ '\40', '\62' – восьмеричный код

◼ '\u0053' – юникод

Строковые

◼ "Hello, world\n"

◼ "Сложение " + "строк"

◼ Нет строковых шаблонов: "Hello $name"

Page 39: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

39

Операции

Арифметические: + - * / % ++ --

Page 40: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

40

Операции

Арифметические: + - * / % ++ --

Логические: & && | || ^ !

Page 41: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

41

Операции

Арифметические: + - * / % ++ --

Логические: & && | || ^ !

Сравнения: > < >= <= == !=

Page 42: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

42

Операции сравнения: Java vs Kotlin

Kotlin

a == b сравнение значений

a === b сравнение ссылок

Java

a.equals(b) сравнение значений

a == b сравнение ссылок

Page 43: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

43

Операции

Арифметические: + - * / % ++ --

Логические: & && | || ^ !

Сравнения: > < >= <= == !=

Побитовые: ~ & | ^

Page 44: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

44

Операции

Арифметические: + - * / % ++ --

Логические: & && | || ^ !

Сравнения: > < >= <= == !=

Побитовые: ~ & | ^

Сдвиговые: << >> >>>

Page 45: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

45

Операции

Арифметические: + - * / % ++ --

Логические: & && | || ^ !

Сравнения: > < >= <= == !=

Побитовые: ~ & | ^

Сдвиговые: << >> >>>

Присваивания: = += -= *= /= %= &= |= ^= <<= >>= >>>=

Page 46: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

46

Операции

Арифметические: + - * / % ++ --

Логические: & && | || ^ !

Сравнения: > < >= <= == !=

Побитовые: ~ & | ^

Сдвиговые: << >> >>>

Присваивания: = += -= *= /= %= &= |= ^= <<= >>= >>>=

Условная: a > b ? a : b

Page 47: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

47

Операции

Арифметические: + - * / % ++ --

Логические: & && | || ^ !

Сравнения: > < >= <= == !=

Побитовые: ~ & | ^

Сдвиговые: << >> >>>

Присваивания: = += -= *= /= %= &= |= ^= <<= >>= >>>=

Условная: a > b ? a : b

Приведения типа: int a = (int)2.5

Page 48: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

48

Ветвления

if … else … -- как в Котлин

НО! Нельзя использовать как выражение

вместо этого есть a ? b : c

Page 49: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

49

Ветвления

switch … case …

Как when в Kotlin, но меньше возможностейswitch (someInt) {

case 1:...break;

default:...break;

}

Page 50: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

50

Ключи в switch

Только

Целые числа

Символы

Элементы перечисления (enum)

Строки (только в JDK 7+)

Page 51: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

51

Циклы

while (…) { … }

как в Котлине

Page 52: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

52

Циклы

while (…) { … }

как в Котлине

do { … } while (…)

~ как в Котлине

Page 53: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

53

Циклы

while (…) { … }

как в Котлине

do { … } while (…)

~ как в Котлине

for (int i = 0; i < 10; i++) { … }

Page 54: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

54

Циклы

while (…) { … }

как в Котлине

do { … } while (…)

~ как в Котлине

for (int i = 0; i < 10; i++) { … }

for (String element: listOfStrings) { … }

Page 55: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

55

Циклы

while (…) { … }

как в Котлине

do { … } while (…)

~ как в Котлине

for (int i = 0; i < 10; i++) { … }

for (String element: listOfStrings) { … }

break, continue

Page 56: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

56

Строки

Тип String

В основном как в Котлине

Сложение +

Сравнение equals (!)

Page 57: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

57

Массивы

Тип массива в Java обозначается как T[], где T – базовый тип

например, int[], float[], double[], String[]

Создается массив следующим образом:

int[] arr = new int[10]; // с нулями

int[] arr = null; // нулевая ссылка

// начальные значения заданы

int[] arr2 = new int[] { 2, 3, 4 };

Page 58: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2020/java/Java01.pdfПроектирование класса (5 недель) Язык

58

Итоги

Рассмотрена

простейшая программа

примитивные типы

константы и операции

основные конструкции

Далее

проектирование классов