Download - Инкапсуляция
![Page 2: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/2.jpg)
Инкапсуляция
Инкапсуляция – механизм, связывающий вместе код и данные,
которыми он манипулирует, и одновременно защищающий их от произвольного доступа со стороны
другого кода, внешнего по отношению к рассматриваемому.
Доступ к коду и данным жестко контролируется интерфейсом.
![Page 3: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/3.jpg)
Инкапсуляция (encapsulation) - это механизм, который объединяет данные и методы, манипулирующий этими данными, представляя открытый интерфейс доступа.
Инкапсуляция
![Page 4: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/4.jpg)
Не понятно, как взаимодействовать с объектом. Слишком много не нужных деталей.
![Page 5: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/5.jpg)
![Page 6: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/6.jpg)
![Page 7: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/7.jpg)
![Page 8: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/8.jpg)
Основные цели инкапсуляции
Предельная локализация изменений при необходимости таких изменений
Прогнозируемость изменений (какие изменения в коде надо сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.
![Page 9: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/9.jpg)
Основные цели инкапсуляции
Обеспечить безопасность использования модуля, вынести в интерфейс, сделать общедоступными только те методы обработки информации, которые не могут испортить или удалить исходные данные.
Уменьшить сложность, скрыв от внешнего мира ненужные детали реализации.
![Page 10: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/10.jpg)
Класс
Класс описывает содержание и поведение
некой совокупности данных и действий над
этими данными.
![Page 11: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/11.jpg)
Класс
Класс является абстракцией сущности, из
предметной облости в которой мы решаем
задачу.
![Page 12: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/12.jpg)
Класс
Класс является моделью ещё не существующей
сущности (объекта) описаной в исходном коде.
![Page 13: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/13.jpg)
Класс
Фактически класс описывает устройство
объекта, являясь своего рода чертежом, моделью для создания оюъектов.
![Page 14: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/14.jpg)
Класс
Объявление класса производится с помощью ключевого слова class. Пример: class < имя_класса > {// тело класса}.
Пример:сlass Cat {}
![Page 15: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/15.jpg)
![Page 16: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/16.jpg)
Объект
Объект - это экземпляр созданный на основе
класса. Объект = Данные + Операции
![Page 17: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/17.jpg)
Объект
Класс - это логическая конструкция.
Объект – это физическая
реальность.
![Page 18: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/18.jpg)
Объект
Пример создания объекта:Cat cat = new Cat();
Оператор new создаёт экземпляр указанного класса и возвращает ссылку на вновь созданный объект.
![Page 19: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/19.jpg)
![Page 20: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/20.jpg)
Члены класса
Методы и переменные объявленные внутри тела класса являются членами
класса.
![Page 21: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/21.jpg)
Переменные экземпляра
Переменные, определённые в теле класса (вне методов), называются переменными
экземпляра и доступны методам внутри класса.
![Page 22: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/22.jpg)
Члены класса
Для доступа к методам и переменным экземпляра вне тела класса используется точка после
названия переменной (.).
![Page 23: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/23.jpg)
ООП ориентировано на разработку крупных
программных комплексов, разрабатываемых командой программистов (возможно,
достаточно большой).
Проектирование
![Page 24: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/24.jpg)
Проектирование системы в целом, создание отдельных компонентов и их объединение в конечный продукт при этом часто выполняется разными людьми, и нет ни одного специалиста, который знал бы о проекте всё.
Проектирование
![Page 25: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/25.jpg)
Объектно-ориентированное проектирование состоит в описании структуры и поведения проектируемой системы, то есть, фактически, в ответе на два основных вопроса:
Из каких частей состоит система.В чём состоит ответственность каждой из частей.
Проектирование
![Page 26: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/26.jpg)
Загрузка классов
Любой класс (экземпляр класса java.lang.Class в среде и .class файл в файловой системе), используемый в среде исполнения загружается каким-либо загрузчиком в Java.
![Page 27: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/27.jpg)
Загрузка классов
Для того, чтобы получить загрузчик, которым был загружен класс А, необходимо воспользоваться методом A.class.getClassLoader().
![Page 28: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/28.jpg)
Виды загрузчиков
Различают 3-и вида загрузчиков в Java. базовый загрузчик (bootstrap), системный загрузчик (System Classloader), загрузчик расширений (Extension Classloader).
![Page 29: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/29.jpg)
Bootstrap
Bootstrap – это базовый загрузчик - реализован на уровне JVM и не имеет обратной связи со средой исполнения. Данным загрузчиком загружаются классы из директории $JAVA_HOME/lib. Поэтому, попытка получения загрузчика у классов java.* всегда заканчивается null'ом. Это объясняется тем, что все базовые классы загружены базовым загрузчиком, доступа к которому из управляемой среды нет.
![Page 30: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/30.jpg)
System Classloader
Системный загрузчик, реализованный уже на уровне JRE. В Sun JRE — это класс sun.misc.Launcher$AppClassLoader. Этим загрузчиком загружаются классы, пути к которым указаны в переменной окружения CLASSPATH.
![Page 31: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/31.jpg)
Extension Classloader
Загрузчик расширений. Данный загрузчик загружает классы из директории $JAVA_HOME/lib/ext. В Sun JRE — это класс sun.misc.Launcher$ExtClassLoader.
![Page 32: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/32.jpg)
Current Classloader
Загрузчик класса, код которого в данный момент исполняется. Текущий загрузчик используется по умолчанию для загрузки классов в процессе исполнения. В частности, при использовании метода Class.forName("")/ClassLoader.loadClass("") или при любой декларации класса, ранее не загруженного.
![Page 33: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/33.jpg)
Context Classloader
Загрузчик контекста текущего потока. Получить и установить данный загрузчик можно с помощью методов Thread.getContextClassLoader()/Thread.setContextClassLoader(). Загрузчик контекста устанавливается автоматически для каждого нового потока. При этом, используется загрузчик родительского потока.
![Page 34: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/34.jpg)
Модификаторы доступа
private: члены класса доступны только внутри класса;
default (package-private) (модификатор, по-умолчанию): члены класса видны внутри пакета (если класс будет так объявлен он будет доступен только внутри пакета);
protected: члены класса доступны внутри пакета и в наследниках;
public: члены класс доступны всем;
![Page 35: Инкапсуляция](https://reader035.vdocuments.site/reader035/viewer/2022070518/58e49d521a28abf5428b56e9/html5/thumbnails/35.jpg)
Уровень закрытости