среда, 5 июля 2017 г.

День четырнадцатый

FlowLayout - размещает все компоненты в одну строку
GridLayout - по сетке привязки
BorderLayout - делит UI - контейнер на 5 зон: север-юг-восток-запад-центр и распределяет компоненты по этим зонам
CardLayout - как колода карт, в которой видна только верхняя карта
BoxLayout - кидает как в ящик по вертикали либо по горизонтали
AbsoluteLayout - вручную
GridBagLayout - по сетке, но при этом указывает размеры/поведение для каждого компонента

Events and Listeners
Для обработки какого-либо события  (нажатие на кнопку, движение мышки, изменение размера и т.д.) необходимо создать для него специальный интерфейс - Listener. В таком интерфейсе объявляется специальный метод callback. 

Как это работает?
  • юзер нажимает на кнопку - т.е. происходит некоторое событие (event)
  • java runtime перехватывает это событие и ищет listener, назначенный на  это событие
  • java runtime вызывает callback из соответствующего событию listener-a
  • а уже после этого обрабатывается код, указанный для данного callback-a
Дизайн-паттерн - шаблон решения стандартной проблемы.
MVC (Модель-Вид-Контроллер) - разделение классов:
  • вид - те классы, которые отвечают за GUI
  • модель - содержит данные
  • контроллер - находится между видом и моделью. Реагирует на события и обрабатывает их.
 Внутренний класс -  находится внутри какого-либо класса и нигде больше не используется ( однако, при необходимости, к нему можно дать доступ извне). Компилируются в отдельный файл.

Java-апплеты - мелкие приложения, которые выполняются внутри браузера.

вторник, 4 июля 2017 г.

5 способов быстрее научиться программировать

Я просто оставлю это здесь:

https://tproger.ru/translations/5-ways-to-learn-programming-faster-2/

День тринадцатый

AWT - Swing - JavaFX

В Swing - после создания JFrame - добавляем UI контроллеры. Размещаем их с помощью менеджера шаблонов (layout manager).

Основные задачи при программировании GUI:
  • создать шаблон
  • написать код, который будет реагировать на системные события и события, которые вызываются действиями пользователя
  • заполнить компоненты  GUI данными
Виды шаблон-менеджеров:
  • FlowLayout
  • GridLayout
  • BoxLayout
  • BorderLayout
  • CardLayout
  • GridBagLayout

понедельник, 3 июля 2017 г.

День двенадцатый - абстрактные классы и полиморфизм

Из абстрактного класса нельзя сделать экземпляр этого класса. Из класса-наследника абстрактного класса нельзя сделать экземпляр, пока в нём не будут имплиментированы все методы абстрактного класса-предка.
Абстрактный класс или метод объявляется с помощью ключевого слова abstract.
Абстрактный класс всегда незаконченный.  Имплиментировать абсолютно все методы, указанные в абстрактном классе, вовсе не обязательно.

Интерфейсы позволяют имплиментировать одни и те же методы разным классам, у которых нет общего суперкласса.

Полиморфизм - позволяет использовать общий код, с помощью которого происходит анализ типа текущего объекта в памяти и в зависимости от типа данного объекта - будет имплиментироваться разная программная логика.
Полиморфизм можно реализовать как с помощью абстрактных классов, так и с помощью интерфейсов.

воскресенье, 2 июля 2017 г.

День одинадцатый

Один и тот же класс не может быть унаследован из нескольких других классов, только из одного.
Если есть несколько сабклассов, которые являются наследниками какого-либо суперкласса, то можно объявить переменную типа суперкласс, а она будет хранить ссылки на объекты типа сабкласс.
Если класс имплиментирует какой-либо интерфейс, то он обязательно должен содержать код метода, объявленного в этом интерфейсе.

Upcasting - можно объявить переменную типа суперкласс и присвоить ей экземпляр объекта типа сабкласс.

Downcasting - допустим, есть какие-либо методы, специфичные только для сабклассов. Тогда нужно проверить, является ли какой-либо элемент суперкласса - экземпляром сабкласса. Тоесть, приводится тип данных от суперкласса к сабклассу. И после этого можно вызывать все методы, объявленные в сабклассе.

суббота, 1 июля 2017 г.

День десятый - немного об интерфейсах

Интерфейс позволяет объявлять методы отдельно от класса.
Класс имплиментирует интерфейс со всеми содержащимися в нём методами.
Класс может имплиментировать несколько интерфейсов одновременно.
Каждый метод, объявленный в интерфейсе автоматически становится public.

Как работает интерфейс?
Допустим, есть два класса Product_1 и Product_2, для которых нужно посчитать скидку. Но для каждого продукта эту скидку нужно посчитать по разному. Вместо того, чтобы в каждом классе объявлять метод подсчёта скидки, например calcDiscount( ), мы создаём интерфейс с этим методом и имплиментируем его в каждый класс.

Такой подход позволяет делать дизайн программы более чистым, а код более читаемым и ещё плюс к этому реализовывать полиморфизм.

Кроме методов интерфейс также может содержать финальные переменные, которые автоматически становятся public static. Если в будущем нужно будет изменить значение этих переменных, то делается это в интерфейсе, в котором они объявлены.

Интерфейсы-маркеры - не объявляют никаких методов.

пятница, 30 июня 2017 г.

День девятый

Пакеты - служат для организации классов. А также, распределение классов по пакетам позволяет избежать совпадения имён классов в разных проектах. Называют пакеты по обратной DNS нотации:

com.example.head

Если запускающий класс (тот, который содержит метод main) должен использовать классы, которые находятся в других пакетах, то их нужно импортировать:

import    com.example.head.class1

Уровни доступа к данным. Классы, методы и переменные могут иметь разные уровни доступа:
  • private - доступ только внутри заданного класса
  • protected - доступ внутри класса и всех сабклассов
  • public - доступ из любого места
  • package  - доступ по умолчанию, только внутри данного пакета
Если нет уверенности, какой уровень доступа давать классам и переменным, то лучше использовать private доступ. Впоследствии, его всегда можно изменить на более широкий.

Final:
  • final метод не может быть переопределён
  • final класс не может содержать сабклассы, т.е. его нельзя наследовать
  • final переменная - значение ей можно присвоить только один раз 
  • final также можно включить внутрь обработчика ошибок

 Когда программа идёт в продакшн - то нужно постараться как можно больше всего сделать final. Быстродействие будет лучше.

Основные признаки, по которым можно вычислить объектно-ориентированность языка программирования:
  • наследование
  • инкапсуляция
  •  полиморфизм
Наследование позволяет не копипастить один и тот же код многократно из класса в класс.