JAVA – ПРОГРАММИРОВАНИЕ (объектно-ориентированное программирование)
Литература:
Лекция 1. Основы ООП
1. Понятие ООП
2. Структура ООП
Пример класса в Java:
Пример объекта в Java
Пример метода в Java
Пример конструктора класса в Java
3. Основные принципы объектно-ориентированного программирования
Пример инкапсуляции в Java
Пример наследования в Java
Пример полиморфизма в Java
Обобщение пройденного материала
Специальные методы: конструкторы
Ключевое слово this
Лекция 3. Классы AWT и Swing в Java
Основные элементы графической библиотеки Swing
Порядок размещения элементов управления на форму (фрейм)
Пример создания простого калькулятора
Схемы размещения
Пример окна:
Пример формы:
Лекция 4. События и слушатели
1. Интерфейсы
2. Событие
3. Слушатель по имени ActionListener
2.31M
Категория: ПрограммированиеПрограммирование

Lek_Java_oop

1. JAVA – ПРОГРАММИРОВАНИЕ (объектно-ориентированное программирование)

Лекций – 18 часов
Лабораторных работ – 36 часов
Форма контроля - зачет

2. Литература:

3.

1.
Герберт Шилдт. Java
8:
руководство
для начинающих, 6-е изд.:
Пер. с англ. - М. ООО
"И.Д. Вильяме", 2015. 720
с.:
ил.
Парал. тит. англ .

4.

2.
Файн Яков. "
Программирование на Java
для
детей,
родителей,
бабушек
и
дедушек" Electronic Edition
(электронное издание eBook),
2011
год,
231
стр.
(17,2 мб. pdf)

5. Лекция 1. Основы ООП

6. 1. Понятие ООП

7.

Объектно-ориентированное
программирование (ООП) –
это
парадигма
разработки
программного
обеспечения,
согласно которой приложения
состоят
из
объектов,
взаимодействующих
друг
с
другом.

8.

Парадигма - это набор правил и
критериев, которые соблюдают
разработчики при написании
кода программы.
Сравнение: Если представить,
что код — это рецепт блюда, то
парадигма — это то, как рецепт
оформлен в кулинарной книге.

9.

В отличие от процедурного, ООП
позволяет вносить изменения один
раз — в объект. Объект — это
ключевой элемент программы. Все
операции
представляются
как
взаимодействие между объектами.
При этом код более читаемый и
понятный,
программа
проще
масштабируется.

10.

ООП используется, чтобы:
структурировать информацию
и не допускать путаницы;
точно
определять
взаимодействие
одних
элементов с другими;
повышать
управляемость
программы;

11.

быстрее
масштабировать код
под различные задачи;
лучше понимать код;
эффективнее
поддерживать
готовые программы;
внедрять
изменения
без
необходимости переписывать
весь код.

12.

К
объектно-ориентированным
языкам
программирования
относятся:
Delphi,
JavaScript,
PHP,
Python,
С++ и другие.

13. 2. Структура ООП

14.

В
коде,
написанном
по
парадигме ООП, выделяют 4
основных элемента:
Класс
Объект
Метод
Атрибут

15.

1. Класс – это схема для
создания объекта, которая
содержит
подробное
описание
будущих
экземпляров,
их
структуры и поведения.

16.

С помощью одного класса
можно
построить
множество
объектов,
которые по умолчанию
будут
обладать
теми
свойствами и методами,
которые заданы в классе.

17. Пример класса в Java:

public class Cat {
String name;
int age;
}

18.

Мы создали класс Cat, и указали для
него две переменные — строку name,
и число age. Такие переменные
классов называются полями.
Класс Cat - шаблон для всех кошек,
которых мы создадим в будущем. У
каждой кошки (объекта класса Cat)
будет две переменные — имя и
возраст.

19.

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

20. Пример объекта в Java

21.

