Главная страница

ООП Java. Принципы ооп


Скачать 21.38 Kb.
НазваниеПринципы ооп
Дата28.07.2022
Размер21.38 Kb.
Формат файлаdocx
Имя файлаООП Java.docx
ТипДокументы
#637471

ООП

Методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

Принципы ООП

Инкапсуляция
Наследование
Полиморфизм
Абстракция


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

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

Полиморфизм

Свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Наследование

Свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью.

Абстракция

Способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые.

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

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

Ассоциация

Объекты двух классов могут ссылаться один на другой, иметь некоторую связь между друг другом

Агрегация

Отношение когда один объект является частью другого объекта

Композиция

Отношение, когда объект не только является частью другого объекта, но и вообще не может принадлежать еще кому-то


написать администратору сайта