Similar presentations:
Java – программирование (объектно- ориентированное программирование)
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 есть схемы размещения (LayoutManagers),
которые
позволяют
разместить компоненты на экране, не
зная точных позиций компонентов.
Схемы гарантируют, что та часть
интерфейса, за которую они отвечают,
будет
выглядеть
правильно
вне
зависимости от размеров окна и
разрешения экрана.
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)
дает вам шанс уловить моменты,
когда
пользователь
открывает,
закрывает, уходит из окна или
заходит в него.