public class Cat {
String name;
int age;
public static void main(String[] args) {
Cat barsik = new Cat();
barsik.age = 3;
barsik.name = "Барсик";
System.out.println("Мы создали кота по
имени " + barsik.name + ", его возраст - " +
barsik.age); }
}

22.

23.

Переменная count обозначена
ключевым словом static. Это
значит, что она принадлежит
классу, а не конкретному объекту
класса.
Счетчик котов нужен один на всех.
Именно этого позволяет добиться
слово static — переменная count
одна для всех котов.

24.

3. Метод - функция внутри
объекта или класса, которая
позволяет взаимодействовать
с ним или другой частью
кода.
Методы — это функционал
класса т.е. то, что объекты
этого класса умеют делать.

25. Пример метода в Java

26.

27.

4. Атрибуты - характеристики
объекта в программировании.
Например, в наших примерах это
name
и
age.
В
классе
прописывают,
что
такие
атрибуты есть, а в объектах с
помощью методов заполняют
эти атрибуты данными.

28.

Конструктор

это
специальный метод, который
имеет
имя,
совпадающее
с именем класса, и вызывается
при создании экземпляра объекта
совместно с оператором new.
Результатом работы этого метода
всегда является экземпляр класса.

29. Пример конструктора класса в Java

30.

31.

Если в классе есть конструктор, то
компилятор Java знает, как должны
выглядеть объекты, и не позволяет
создавать объекты без указанных в
нем аргументов.
Ключевое слово this (по-английски

"этот,
этого")
внутри
конструктора
указывает
на
конкретный предмет.

32.

Код
в
конструкторе
можно
перевести почти дословно:
"name для этого кота (которого мы
создаем) = аргументу name, который
указан в конструкторе.
age для этого кота (которого мы
создаем) = аргументу age, который
указан в конструкторе."

33.

Если
не
указать
в
классе
конструктор, то у него все равно
будет срабатывать конструктор!
Дело в том, что в Java у всех классов
есть так называемый конструктор
по умолчанию. У него нет никаких
аргументов, но он срабатывает
каждый раз при создании любого
объекта любого класса.

34.

35. 3. Основные принципы объектно-ориентированного программирования

36.

1. Инкапсуляция
Данные конкретного объекта или
класса хранятся в пределах этого
объекта или класса. Вносить в
них изменения, используя другие
классы, нельзя. У окружения есть
право
только
запрашивать
«публичные» методы и атрибуты.

37.

Такой подход обеспечивает
повышенный
уровень
безопасности,
а
также
сокращает
шансы
на
случайное
повреждение
данных внутри какого-то
класса или объекта со
стороны.

38. Пример инкапсуляции в Java

39.

40.

2. Наследование: на основе уже
существующего объекта или класса
создавать новый объект или класс,
который будет наследовать все методы
и атрибуты родительского элемента.
Наследование значительно упрощает
работу с программой, поскольку не
нужно по несколько раз переписывать
один и тот же код.

41. Пример наследования в Java

42.

Для создания наследования в Java
существует
ключевое
слово
extends.
Если создан новый класс Fish
(рыба) с использованием слова
extends, то можно сказать что, Fish
- это подкласс класса Animals, а
класс Animals – это суперкласс
класса Fish.

43.

44.

45.

3.
Полиморфизм
(переводится как «множество
форм») - это свойство
объектов, которое позволяет
использовать один и тот же
метод для решения внешне
схожих,
но
технически
разных задач.

46.

Например, у нас есть класс
«Персонаж», у которого задан метод
«Атаковать». Для воина это будет
означать удар мечом, для мага –
чтение заклинания, а для лучника –
выстрел из лука. В сущности, все три
этих действия – атака, однако в
программном коде они будут
реализованы
совершенно
поразному.

47.

48. Пример полиморфизма в Java

49.

У суперкласса под названием Forms
есть метод shapearea() и классыпотомки Triang и Circ. Каждый из
них имеет свой способ подсчета
площади.
С
помощью
рассматриваемой парадигмы потомки
пользуются
методом
родителя
shapearea(), чтобы найти формулу
для расчета своей площади.

