Основы ООП © Составление, Суров М. Ю. , 2009 © Net. Cracker Confidential 2008
Содержание u Введение u Концепции ООП u Реализация концепций ООП u Инкапсуляция u Наследование классов и полиморфизм u Реализация ООП в Java (абстрактные классы, интерфейсы) u Объекты (инициализация, работа с объектами, конструкторы) © Net. Cracker Confidential 2008 2
Процедурный стиль Входные данные Процедура 1 Процедура 2 Память Процедура 3 Результат работы процедур © Net. Cracker Confidential 2008 3
Концепции ООП Объектно-ориентированное программирование (ООП) – методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является реализацией определённого класса. ООП базируется на следующих принципах: Абстракция u Инкапсуляция u Наследование u Полиморфизм u © Net. Cracker Confidential 2008 4
Абстракция Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Абстракция — это набор всех таких характеристик. геометрическая фигура треугольник прямой элипс острый круг Процесс выделения более точных абстракций из более общих называется декомпозированием © Net. Cracker Confidential 2008 5
Реализация концепций ООП Основным понятием является класс – абстрактная модель некоего предмета. © Net. Cracker Confidential 2008 6
Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом. базовый потомок Класс 1 Класс 2 Свойство 1 Свойство 2 Свойство 3 Свойство 1 Свойство 2 © Net. Cracker Confidential 2008 отнаследовано новое 7
Наследование классов Классы можно наследовать друг от друга: public class Parent { public int sum(int x, int y) { return x+y; } } public class Child extends Parent { public int sum(int x, int y) { // >>> можно переопределить <<<< // например: return x+x; } } © Net. Cracker Confidential 2008 8
Инкапсуляция Отделение (сокрытие) внутреннего устройства (данных и вспомогательных операций) от поведения (доступных операций) u Положительные стороны u w гибкость – можем менять внутреннее строение, не меняя поведение w безопасность – запрещаем и/или ограничиваем доступ к данным объекта w простота – меньше доступных операций -> легче использовать и понимать u Реализация инкапсуляции w Методы доступа к полям u get. Field. Name/set. Field. Name u boolean – is. Field. Name w Поля u модификатор private (или protected) w Модификатор final повышает скорость © Net. Cracker Confidential 2008 9
Инкапсуляция private protected public © Net. Cracker Confidential 2008 доступно только в этом классе доступно в этом классе и наследниках доступно всем 10
Абстрактные классы public abstract class Simple. Class { public abstract void empty. Method(); } абстрактные классы – эти классы представляют собой не до конца реализованную модель какого-либо предмета © Net. Cracker Confidential 2008 11
Интерфейсы в общем их понимании Интерфейс – семантическая и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых классом или компонентом Суть: Интерфейс это контракт налагемый на реализацию (класс, компонент) Интерфейс – описание функционала Интерфейс – граница взаимодействия между классами или компонентами Интерфейс не содержит реализации Интерфейс не может инстанцировать объект © Net. Cracker Confidential 2008 12
Интерфейсы в Java Класс может наследоваться только от одного класса, независимо от того, является ли класс-родитель абcтрактным, при этом класс может реализовывать любое число интерфейсов, переопределяя их методы public interface Interface { public void simple. Method(); } Интерфейс представляет собой некий облегчённый аналог класса: он не содержит полей и не содержит методов с реализацией © Net. Cracker Confidential 2008 13
Абстрактные классы и интерфейсы Функциональность Интерфейс Абстрактный класс Множественное наследование Поддерживает Не поддерживает Реализация функциональности Интерфейс предоставляет только сигнатуры методов, не может предоставлять функциональность Может предоставлять завершённую функциональность некоторых методов, которые потом можно переопределить Модификаторы доступа У интерфейса не может быть никаких модификаторов доступа Может иметь модификаторы доступа для полей, функций, итд. © Net. Cracker Confidential 2008 14
Абстрактные классы и интерфейсы Функциональность Интерфейс Поля и константы Поля не могут быть Может иметь и поля и объявлены в константы интерфейсе, все поля становятся константами Уровень абстракции Предоставляют крайнюю степень абстракции, на уровне описания Предоставляет базовые характеристики сущности Добавление новой функциональность При добавлении новых методов, мы должны реализовать данные методы во всех классах, которые реализуют данный интерфейс Можем реализовать данный метод по умолчанию, тогда наследники просто пронаследуют его © Net. Cracker Confidential 2008 Абстрактный класс 15
Объекты Объект представляет собой экземпляр класса. © Net. Cracker Confidential 2008 16
Объекты public class Simple. Object { private Long id; public String name; public Simple. Object() { } public void set. Name(String name) { this. name = name; } public Long get. Name() { return name; } public Long get. Id() { return id; } private void erase. Name() { name = null; } } Simple. Object simple. Object = new Simple. Object(); © Net. Cracker Confidential 2008 17
Работа с объектом simple. Object. set. Name(“Rrrr”); вызываем метод, который проставит значение полю simple. Object. get. Name(); вернёт “Rrrr” simple. Object. get. Id(); вернёт null simple. Object. name = “Mrrr”; явно проставляем значение полю © Net. Cracker Confidential 2008 18
Конструктор u u u u u Конструктор – метод инициализации полей объекта Обычный метод Для него не указывается тип возвращаемого значения Конструктор вызывается каждый раз при создании объекта При использовании ключевого слова new происходит выделение памяти под объект Конструктор может принимать параметры Класс может иметь несколько конструкторов, различающихся сигнатурой По оформлению кода, конструктор является методом типа void Имя конструктора должно совпадать с именем класса © Net. Cracker Confidential 2008 19
Минусы ООП • Динамическое связывание методов через виртуальную таблицу • Наследование размывает код • Глубина абстракции приводит к многослойным приложениям • Инкапсуляция снижает скорость доступа к данным • Динамическое создание объектов в «куче» а не на стеке © Net. Cracker Confidential 2008 20
Мотивация uhttp: //codingbat. com/java 2 лучших результата – примут на кураторство в компанию Net. Cracker © Net. Cracker Confidential 2008 21
Основы ООП Вопросы? © Net. Cracker Confidential 2008 22