Similar presentations:
Объектно-ориентированное программирование в Java
1. Объектно-ориентированное программирование в Java
Лекция 32. План лекции
ВведениеПринципы ООП
Этапы разработки программ
ООП в Java
3. Введение
Объектно-ориентированное программирование(ООП) - это технология создания программного
обеспечения, основанная на использовании
совокупности программных объектов, каждый из
которых является экземпляром определенного
класса, при этом классы могут образовывать
иерархию.
Класс можно определить как тип данных, который
включает описание полей данных, а также методов
(подпрограмм), работающих с этими полями данных.
Взаимодействие программных объектов в такой
системе осуществляется с помощью передачи
сообщений, реализуемой с помощью вызова
процедур и функций.
4. Введение
Интуитивные определения основных понятий:Объектом называется математическое
представление сущности реального мира (или
предметной области), которое используется для
моделирования.
Классом называется весьма общая сущность, которая
может быть определена как совокупность элементов.
Свойством (или атрибутом) называется
пропозициональная функция, определенная на
произвольном типе (данных).
Методом (или функцией) называется операция,
определенная над объектами некоторого класса.
5. Введение
Преимущества объектно-ориентированногоподхода:
полное использование возможностей объектноориентированных языков программирования,
унификация разработки и пригодность программ
для повторного использования,
простота внесения изменений,
уменьшение риска неудачи при разработке сложных
систем,
ориентированность на человеческое восприятие
мира.
6. Введение
Основные работы в сфере моделирования ООП:1924 – М.Шейнфинкель (Moses Shцnfinkel) разработал теорию
«простых» функций
1934 – А.Черч (Alonso Church) изобрел ламбда-исчисление и
применил его в исследовании теории множеств
1971 – Д.Скотт (Dana S. Scott) предложил использовать полные
и непрерывные решетки для формализации семантики
(типизированного) ламбда-исчисления
1980-е – Д.Скотт (Dana S. Scott) и М.Фурман (Michael P.
Fourman) исследовали аппарат определенных дескрипций как
средство формализации определений
1990-е – В.Э.Вольфенгаген (Vyatcheslav E. Wolfengagen)
предложил схему двухуровневой концептуализации для
моделирования объектов предметных областей (и языков
программирования); данная модель адекватна как для
объектов данных (ОД), так и для объектов метаданных (ОМД)
7. Принципы ООП
абстрагированиеинкапсуляция
модульность
иерархичность
типизация
параллелизм
сохраняемость
8. Принципы ООП
Абстрагирование – принцип объектноориентированного программирования, которыйопределяет правила выделения классов и объектов и
построения их объектных моделей.
Абстракция включает существенные для данной задачи
характеристики некоторого объекта.
В объектно-ориентированном программировании все
свойства абстракции, определяющие состояние и
поведение анализируемого объекта, объединяются в
единую программную единицу - класс.
Выделяют две части описания абстракции: интерфейс
(доступные извне элементы абстракции - характеристики
состояния и поведения) и реализация (недоступные извне
элементы абстракции - внутренняя организация
абстракции и механизмы осуществления ее поведения).
9. Принципы ООП
Инкапсуляция – принцип объектноориентированного программирования, которыйопределяет объект как единое целое и
определяет интерфейс пользователя для
использования объекта.
Инкапсуляция - объединение интерфейса и
реализации в один класс, а также скрытие деталей
реализации.
Модульность - принцип разработки программной
системы, предполагающий ее реализацию в виде
отдельных частей (модулей). Модули играют роль
физических контейнеров, в которые помещаются
описания классов и объектов.
10. Принципы ООП
Иерархичность предполагает использованиеиерархий (упорядоченных систем абстракций) при
разработке программных систем.
В ООП используют два вида иерархии:
«целое-часть»
«общее-частное»
«целое-часть»- некоторые абстракции включены в
другую абстракцию как ее части. Этот вид иерархии
используется в процессе разбиения системы на части
на разных этапах проектирования
11. Принципы ООП
«общее-частное» - некоторая абстракция являетсячастным случаем другой абстракции. Данный вид
иерархии используется при разработке структуры
классов, когда сложные классы строятся на основе
простых с помощью добавления к ним новых
характеристик и изменения имеющихся. Этот
механизм, являющийся в ООП одним из важнейших,
называется наследованием.
12. Принципы ООП
Наследование - принцип объектно-ориентированногопрограммирования, который реализует отношение
обобщения между классами.
Класс-потомок, наследующий характеристики другого
класса, обладает теми же возможностями, что и класспредок, от которого он порожден, при этом класспредок остается без изменения, а классу-потомку
можно добавлять новые элементы или изменять
унаследованные. Благодаря этому потомок обладает
большими возможностями, чем предок.
Все классы, используемые в Java, имеют общего предка
- класс java.lang.Object.
13. Принципы ООП
Типизация - ограничения, накладываемые на объекти препятствующее взаимозаменяемости объектов
различных типов или уменьшающее возможность
такой замены.
14. Принципы ООП
Тип может связываться с объектом во времякомпиляции (статическое или раннее связывание) или
во время выполнения программы (динамическое или
позднее связывание). Динамическое связывание, а
также наличие наследования позволяют реализовать
важный механизм ООП - полиморфизм (одно и то же
имя может означать объекты разных типов, но, имея
общего предка, все они имеют и общее подмножество
операций, которые можно над ними выполнять).
15. Принципы ООП
Полиморфизм – принцип объектноориентированого программирования, которыйпозволяет за одним именем метода закреплять
несколько различных алгоритмов и реализаций.
Параллелизм - возможность нескольким
абстракциям одновременно находиться в активном
состоянии, выполняя некоторые операции.
Реальный параллелизм возможен только на
многопроцессорных (многоядерных) системах, когда
каждый процесс может выполняться отдельным
процессором (ядром). На однопроцессорных (одноядерных)
компьютерах параллелизм имитируется за счет механизма
разделения времени между процессами
(псевдопараллелизм).
16. Принципы ООП
Сохраняемость - способность объекта существоватьво времени независимо от породившего его
процесса и/или в пространстве, возможно перемещаясь из своего первоначального адресного
пространства.
На уровне программы по степени сохраняемости различают
промежуточные результаты вычисления выражений,
локальные переменные подпрограмм и глобальные
объекты.
На уровне данных по степени сохраняемости выделяют
данные, сохраняющиеся между сеансами выполнения
программы, данные, сохраняемые при переходе на новую
версию программы, а также данные, которые переживают
программу.
17. Этапы разработки программы
анализпроектирование
реализация
модификация
18. Этапы разработки программы
Цель первого этапа - максимальнополное описание задачи. В этот момент
выполняют анализ предметной
области, объектную декомпозицию и
описывают абстракции. Результатом
этапа является разработка диаграммы
объектов, на которой показывают
основные абстракции (объекты)
предметной области и взаимодействие
между ними.
19. Этапы разработки программы
Проектирование – это построениеформализованного описания задачи, готового для
реализации.
При этом выполняют логическое (разработка
структуры классов) и физическое (объединение
реализаций классов в модули, определение способов
взаимодействия с операционной системой, синхронизация процессов при параллельной обработке и
т. д.) проектирование.
Результат этапа проектирования - это диаграмма
классов (иерархия и состав классов), а также другие
диаграммы, описывающие задачу.
20. Этапы разработки программы
21. Этапы разработки программы
Цель этапа реализации - получение программнойсистемы, выполняющей заданные функции.
Этап включает последовательную реализацию и
подключение классов к проекту, создание работающего
прототипа, а также постоянное тестирование и отладку.
Результатом этапа реализации является готовая
программная система.
Цель этапа модификации - изменение существующей
системы в соответствии с новыми требованиями.
Этот этап включает добавление новых элементов и
модификацию существующих, при этом, как правило,
меняется реализация, а не интерфейс.
Результатом модификации является измененная система.
22. ООП в Java
Объект — это мыслимая или реальная сущность,обладающая характерным поведением и
отличительными характеристиками и являющаяся
важной в предметной области (Гради Буч)
Объектно-ориентированное программирование —
парадигма программирования, в которой программа
строится из взаимодействующих объектов
23. ООП в Java
Свойства объектов• Объект является экземпляром класса
• Объект имеет внутреннее состояние
• Объект может принимать сообщения (в
большинстве языков сообщение = вызов метода)
• Объект — это «умные данные»
24. ООП в Java
ООП в Java:• Поддержка ООП заложена в Java изначально
(инкапсуляция, наследование, полиморфизм)
• В Java все является объектом, кроме примитивных
типов
• Исполняемый код может находиться только в
классе
• Стандартная библиотека предоставляет огромное
количество классов, но можно свободно создавать
свои
25. ООП в Java
Возможности ООП:• Инкапсуляция
Сокрытие деталей реализации за внешним
интерфейсом
• Наследование
Создание производных классов, наследующих
свойства базового
• Полиморфизм
Разная обработка сообщений в разных классах
26. ООП в Java
Объявление класса:/* modifiers */ class Example {
/* class content : fields and methods */ }
27. ООП в Java
Модификаторы можно разделить на две группы:- модификаторы доступа,
- модификаторы свойств.
Модификаторы доступа:
• public - доступ для всех
• protected - доступ в пределах пакета и дочерних
классов
• private - доступ в пределах класса по умолчанию
(нет ключевого слова) доступ в пределах пакета
28. ООП в Java
Модификаторы свойств:- final
- abstract
• final class Example {...}
нельзя создать класс-наследник
• final int getNumber() {...}
нельзя переопределить метод в дочернем классе
• abstract class Example {...}
нельзя создать экземпляр класса
• abstract int getNumber();
метод без реализации (класс должен быть
абстрактным)
29. ООП в Java
Все составляющие класса называются его элементамиили членами класса.
Обращение к отдельному элементу класса имеет
синтаксис:
имя_объекта.имя_элемента.
30. ООП в Java
Вложенные классы:• Можно объявить класс внутри другого класса
• Такие классы имеют доступ к private-членам друг
друга
• Экземпляр вложенного класса связан с
экземпляром внешнего класса
• Если связь не нужна, вложенный класс объявляют с
модификатором static
31. ООП в Java
Поля:class Example {
/* modifiers */ int number ;
/* modifiers */ String text = " hello ";
}
• Поля инициализируются значениями по
умолчанию
• Модификатор final — значение должно быть
присвоено ровно один раз к моменту
завершения инициализации экземпляра
32. ООП в Java
Методы:class Example {
private int number ;
/* modifiers */ int getNumber () {
return number ;
}
}
33. ООП в Java
Имя метода в классе может быть неуникальным.Существование в классе методов с одинаковым
именем называется перегрузкой, а сами одноименные
методы называются перегруженными.
Перегрузка методов полезна, когда требуется решать
однотипные задачи с разным набором параметров.
Перегруженные методы, имея одинаковое имя,
должны обязательно отличаться либо числом
параметров, либо их типами.
34. ООП в Java
Например, один класс может содержать такиеперегруженные методы, позволяющие определять
максимум:
//максимум двух целых чисел int max(int a, int b);
//максимум трех целых чисел int max(int a, int b, int с);
//максимум целого числа и длины строки int max(int a,
string b);
//максимум чисел в строковом представлении int
max(string a, string b);
35. ООП в Java
Существует несколько типов специальных методов:- конструкторы,
- деструкторы,
- методы-свойства,
- индексаторы,
- метод Main().
36. ООП в Java
Конструктор - обязательный элемент любого класса,предназначенный для инициализации объекта, он
вызывается автоматически при создании объекта
класса с помощью операции new.
Имя конструктора всегда совпадает с именем класса.
Хотя конструктор и является методом, он не
возвращает значения (даже void)
Если в классе явно не задан ни один конструктор, то к
классу автоматически добавляется конструктор по
умолчанию - конструктор, вызываемый без
параметров.
Класс может иметь несколько конструкторов с
разными параметрами (это называется перегрузкой
конструкторов).
37. ООП в Java
Конструкторы:class Example {
private int number ;
/* modifiers */ Example (int number ) {
this . number = number ;
}
}
38. ООП в Java
Деструктор:• В Java нет деструкторов, сбор мусора
автоматический
• Есть метод void finalize(), но пользоваться им не
рекомендуется
• При необходимости освободить ресурсы заводят
обычный метод void close() или void dispose()
39. ООП в Java
Методы-свойства (Getters и Setters):• Для переменных класса модификатор
доступа public нежелателен т.к. он нарушает
безопасность объекта.
• Для защиты был придуман механизм доступа к
переменным класса с помощью getи set (геттер и
сеттер).
• Get позволяет получить значения (читать значения)
• Set - записать значения в переменную.
• В коде они представляют собой обычные методы.
Но имя метода всегда начинается с префикса get
или set.
40. ООП в Java
Статические поля и методы:class Example {
/* modifiers */ static final int DEFAULT_NUMBER = 333;
/* modifiers */ static int getDefaultNumber () {
return DEFAULT_NUMBER ;
}
}
• Статические поля и методы относятся не к
экземпляру класса, а ко всему классу
41. ООП в Java
Доступ к статическим членам:int defaultNumber = Example . DEFAULT_NUMBER ;
// defaultNumber -> 333
defaultNumber = Example . getDefaultNumber ();
// defaultNumber -> 333
Example e = new Example (3);
// возможно, но не рекомендуется
defaultNumber = e. getDefaultNumber ();
// defaultNumber -> 333
42. ООП в Java
Доступ к статическим членам:int defaultNumber = Example . DEFAULT_NUMBER ;
// defaultNumber -> 333
defaultNumber = Example . getDefaultNumber ();
// defaultNumber -> 333
Example e = new Example (3);
// возможно, но не рекомендуется
defaultNumber = e. getDefaultNumber ();
// defaultNumber -> 333
43. ООП в Java
Интерфейсы:• Интерфейс определяет возможные сообщения, но
не их реализацию
interface Interface1 {
int getNumber ();
}
• Класс может реализовывать несколько
интерфейсов
class Example implements Interface1 , Interface2 {
int getNumber () {
// implementation
}
// other methods
}
44. ООП в Java
Перечисления:• Класс с фиксированным количеством экземпляров
• Может иметь поля и методы
enum Direction {
LEFT ,
RIGHT ,
UP ,
DOWN
}
45. ООП в Java
Объявление класса-наследника:class Derived extends Example {
/* derived class content */
}
• Java не поддерживает множественное
наследование, но есть интерфейсы
• Все классы наследуют java.lang.Object
46. ООП в Java
Конструктор класса-наследника:class Derived extends Example {
Derived () {
this (10);
}
Derived (int number ) {
super ( number );
}
}
47. ООП в Java
Переопределение методов:class Derived extends Example {
@Override
int getNumber () {
int number = super . getNumber ();
return Math . max (10 , number );
}
}
48. ООП в Java
Пакеты (package)Назначение:
• Задание пространства имен, предотвращение
коллизий имен классов
• Логическая группировка связанных классов
• Сокрытие деталей реализации за счет
модификаторов доступа
49. ООП в Java
Пакеты (package)• Задание пакета для класса:
package ru.lab.lab3;
• Использование класса из пакета:
- классы текущего пакета и пакета java.lang всегда
видны
- классы других пакетов доступны по полному имени
с пакетом
- можно использовать директиву import
• Класс, принадлежащий пакету, должен лежать в
одноименной директории:
ru/lab/lab3/
50. ООП в Java
Импорт• Импорт одного класса:
import ru.lab.lab3.ExampleClass;
• Импорт всех классов пакета:
import ru.lab.lab3.*;
• Импорт статических полей и методов:
import static java.lang.System.out;
import static java.util.Arrays.*;
51. ООП в Java
Импорт• Директивы import позволяют компилятору
получить полные имена всех используемых
классов, полей и методов по их коротким именам
• В class-файл попадают полные имена, подстановка
содержимого не происходит
• При запуске программы все используемые классы
должны присутствовать в classpath