35
ООП Инкапсуляция Виталий Унгурян [email protected]

Инкапсуляция

Embed Size (px)

Citation preview

Page 1: Инкапсуляция

ООП Инкапсуляция

Виталий Унгурян [email protected]

Page 2: Инкапсуляция

Инкапсуляция

Инкапсуляция – механизм, связывающий вместе код и данные,

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

другого кода, внешнего по отношению к рассматриваемому.

Доступ к коду и данным жестко контролируется интерфейсом.

Page 3: Инкапсуляция

Инкапсуляция (encapsulation) - это механизм, который объединяет данные и методы, манипулирующий этими данными, представляя открытый интерфейс доступа.

Инкапсуляция

Page 4: Инкапсуляция

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

Page 5: Инкапсуляция
Page 6: Инкапсуляция
Page 7: Инкапсуляция
Page 8: Инкапсуляция

Основные цели инкапсуляции

Предельная локализация изменений при необходимости таких изменений

Прогнозируемость изменений (какие изменения в коде надо сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.

Page 9: Инкапсуляция

Основные цели инкапсуляции

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

Уменьшить сложность, скрыв от внешнего мира ненужные детали реализации.

Page 10: Инкапсуляция

Класс

Класс описывает содержание и поведение

некой совокупности данных и действий над

этими данными.

Page 11: Инкапсуляция

Класс

Класс является абстракцией сущности, из

предметной облости в которой мы решаем

задачу.

Page 12: Инкапсуляция

Класс

Класс является моделью ещё не существующей

сущности (объекта) описаной в исходном коде.

Page 13: Инкапсуляция

Класс

Фактически класс описывает устройство

объекта, являясь своего рода чертежом, моделью для создания оюъектов. 

Page 14: Инкапсуляция

Класс

Объявление класса производится с помощью ключевого слова class. Пример: class < имя_класса > {// тело класса}.

Пример:сlass Cat {}

Page 15: Инкапсуляция
Page 16: Инкапсуляция

Объект

Объект - это экземпляр созданный на основе

класса. Объект = Данные + Операции

Page 17: Инкапсуляция

Объект

Класс - это логическая конструкция.

Объект – это физическая

реальность.

Page 18: Инкапсуляция

Объект

Пример создания объекта:Cat cat = new Cat();

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

Page 19: Инкапсуляция
Page 20: Инкапсуляция

Члены класса

Методы и переменные объявленные внутри тела класса являются членами

класса.

Page 21: Инкапсуляция

Переменные экземпляра

Переменные, определённые в теле класса (вне методов), называются переменными

экземпляра и доступны методам внутри класса.

Page 22: Инкапсуляция

Члены класса

Для доступа к методам и переменным экземпляра вне тела класса используется точка после

названия переменной (.).

Page 23: Инкапсуляция

ООП ориентировано на разработку крупных

программных комплексов, разрабатываемых командой программистов (возможно,

достаточно большой).

Проектирование

Page 24: Инкапсуляция

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

Проектирование

Page 25: Инкапсуляция

Объектно-ориентированное проектирование состоит в описании структуры и поведения проектируемой системы, то есть, фактически, в ответе на два основных вопроса:

Из каких частей состоит система.В чём состоит ответственность каждой из частей.

Проектирование

Page 26: Инкапсуляция

Загрузка классов

Любой класс (экземпляр класса java.lang.Class в среде и .class файл в файловой системе), используемый в среде исполнения загружается каким-либо загрузчиком в Java.

Page 27: Инкапсуляция

Загрузка классов

Для того, чтобы получить загрузчик, которым был загружен класс А, необходимо воспользоваться методом A.class.getClassLoader().

Page 28: Инкапсуляция

Виды загрузчиков

Различают 3-и вида загрузчиков в Java. базовый загрузчик (bootstrap), системный загрузчик (System Classloader), загрузчик расширений (Extension Classloader).

Page 29: Инкапсуляция

Bootstrap 

Bootstrap – это базовый загрузчик - реализован на уровне JVM и не имеет обратной связи со средой исполнения. Данным загрузчиком загружаются классы из директории $JAVA_HOME/lib. Поэтому, попытка получения загрузчика у классов java.* всегда заканчивается null'ом. Это объясняется тем, что все базовые классы загружены базовым загрузчиком, доступа к которому из управляемой среды нет.

Page 30: Инкапсуляция

System Classloader

Системный загрузчик, реализованный уже на уровне JRE. В Sun JRE — это класс sun.misc.Launcher$AppClassLoader. Этим загрузчиком загружаются классы, пути к которым указаны в переменной окружения CLASSPATH.

Page 31: Инкапсуляция

Extension Classloader

  Загрузчик расширений. Данный загрузчик загружает классы из директории $JAVA_HOME/lib/ext. В Sun JRE — это класс sun.misc.Launcher$ExtClassLoader.

Page 32: Инкапсуляция

Current Classloader

Загрузчик класса, код которого в данный момент исполняется. Текущий загрузчик используется по умолчанию для загрузки классов в процессе исполнения. В частности, при использовании метода Class.forName("")/ClassLoader.loadClass("") или при любой декларации класса, ранее не загруженного.

Page 33: Инкапсуляция

Context Classloader

Загрузчик контекста текущего потока. Получить и установить данный загрузчик можно с помощью методов Thread.getContextClassLoader()/Thread.setContextClassLoader(). Загрузчик контекста устанавливается автоматически для каждого нового потока. При этом, используется загрузчик родительского потока.

Page 34: Инкапсуляция

Модификаторы доступа

private: члены класса доступны только внутри класса;

default (package-private) (модификатор, по-умолчанию): члены класса видны внутри пакета (если класс будет так объявлен он будет доступен только внутри пакета);

protected: члены класса доступны внутри пакета и в наследниках;

public: члены класс доступны всем;

Page 35: Инкапсуляция

Уровень закрытости