Зверский взгляд на Java

Содержание

Слайд 2

СПИСОК ЛИТЕРАТУРЫ

«Полное руководство по Java» - Шилдт Г. Приводится подробное описание языка
«Совершенный

СПИСОК ЛИТЕРАТУРЫ «Полное руководство по Java» - Шилдт Г. Приводится подробное описание
код» Макконнелл С. Подробно рассматриваются различные аспекты разработки ПО
«Философия Java» Эккель Б. Рассказывается почему Джава устроена так, а не иначе.
https://javarush.ru/ - ресурс для самообучения программированию на Java (уже платный)
https://stepik.org/catalog - вроде как бесплатный

Слайд 3

РАЗРАБОТКА ОДНОЙ КАРТИНКОЙ

РАЗРАБОТКА ОДНОЙ КАРТИНКОЙ

Слайд 4

УПРАВЛЕНИЕ СЛОЖНОСТЬЮ

Сложность задачи

Сложность решения

Плохо

Хорошо

JavaScript

C#

Java, C, C++

УПРАВЛЕНИЕ СЛОЖНОСТЬЮ Сложность задачи Сложность решения Плохо Хорошо JavaScript C# Java, C, C++

Слайд 5

ОБЛАСТИ ПРИМЕНЕНИЯ

Настольные приложения под ОС Windos, Linux, MacOS
Консольные
Встроенный функционал для создания оконных

ОБЛАСТИ ПРИМЕНЕНИЯ Настольные приложения под ОС Windos, Linux, MacOS Консольные Встроенный функционал
приложений
web-приложения
сервлеты
??апплеты??
Мобильные приложения – Android
У нас – OAF
Android

Слайд 6

КОНЦЕПЦИЯ ЯЗЫКА JAVA

Комп 1

Код

Комп 2

Комп 3

Комп 4

Комп 1

Комп 2

Комп 3

Комп 4

JRE 1

JRE

КОНЦЕПЦИЯ ЯЗЫКА JAVA Комп 1 Код Комп 2 Комп 3 Комп 4
2

JRE 3

JRE 4

Код для виртуальной машины (jar)

Компилируемый код – Kotlin, Scala

JRE –
Java
Runtime
Enviroment

JDK –
Java
Development
Kit

C, C++

Код

Java

Слайд 7

ИЗ ЧЕГО СОСТОИТ JAVA

JRE (Java Runtime Environment) – среда исполнения Java

JDK (Java

ИЗ ЧЕГО СОСТОИТ JAVA JRE (Java Runtime Environment) – среда исполнения Java
Development Kit) = JRE + инструменты разработки
Javac – компилятор
Javadoc – формирование документации
Что-то ещё

Среда разработки:
IntelliJ IDEA фирмы JetBrains
Community – бесплатная. Мне хватает
В принципе для работы достаточно текстового редактора и консоли

Скачать всё это можно с официального сайта Oracle

Слайд 8

СБОРЩИК МУСОРА

C, C++

Ручное управление памятью (new и delete)
+ Возможность более эффективного управления

СБОРЩИК МУСОРА C, C++ Ручное управление памятью (new и delete) + Возможность
памятью (зависит от квалификации программиста)
Сложнее программировать
Выделение и освобождение памяти вручную
Менее безопасно
Можно обратиться вообще в любую область памяти

JAVA, C#

Виртуальная машина сама решает, когда можно удалить тот или иной объект.
+ Проще программировать
+ Безопасность – нет произвольного доступа к памяти
- Большее потребление памяти (зависит от квалификации программиста)
- Сборка мусора. Иногда приложение может зависнуть на какое-то время, так как все ресурсы тратятся только на очистку мусора

Слайд 9

КОММЕНТАРИИ И ДОКУМЕНТАЦИЯ

КОММЕНТАРИИ И ДОКУМЕНТАЦИЯ

Слайд 10

ЭНТРОПИЯ

Переменные

Функции

Энтропия – мера хаоса системы.
Количественно можно описать возможным
количеством микросостояний

ЭНТРОПИЯ Переменные Функции Энтропия – мера хаоса системы. Количественно можно описать возможным количеством микросостояний

Слайд 11

НАДО БЫ КАК-ТО УПОРЯДОЧИТЬ ВСЁ ЭТО

Поля

Методы

База данных

Графический
интерфейс

execDirect(String query)

Закрытая область

Работа с сетью

Логика

