Ооп это методология программирования, основанная на представлении программы в виде совокупности объектов. Объект это экземпляр определенного класса, классы образуют иерархию наследования.
Скачать 28.01 Kb.
|
ООП — это методология программирования, основанная на представлении программы в виде совокупности объектов. Объект — это экземпляр определенного класса, классы образуют иерархию наследования. В качестве основных логических элементов - объекты Согласно парадигме ООП программа состоит из объектов, обменивающееся сообщениями. Объекты могут обладать состоянием, изменить состояние объекта можно - послав ему сообщение. Инкапсуляция - свойство системы, позволяющие объединить данные и методы, в классе, и скрыть реализацию от пользователя, открыв доступ только методам необходимым для использования класса. Наследование (is a) - свойство системы, позволяющие описать новый класс на основе существующего, используя его функционал. Полиморфизм - свойство системы, использовать объекты с одинаковым интерфейсом, не зная о типе и внутренней структуре объекта. (Использование родителя вместо потомка) Типы полиморфизма: Полиморфизм подтипов (Переопределение методов). Использование данных одного типа, в параметрах другого типа, без изменения кода. Ad-hoc полиморфизм. Перегрузка методов. Параметрический полиморфизм (Дженерики). Способность принимать параметры разных типов. Полиморфизм принуждения. Сложение строки и числа. Принуждает число быть строкой. Абстракция - способ выделить набор общих характеристик объекта. Ассоциация (has a) - связь между объектами. Когда они класс включает в поле другой класс. Композиция - когда связанный класс не существует отдельно об базового класса, создается в конструкторе базового класса. Агрегация - когда связанный класс создается отдельно, и передается в параметр конструктора базового класса. Раннее связывание (early binding) - осуществляется компилятором перед запуском программы. Позднее связывание (late binding) - осуществляется во время выполнения программы (dynamic | runtime binding). B java - все методы используют позднее связывание, кроме (static, final) методов (private method - default final). JVM - java virtual machine - исполняет байт код. JRE - java runtime environment - среда запуска виртуальной машины ( состоит из JVM и стандартных библиотек java). JDK - java developer kit - набор разработчика, включает JRE (включает JVM) и набор инструментов разработчика (включает в себя: компилятор, библиотеки, документацию java). JIT - just in time compilation - компиляция байт кода в машинный во время выполнения программы. assert - используется на этапе разработки, для проверки корректности данных во время исполнения программы. Выбрасывает исключение AssertionError. Внутренние классы относятся к объектам класса а не к самому классу. Локальный класс - класс внутри метода, может обращаться к локальным final переменным (не может быть статическим). Вложений класс не может содержать статических методов, блоков инициализации и классов (в объекте храниться ссылка на объект внешнего класса). Статические вложенные классы могут (доступ к объекту внешнего класса через его Имя.this). Порядок вызова блоков инициализации: 1. Статические блоки от родителя к наследнику 2. Не статические от родителя к наследнику перед вызовом конструктора OutOfMemoryError: Java heap space - не хватка места в куче PermGen Space (до Java 8) - нехватка места в Permanent области, размер задается -XX:PermSize, -XX:MaxPermSize; GC overhead limit exceeded - при переполнении памяти первой или второй области, и CG постоянно пытается очистить память unable to create new native thread - нет возможности создавать новые потоки Garbage collector: Цель: находить мусор, освобождать память от мусора. Мусор - объект на который не ведут strong ссылки. Обнаружение мусора: Reference counting - каждый объект имеет счетчик сколько ссылок к нему ведут. Проблема сложность подсчета ссылок. Tracing - объект считается живым, если к нему можно добраться из корневых точек: - Локальные переменные и параметры методов - Потоки - Статические переменные - Ссылки из JNI. Очистка памяти от мусора: Copying collector - Объекты создаются в «from space». Когда «from space» заполняется, приложение приостанавливается. Запускается GC, ищет живые объекты и копирует их в «to space». «from space» очищается. «to space» и «from space» меняются местами. Преимущество - Объекты плотно забивают память. Недостаток - приложение останавливается до прохождения полного цикла сборки мусора. Mark-and-sweep Объекты создаются в памяти В момент запуска приложение приостанавливается Сборщик мусора проходит по дереву объектов, помечая живые Сборщик проходится по всей памяти, помещая не отмеченные объекты во «free list» Новые объекты создаются в памяти помеченной как «free list» Недостатки - приложение не работает пока происходит сборка мусора, время остановки зависит от размеров памяти и количества объектов, если не использовать «сжатие» память будет использоваться не эффективно. HotSpot VM использует комбинированный подход для разных этапов сборки мусора. Сборка мусора - процесс освобождения места в куче. Любой объект имеющий ссылку - остается в памяти. Виды сборщиков мусора: -XX:+Use%Name%GC Serial (последовательный) - самый простой, для небольших приложений не требовательных к задержкам. Parallel (параллельный) - наследник последовательного, но добавляет параллельность операциям, автоматически оптимизируется. Concurrent Mark Sweep (CMS) - снижение задержек, путем параллельного выполнения с основным потоком. Garbage First (G1) - замена CMS для работы с большим объемом данных, в северных приложениях. Serial Garbage Collector - во время сборки приложения останавливается. Память делится на три участка: -Younggeneration.Объекты создаются здесь. Использует механизм «Copying Collector». Состоит из трех областей: Eden - создаются объекты, кроме больших по размеру, они помещаются в old generation. Survivor space (To Space, From space) - помещаются объекты которые пережили хотя бы одну сборку мусора, но не достигли порога старости, чтобы поместить их в Old generation. Когда Young generation заполняется, запускается процесс легкой сборки мусора «minor collection». В начале область «to space» пустая, а в «from space» содержит объекты пережившие сборку мусора. Сборщик ищет «живые» объекты в Eden и копирует их в «to space», затем копирует туда же живые «молодые» объекты из «from space». «Старые» объекты помещаются в Old generation. «To space» и «from space» меняются местами, Eden становиться пустой, число объектов Old generation увеличивается. Если в «to space» переполняется, то объекты помещаются в Old generation. - Oldgeneration. Сюда перемещаются объекты, которые переживают мелкую сборку мусора. Использует механизм «Mark-sweep-compact». Сборка происходит в три этапа: 1. (Mark) Сборщик помечает все живые объекты. 2. (Sweep) Все не живые объекты очищаются. 3. (Compact) Все живые объекты помещаются в начало. В результате память представляет непрерывную область. -Permanent generation. Хранит метаданные об объектах, String pool, Class data sharing. Область делится на две части: для чтения и для чтения-записи. Область для чтения не очищается. В Java 4 типа ссылок: StrongReference (сильная) Обычное создание объекта String str = new String(); // str - strong reference Любой объект со strong ссылкой запрещен для удаления SoftReference (мягкая) Будет удалена, когда JVM будет не хватать памяти. Подходит для кэширования объекта. WeakReference (слабая) Будет помечена на удаление, если нет strong ссылок Подходит для хранения метаданных PhantomReference (фантомная) Будет помечена на удаление, если нет strong ссылок |