50.

51.

52.

Типы полиморфизма
Два
варианта
реализации
полиморфизма в Java:
Overloading – перегрузка метода
Overriding – переопределение метода
При перегрузке метода мы в одном
классе создаем нескольких методов с
одинаковым названием, но разным
функционалом, например:

53.

54.

55.

56.

57.

58. Обобщение пройденного материала

59.

Итак,
Классы Java могут иметь и
методы и атрибуты.
Методы определяют, что
класс может сделать.
Атрибуты
это
характеристики класса.

60.

61.

В программах Java классы
могут быть использованы
только после создания его
экземпляра.
Например:
Game MyGame=new Game( )

62.

MyGame – имя экземпляра, т.е.
переменная
созданная
использованием
оператора
new.
Не смотря на то, что эти
копии представляют тот же
самый класс, их атрибуты
могут иметь разные значения.

63.

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

64.

Фраза "создать экземпляр
объекта" - значит создать
копию объекта в памяти
компьютера
согласно
описанию этого класса.
Переменные
представляют
собой атрибуты класса.

65.

66.

Класс HelloWorld содержит
только один метод main(),
который является точкой
входа приложения на Java.
То, что main — это метод,
говорят круглые скобки после
слова main.

67.

Методы могут вызывать
другие методы. Например,
метод main( ), чтобы
напечатать на экране текст
Hello World, вызывает
метод println( ).

68.

Каждый метод начинается
со строки объявления,
которую
называют
сигнатурой метода:
public static void main(String[] args)
Сигнатура метода говорит о
следующем:

69.

Ключевое слово public означает,
что метод main( ) доступен для
любого другого класса Java или
самой JVM. Ключевое слово
static означает, что не нужно
создавать экземпляр (копию)
объекта HelloWorld в памяти,
чтобы использовать этот метод.

70.

Ключевое слово void означает,
что
метод
main()
не
возвращает
данных
в
программу,
которая
его
вызвала.
Именем метода является слово
перед круглыми скобками main.

71.

String [ ] args - список аргументов т.е.
данные, которые могут быть переданы
методу.
В методе main( ) слова String[ ] args
означают, что этот метод может
получать массив объектов с типом
String, то есть текстовые данные.
Значения, которые передаются методу,
называются
аргументами
или
параметрами.

72.

Рассмотрим
следующий
заголовок (сигнатура) метода:
public String Say(String S1)
public – служебное слово,
которое означает, что метод
можно вызвать из любого
класса.

73.

Тип String перед именем метода
Say показывает, что метод Say
возвращает
какой-то
текст.
Кроме того, этот метод ожидает
какие-то текстовые данные извне
и для этого в заголовок метода в
круглых
скобках
включен
параметр (String S1).

74.

Иными словами, метод Say
выполняет
какие-то
действия над переменной
S1 и должен передать
результат этих действий
вызывающему классу.

75.

Все классы в языке Java
унаследованы из суперкласса
Object,
даже
если
не
использован ключевое слово
extends.
В отличие от людей, Javaклассы не могут иметь двух
родителей.

76.

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

77. Специальные методы: конструкторы

78.

В языке Java существуют
специальные
методы,
которые
называются
конструкторами
(constructors), и у этих
методов есть следующие
особенности:

79.

Конструкторы
вызываются
только один раз при создании
объекта в памяти.
Они должны называться так же,
как называется класс.
Они ничего не возвращают, не
нужно даже писать слово void в
сигнатуре этого метода.

80.

У
класса
может
быть
несколько
конструкторов.
Если не написан ни один
конструктор,
во
время
компиляции
Java
автоматически создаст так
называемый
пустой
конструктор по умолчанию.

81.

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

82.

