ООП Java. Принципы ооп
Скачать 21.38 Kb.
|
ООП Методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования. Принципы ООП Инкапсуляция Наследование Полиморфизм Абстракция Инкапсуляция Свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя, открыв только то, что необходимо при последующем использовании. Полиморфизм Свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Наследование Свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Абстракция Способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Модификаторы доступа private, default, protected, public private (закрытый) private (закрытый) Он ограничивает видимость данных и методов пределами одного класса default поля и методы будут видны в пределах классов этого же пакета. protected поля и методы будут видны в пределах классов этого же пакета и классов наследников. Public доступ из любого класса и пакета this & super this() & super() - это ссылка на объект в текущем классе - это ссылка на объект в родительском классе - вызов конструктор текущего класса - вызов конструктор родительского класса Модификатор static Модификатор применяется к полю, методу, блоку и вложенному классу. static (метод и поле) говорит о том, что метод или поле класса принадлежат не объекту, а самому классу static class тот же класс. но может быть только вложенным и имеет доступ только с статическим полям обертывающего класса static (Блок) предназначен для инициализации внутренних статических переменных класса. Наследование и реализация. Суть в том, что можно образовать новые классы, используя уже имеющийся код. Ключевое слово extends означает, что создается новый класс от уже имеющегося Обращение к методу родителя с помощью super Наследовать можно всего один класс Наследуется все, кроме приватных переменных и методов Можно переопределить метод класса-родителя название и параметры метода в родителе и наследнике — одинаковые; методы с обозначением private не переопределяются. Если класс отмечен как final, то ни один другой класс не может унаследовать от него элементы. Интерфейсы. Интерфейс Java немного похож на класс, за исключением того, что интерфейс может содержать только сигнатуры методов и поля. Интерфейс не может содержать реализацию методов интерфейс объявляется с использованием ключевого слова interface класс, который реализует интерфейс должен использовать ключевое слово implements и имя интерфейса Класс, реализующий интерфейс, должен реализовывать все методы, объявленные в нем. Методы должны иметь точно такую же сигнатуру(имя + параметры), как объявлено. Класс не должен реализовывать(объявлять) переменные интерфейса. Только методы. Класс Java может реализовывать несколько интерфейсов. В этом случае класс должен реализовать все методы, объявленные во всех реализованных интерфейсах. Статические методы в Java должны иметь реализацию если же реализация есть, нужно добавить ключевое слово default. Методы интерфейса public abstract Поля public static final Абстракция Класс в обьявлении которого есть ключевое слово abstract. Он отличается от обычного класса тем что нельзя создать обьект или экземпляр данного класса. Только абстрактный класс может иметь абстрактный метод у которого нет реализации только обьявление Может ли быть конструктор у абстрактного класса можно использовать для задания начальных значений общих переменных, объявленных в абстрактном классе и используемых различными реализациями. Перегрузка(overload) и Переопределение(override) Объявление нескольких методов в одном классе с идентичными именами. Различия состоят только в количестве и/или типе параметрв в этих методах Изменение реализации уже существующего в суперклассе метода (override). В новом методе должны быть те же сигнатура и тип возвращаемого результата, что и у метода родительского класса Анонимные классы это вложенные классы которые не имеют имени и создаются во время инициализации объекта. наследуется от родительского класса временные классы класс Object это специальный класс от которого наследуется все классы. класс object имеет свои методы, такие как: - toString - возвращает символьную строку описывающую объект - equals() - сравнивает объекты - hashCode() - возвращает хеш-код связанный с вызывающим обьектом - clone() - создает объект не отличающийся от клонируемого - getClass - получает класс объекта во время выполнения - finalize() - вызывается при сборке мусора Контакт между hascode() и equals() 1. Если объекты равны по equals() то и по hashcode будут тоже равны 2. Если hascode разные, то equals будет false 3. Если обьекты не равны по equals(), их хэш коды могут быть равны 4. Если хэш коды равны, обьекты могут быть равны или нет Контракт equals() Рефлексивность: для любого заданного значения x, выражение x.equals(x) должно возвращать true.Заданного — имеется в виду такого, что x != null Симметричность: для любых заданных значений x и y, x.equals(y) должно возвращать true только в том случае, когда y.equals(x) возвращает true. Транзитивность: для любых заданных значений x, y и z, если x.equals(y) возвращает true и y.equals(z) возвращает true, x.equals(z) должно вернуть значение true. Согласованность: для любых заданных значений x и y повторный вызов x.equals(y) будет возвращать значение предыдущего вызова этого метода при условии, что поля, используемые для сравнения этих двух объектов, не изменялись между вызовами. Сравнение null для любого заданного значения x вызов x.equals(null) должен возвращать false. Синтаксические отличия интерфейса от абстрактного класса? Интерфейс - Абстрактный класс: Слово для описания: interface - abstract Слово для реализации: impleements - extends Конструктор: нет - есть Методы: static, default - Допустимы Модификатор доступа: Public - Любой Наследование: extends - extends,implements Enum Тип перечисления. Создает новый определенный тип - группу значений. - Enum может наследовать интерфейсы. - Enum не может наследовать (extends) класс. Поскольку Enum уже наследуется от абстрактного класса java.lang.Enum, понятно, что другой класс наследовать не удастся, поскольку Java не поддерживает множественное наследование классов. Благодаря наследованию от java.lang.Enum, все перечисления имеют методы: - ordinal() - индекс константы - values() - массив констант - valueOf() - возвращает элемент перечисления с названием в скобках Конструктор Это специальный метод который вызывается во время создания объекта. Конструктор инициализирует объект во время создания. Имеют имя класса. Конструктор по умолчанию - без параметров Конструктор с параметрами принимает на вход параметры необходимые для инициализации полей Конструктор копирования принимает в качестве параметра объект класса instanseof vs getClass instanceof проверяет был ли объект создан на основе какого либо класса в отличии от getClass который возвращает точно тот класс от которого был создан Клас Объект содержащий информацию о типе и используется в тех местах где нужно передать информацию о типе (рефлексия)с Class Ассоциация Объекты двух классов могут ссылаться один на другой, иметь некоторую связь между друг другом Агрегация Отношение когда один объект является частью другого объекта Композиция Отношение, когда объект не только является частью другого объекта, но и вообще не может принадлежать еще кому-то |