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

Preview:

Citation preview

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

Виталий Унгурян unguryan@itstep.org

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Класс

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

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

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

Класс

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

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

задачу.

Класс

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

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

Класс

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

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

Класс

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

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

Объект

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

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

Объект

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

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

реальность.

Объект

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

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

Члены класса

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

класса.

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

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

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

Члены класса

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Bootstrap 

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

System Classloader

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

Extension Classloader

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

Current Classloader

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

Context Classloader

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

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

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

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

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

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

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