public class NewGame extends Game
{
int Start;
Game(int startingPosition){
Start=startingPosition;
}

83.

Теперь класс NewGame может
создать экземпляр класса Game и
задать начальную позицию игры.
Ниже создаётся экземпляр класса
Game,
который
изначально
загрузит игру с позиции 5:
Game NewGame = new Game(5);

84.

Для класса, в котором был
определён
конструктор
с
аргументами, конструктор по
умолчанию
создаваться
автоматически не будет. Если
необходим конструктор без
аргументов, то нужно написать
его.

85. Ключевое слово this

86.

Ключевое слово this полезно, когда
нужно сослаться на экземпляр класса
внутри объекта этого класса. Например:
class Game {
int currentStart ;
Game (int currentStart){
this.currentStart = currentStart;
}
}

87.

Здесь идентификатор this помогает
избежать
конфликта
имён.
Например: this.currentStart ссылается
на атрибут класса currentStart, в то
время как currentStart ссылается на
значение аргумента конструктора.
Другими словами, экземпляр класса
Game указывает на самого себя с
помощью слова this.

88. Лекция 3. Классы AWT и Swing в Java

89.

Библиотека AWT - простой набор
классов, таких, как Button (кнопка),
textField (текстовое поле), Label
(текстовая метка) и другие. Вскоре
была создана более совершенная
библиотека, которую назвали Swing.
Она включает в себя кнопки,
текстовые поля и другие элементы
управления
графическими
приложениями.

90.

Названия
компонентов
этой
библиотеки начинается с буквы J.
Например, JButton, JTextField и так
далее.
Всё в Swing чуточку лучше, быстрее и
удобнее, но в некоторых случаях
программы могут быть запущены на
компьютерах со старой версией JVM,
которая может не поддерживать классов
Swing.

91.

Java
поставляется
с
большим
количеством
полезных
классов,
которые организованы в пакеты
(packages).
Некоторые
пакеты
содержат классы для рисования
графики, другие - классы для работы с
интернетом и так далее. Например,
класс String находится в пакете с
названием java.lang и полное имя
этого класса java.lang.String.

92.

Ключевое слово import
позволяет
использовать
короткие имена классов,
такие как JFrame или
JButton
и
сообщает
компилятору, где искать
эти классы.

93.

Если нужно использовать несколько
классов из одного пакета, нет
необходимости перечислять каждый
из них в строке с import, можно
просто использовать символ *.
Например: с помощью звёздочки,
все классы из javax.swing становятся
находимыми:
import java.swing.*;

94. Основные элементы графической библиотеки Swing

95.

Окно
или фрейм, который
может быть создан с помощью
класса JFrame.
Невидимая
панель (panel)
содержит все кнопки, текстовые
поля,
метки
и
другие
компоненты. Панели создаются
с помощью класса JPanel.

96.

Оконные
элементы
управления, такие как кнопки
(JButton), текстовые поля (JText
field), списки (Jlist) и т.д.
Схемы
размещения (layout
managers) компоненты, которые
помогают расположить кнопки,
поля ввода и т.д. на панели.

97.

Например,
можно
создать
экземпляр
класса
JPanel
и
назначить для него
схему размещения.

98. Порядок размещения элементов управления на форму (фрейм)

99.

1) создать экземпляр класса JPanel и
назначить
для
него
схему
размещения.
2) создать различные компоненты
(метки, поля ввода, кнопки и др.) и
добавить их на панель.
3) добавить панель на форму,
4) задать размер формы и сделать
его видимым.

100. Пример создания простого калькулятора

101.

102.

103.

104.

105. Схемы размещения

106.

В
некоторых
языках
программирования необходимо
указывать
координаты
и
размеры каждого компонента
окна. Это удовлетворило бы,
если
было
известно
разрешающая
способность
экрана каждого пользователя.

107.

В Java есть схемы размещения (Layout
Managers),
которые
позволяют
разместить компоненты на экране, не
зная точных позиций компонентов.
Схемы гарантируют, что та часть
интерфейса, за которую они отвечают,
будет
выглядеть
правильно
вне
зависимости от размеров окна и
разрешения экрана.
Swing предоставляет следующие схемы:

108.