НАДО БЫ КАК-ТО УПОРЯДОЧИТЬ ВСЁ ЭТО Поля Методы База данных Графический интерфейс
работы приложения

Нужен ещё более высокий уровень абстракции

Слайд 12

ЗАЧЕМ ТАК СЛОЖНО?

ЗАЧЕМ ТАК СЛОЖНО?

Слайд 13

СОГЛАСОВАННОЕ РЕДАКТИРОВАНИЕ ПОЛЕЙ

СОГЛАСОВАННОЕ РЕДАКТИРОВАНИЕ ПОЛЕЙ

Слайд 14

ПАКЕТЫ 1 ОТКРЫТЫЙ КЛАСС – 1 ФАЙЛ

ПАКЕТЫ 1 ОТКРЫТЫЙ КЛАСС – 1 ФАЙЛ

Слайд 15

ОБЛАСТЬ ВИДИМОСТИ

ОБЛАСТЬ ВИДИМОСТИ

Слайд 16

РАННЕЕ И ПОЗДНЕЕ СВЯЗЫВАНИЕ ИЛИ ПАРА СЛОВ О ПРИВАТНОСТИ

private – нельзя переопределить, то

РАННЕЕ И ПОЗДНЕЕ СВЯЗЫВАНИЕ ИЛИ ПАРА СЛОВ О ПРИВАТНОСТИ private – нельзя
есть можно выполнить связывание на этапе компиляции. Несколько выше производительность
Все остальные – связывание на этапе выполнения. То есть выполняемый вариант будет выполняться во время выполнения программы

Слайд 17

Инициализация
присвоение значения

ИНИЦИАЦИЯ ПОЛЕЙ

Объявление
создание переменной.
Можно везде, но до первого использования

Инициализация присвоение значения ИНИЦИАЦИЯ ПОЛЕЙ Объявление создание переменной. Можно везде, но до первого использования

Слайд 18

МНОГОКРАТНОЕ ИСПОЛЬЗОВАНИЕ КОДА

ОДНОКРАТНО ИСПОЛЬЗУЕМЫЙ КОД

Много кода
Сложно поддерживать одинаковую работу
Низкое качество кода

МНОГОКРАТНО

МНОГОКРАТНОЕ ИСПОЛЬЗОВАНИЕ КОДА ОДНОКРАТНО ИСПОЛЬЗУЕМЫЙ КОД Много кода Сложно поддерживать одинаковую работу
ИСПОЛЬЗУЕМЫЙ КОД

Мало кода
Высокое качество кода

Слайд 19

ДАННЫЕ СУЩЕСТВУЮТ И ПЕРЕДАЮТСЯ ЦЕЛЫМИ ОБЪЕКТАМИ

Макс Планк – ввёл понятие «кванта действия»,

ДАННЫЕ СУЩЕСТВУЮТ И ПЕРЕДАЮТСЯ ЦЕЛЫМИ ОБЪЕКТАМИ Макс Планк – ввёл понятие «кванта
что стало основой квантовой механики.
Можно провести аналогию, что части программ тоже передаются и существуют целыми кусками

Слайд 20

НАСЛЕДОВАНИЕ

Абстрактный класс – нельзя создать объект.
Определяет функционал

НАСЛЕДОВАНИЕ Абстрактный класс – нельзя создать объект. Определяет функционал

Слайд 21

ВСЁ ЕСТЬ OBJECT

ВСЁ ЕСТЬ OBJECT

Слайд 22

NULL

Все объекты могут быть преобразованы в null
NullPointerExeption – нет объекта

NULL Все объекты могут быть преобразованы в null NullPointerExeption – нет объекта

Слайд 23

ПАРА СЛОВ О ХРУПКОСТИ

А теперь в базовом классе нам нужна ещё и

ПАРА СЛОВ О ХРУПКОСТИ А теперь в базовом классе нам нужна ещё
цена
Добавляем в базовом классе поле и добавляем ещё один параметр в конструктор (пока всё хорошо)
Меняем соответственным образом конструкторы все потомков (более - менее нормально)
Исправляем все использования в коде (а вот здесь начинается самая жесть)

Слайд 24

НАСЛЕДОВАНИЕ И КОМПОЗИЦИЯ

Пример композиции

НАСЛЕДОВАНИЕ И КОМПОЗИЦИЯ Пример композиции

Слайд 25

ПРИМИТИВЫ

Указатель