1) Flow Layout - построчное
расположение. По этой схеме
компоненты размещаются в окне
(или на панели) строка за
строкой.
Например,
метки,
текстовые поля и кнопки будут
добавляться в первую условную
строку, пока в ней есть место.

109.

Если
первая
строка
заполнится, то оставшиеся
компоненты
будут
добавляться в следующую
строку
и
т.д.
Если
пользователь изменит размер
окна, то все компоненты
останутся на своих местах.

110. Пример окна:

111.

2) Grid Layout - табличное
расположение, позволяет вставлять
компоненты в ячейки условной
таблицы.
Если размер окна будет увеличен,
ячейки
станут
больше,
но
положение
компонентов
относительно друг друга останется
прежним.

112.

В нашем простом калькуляторе 3
текстовые метки, 3 текстовых
поля и кнопка.
Их можно разместить в таблице с
четырьмя строками и двумя
колонками
(одна
ячейка
останется пустой):
GridLayout gr = new GridLayout(4, 2);

113.

Также
можно
задать
расстояние
между
ячейками по вертикали и
горизонтали, например в
пять пикселей:
GridLayout gr = new GridLayout(4,2,5,5);

114. Пример формы:

115.

3) BorderLayout - размещение по
областям разделяет окно на
Южную, Западную, Северную,
Восточную
и
Центральную
области.
Северная
область
находится
наверху окна, Южная - снизу,
Западная - слева, а Восточная справа.

116.

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

117.

BorderLayout BL= new BorderLayout();
this.setLayoutManager (BL) ;
JTextField txtDisplay=new JTextField(20);
this.add("North", txtDisplay)

118.

Не
обязательно
помещать
элементы управления во все пять
областей.
Если
необходимы
только
Северная, Центральная и Южная
области, то Центральная станет
шире, т.к. Западная и Восточная
пустуют.

119.

Пример калькулятора

120.

4) BoxLayout - расположение
по
горизонтали
или
вертикали,
располагает
несколько компонентов окна
горизонтально
(по
оси
абсцисс) или вертикально (по
оси ординат).

121.

В отличие от FlowLayout, когда
окно с BoxLayout меняет свой
размер, его элементы управления не
смещаются со своих позиций.
BoxLayout позволяет элементам
окна иметь разные размеры.
Следующие две строки кода задают
BoxLayout
с
вертикальным
выравниванием на JPanel.

122.

JPanel pl= new JPanel();
setLayout(new
BoxLayout(pl,
BoxLayout.Y_AXIS));
Чтобы сделать этот код короче, не
создавалась переменная для хранения
ссылки на объект BoxLayout. Вместо
этого создан экземпляр этого класса и
сразу же он передан, как аргумент в
метод setLayout () .

123.

5) GridBag Layout - более гибкое
табличное
расположение.
GridBagLayout - более продвинутая
схема размещения. Она позволяет
задавать
размер
ячейки,
равным
нескольким
клеткам
таблицы.
GridBagLayout имеет вспомогательный
класс,
который
называется
GridBagConstraints (ограничения на
клетки таблицы).

124.

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

125.

Например,
один
из
атрибутов
GridBagConstraints
называется gridWidth.
Он
позволяет
задать
ширину какой-то одной
ячейки, равной ширине
нескольких других.

126.

6) CardLayout - колода карт
Схема CardLayout может быть
использована,
если
необходимо
создать
компонент,
который
выглядит,
как
папка
с
вкладками.

127.

Пример окна

128.

129.

130. Лекция 4. События и слушатели

131. 1. Интерфейсы

132.

Интерфейсы

это
специальные
конструкции,
которые только объявляют
набор
определенных
действий без кода, который
описывает, что именно надо
делать
в
объявленных
методах.

133.

Пример интерфейса:

134.

В этом примере методы mouseDragged()
и mouseMoved() НЕ содержат никакого
текста
программ.
Они
просто
объявлены
в
интерфейсе
MouseMotionListener.
Если какой-нибудь класс должен
реагировать на движение указателя
мыши или на перетаскивание мышью,
то тогда он должен реализовать этот
интерфейс.