ПРИМИТИВЫ Указатель

Слайд 26

ОБЪЕКТЫ В ПАМЯТИ

Переменная 2

Переменная 1

Переменная 3
(список)

Переменная 4
(внутри функции)

ОБЪЕКТЫ В ПАМЯТИ Переменная 2 Переменная 1 Переменная 3 (список) Переменная 4 (внутри функции)

Слайд 27

СРАВНЕНИЕ

equals()
Для сравнения объектов в коде
По умолчанию сравниваются ссылка на объекты.
Для всех других

СРАВНЕНИЕ equals() Для сравнения объектов в коде По умолчанию сравниваются ссылка на
случаев надо метод переопределить

hashCode()
Для корректной работы карт (HashMap, HashTable)

Оператор == работает для примитивов именно так, как и предполагается
Для объектов сравнивается ссылка.
Как сравнить две даты? Что считать равными датами в текущей задаче?
С точностью до часа? Минуты? Попадают в один период?

Слайд 28

НЕМНОГО СТАТИЧНОСТИ

static – элемент класса, не нужен объект.
public static void main(String[]

НЕМНОГО СТАТИЧНОСТИ static – элемент класса, не нужен объект. public static void
args)
Блок инициализации тоже может быть статичным
static { статичный код }
Может использовать только статичные поля и методы
Часто используется для работы со сложными объектами, когда создание большого их количества нежелательно
Единый объект на все экземпляры. Часто используется для реализации констант.

Слайд 29

ПОЛИМОРФИЗМ

Наследование
Реализация интерфейсов
Перегрузка функций
Список аргументов переменной длинны

append() – метод. Много сигнатур.

ПОЛИМОРФИЗМ Наследование Реализация интерфейсов Перегрузка функций Список аргументов переменной длинны append() – метод. Много сигнатур.

Слайд 30

ЗАПУСК ПРИЛОЖЕНИЯ

Вначале было: static public void main(String[] args){}
Этот метод – точка входа

ЗАПУСК ПРИЛОЖЕНИЯ Вначале было: static public void main(String[] args){} Этот метод –
в программу.
static – в начале нет ни одного объекта
public – нужен доступ для запуска
void – это есть начали и конец, зачем возвращать значение?
String[] args – список параметров запуска. Используется при запуске из консоли.

Слайд 31

ВЛОЖЕННЫЕ КЛАССЫ И МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕ

ВЛОЖЕННЫЕ КЛАССЫ И МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕ

Слайд 32

КОНВЕНЦИЯ ИМЕНОВАНИЯ