135.

Слово implements означает, что этот
класс
совершенно
точно
будет
содержать методы, которые могли быть
объявлены в интерфейсе, например:

136.

137.

Интерфейс, сделанный однажды,
может использоваться во многих
классах. Например, когда другие
классы (или JVM) видят, что класс
MyDrawingPad
реализует
интерфейс
MouseMotionListener,
они знают, что в этом классе точно
есть методы mouseDragged() и
mouseMoved().

138.

Каждый раз, когда пользователь двигает
мышкой,
JVM
вызывает
метод
mouseMoved() и исполняет текст
программы, который там написан. Если
каждый программист решит назвать этот
метод по-своему (Коля - mouseMoved(),
Маша - movedMouse(), а Петя mouseCrawling()), то JVM запутается и не
будет знать, какой же метод класса нужно
вызвать, чтобы сообщить о движении
мыши.

139. 2. Событие

Событие
(Event)
процесс,
приводящий
к
изменению
состояния объекта.
Пример события:
нажатие кнопки,
выбор элемента из списка,
ввод символа с клавиатуры и т.д.

140.

141.

142.

143.

144. 3. Слушатель по имени ActionListener

145.

Слушатель
(Listener)

это
уведомляемый о некотором событии
объект.
Чтобы слушатель смог реагировать на
определенное событие источника он
должен быть им зарегистрирован, т.е.
подключен к источнику.
Listener
должен
реализовывать
определенные методы для получения и
обработки уведомлений о событии.

146.

Пусть у нас есть созданный калькулятор
следующего вида:
При этом можно добавить код
программы, обрабатывающий события
нажатия на кнопку, сразу в файл
Calculator.java, но лучше не смешивать в
одном
классе
визуальную
и
обрабатывающую части.

147.

Поэтому нужно создать отдельный
класс слушателей для событий

148.

В класс CalculatorEngine добавим
код
открытия окна сообщения
из метода actionPerformed(). С
помощью класса JOptionPane
и
его
метода
showConfirmDialog()
можно
показывать пользователю любые
сообщения.

149.

150.

Здесь null означает, что окно
сообщения не имеет родительского
окна, 2-й аргумент – это заголовок
окна сообщения, 3-й аргумент само
сообщение,
а
4-й аргумент
позволяет выбрать, какие кнопки
будут
отображаться в
окне
сообщения (PLAIN_MESSAGE –
только одна кнопка “OK”).

151.

Для установки связи слушателя
ActionListener
с
кнопками
калькулятора, нужно добавить две
строки класс Calculator (в нашем
случае слушатель для кнопки 0).
и

152.

Первая
строка
вставится
ниже
конструктора класса Calculator, а вторая
строка после строки добавления кнопки
btn_0 на панель.

153.

После нажатия кнопки с надписью
0, на экране появится сообщение.

154.

Существуют и другие слушатели в
Java в пакете java.awt:
1.
Слушатель
фокуса
(FocusListener) посылает сигнал
вашему классу, когда компонент
окна получает или теряет фокус.
Например, говорят, что текстовое
поле имеет фокус, если в нем
мигает курсор.

155.

2.
Слушатель
элемента
(ItemListener) реагирует на
выбор элементов в обычном
или выпадающем списке.
3.
Слушатель
клавиш
(KeyListener) реагирует на
нажатия клавиш.

156.

4.
Слушатель
мыши
(MouseListener) реагирует,
когда
нажимают
на
кнопку мыши, или она
входит
в
область
компонента окна или
выходит из нее.

157.

5. Слушатель движений мыши
(MouseMotionListener) сообщает вам,
когда мышь двигается или что-то
тащит. Тащить (drag) означает двигать
мышь
с
нажатой
клавишей.
6. Слушатель окна (WindowListener)
дает вам шанс уловить моменты,
когда
пользователь
открывает,
закрывает, уходит из окна или
заходит в него.
English     Русский Правила