Для Java это официальный документ (https://www.oracle.com/technetwork/java/codeconventions-135099.html).
Имеет статус рекомендаций, то есть

КОНВЕНЦИЯ ИМЕНОВАНИЯ Для Java это официальный документ (https://www.oracle.com/technetwork/java/codeconventions-135099.html). Имеет статус рекомендаций, то
отклонения не являются ошибками синтаксиса.
Если кратко:
КОНСТАНТЫ
ИмяКласса
имяПеременной, имяМетода()

Слайд 33

ВЕТВЛЕНИЯ

IF

Ну всё как везде
Тернарный оператор
If true ? 2 :0

SWITCH

Фиксированные строки
Числа
Элементы перечислений

ВЕТВЛЕНИЯ IF Ну всё как везде Тернарный оператор If true ? 2

Слайд 34

ЦИКЛЫ И GOTO МЕТКИ

ЦИКЛЫ И GOTO МЕТКИ

Слайд 35

FINAL

Поля класса – обязательно должны быть инициированы ровно 1 раз:
либо при

FINAL Поля класса – обязательно должны быть инициированы ровно 1 раз: либо
объявлении
либо в блоке инициирования
либо во всех конструкторах
final – не константа, пишем маленькими.
Не могут больше менять значение. При этом объект может изменяться!
Переменные метода – значит в методе не меняется ссылка
Методы – нельзя переопределить.
Классы – нельзя переопределить. Например String.

Слайд 36

ИСКЛЮЧЕНИЯ СЛУЧАЮТСЯ

Проверяемые,
проверка на этапе компиляции

Непроверяемые,
возникают в любой момент

ИСКЛЮЧЕНИЯ СЛУЧАЮТСЯ Проверяемые, проверка на этапе компиляции Непроверяемые, возникают в любой момент

Слайд 37

ИСКЛЮЧЕНИЯ СЛУЧАЮТСЯ

Исключение в конструкторе – объект не создаётся
Исключение либо обрабатывается, либо передаётся

ИСКЛЮЧЕНИЯ СЛУЧАЮТСЯ Исключение в конструкторе – объект не создаётся Исключение либо обрабатывается,
в сигнатуру метода
При переопределении методов исключения можно только добавлять

Слайд 38

TRY И TRY С РЕСУРСАМИ

try {
//код
}
catch{Exeption e}
finally{
//Выполняется всегда после блока кода
}

public boolean

TRY И TRY С РЕСУРСАМИ try { //код } catch{Exeption e} finally{
createColumnIfNeed(String tableName, String columnName, String type) { try (Cursor cursor = getCursor("Select * from " + tableName)) { if (cursor.getColumnIndex(columnName) == -1) { mDB.execSQL("alter table " + tableName + " add column " + columnName + " " + type + ";"); mDB.execSQL("alter table " + tableName + TMP + " add column " + columnName + " " + type + ";"); return true; } return false; } }
Можно объявить переменные, реализующие интерфейс AutoCloseable. Метод close() будет вызван при выходе из блока.

Слайд 39

КОЛЛЕКЦИИ И МАССИВЫ

КОЛЛЕКЦИИ

Произвольное количество элементов (можно задавать начальное кол-во)
Случайное распределение в памяти,

КОЛЛЕКЦИИ И МАССИВЫ КОЛЛЕКЦИИ Произвольное количество элементов (можно задавать начальное кол-во) Случайное
как следствие – меньшая производительность
Не уменьшаются, если не используются элементы

МАССИВЫ

Фиксированное кол-во элементов
В памяти располагаются последовательно, как следствие большая производительность

Слайд 40

ПАРА СЛОВ О КОЛЛЕКЦИЯХ

ПАРА СЛОВ О КОЛЛЕКЦИЯХ

Слайд 41

ПЕРЕЧИСЛЕНИЯ

Список констант
+ можно сделать цикл по всему множеству
+ Дополнительное ограничение при передаче

ПЕРЕЧИСЛЕНИЯ Список констант + можно сделать цикл по всему множеству + Дополнительное
параметров / возврате значений

Слайд 42

АННОТАЦИИ

@Override – проверяет, что есть что переопределять
@Deprecated - устарело

АННОТАЦИИ @Override – проверяет, что есть что переопределять @Deprecated - устарело

Слайд 43

НЕМНОГО О СТРОКАХ

STRING

Фиксированный, неизменяемый текст

STRINGBUILDER

Класс для редактирования строк
Операции по редактированию строк проходят

НЕМНОГО О СТРОКАХ STRING Фиксированный, неизменяемый текст STRINGBUILDER Класс для редактирования строк
намного быстрее

Слайд 44

ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ДЛЯ НАСТОЛЬНЫХ ПРИЛОЖЕНИЙ

AWT – старый, не рекомендуется для использования
Swing –

ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ДЛЯ НАСТОЛЬНЫХ ПРИЛОЖЕНИЙ AWT – старый, не рекомендуется для использования
получше
FX – начиная с Java8, сам не пробовал.
Заявлена кроссплатформенность.

Frame - окно

Контейнер и менеджер раскладки

Текст1

Текст3

Текст2

Слайд 45

ПОТОКИ И ПОТОКОБЕЗОПАСНОСТЬ

ПОТОКИ И ПОТОКОБЕЗОПАСНОСТЬ

Слайд 46

СЕРИАЛИЗАЦИЯ

Передача объектов на другой компьютер
Сохранение между запусками

СЕРИАЛИЗАЦИЯ Передача объектов на другой компьютер Сохранение между запусками

Слайд 47

СОКРАЩЕННЫЕ ЛОГИЧЕСКИЕ ОПЕРАТОРЫ

if(true1 & false 2 & false 3) – выполнятся все

СОКРАЩЕННЫЕ ЛОГИЧЕСКИЕ ОПЕРАТОРЫ if(true1 & false 2 & false 3) – выполнятся
проверки
if(true1 && false 2 && false 3) – выполнятся только первые 2, на втором шаге значение всего выражения уже понятно)

if(true1 | false 2 | false 3) – выполнятся все проверки
if(false1 || true 2 || false 3) – выполнится только 2

Имя файла: Зверский-взгляд-на-Java.pptx
Количество просмотров: 38
Количество скачиваний: 0