Забавный факт: концепция «наследования» в ООП была вдохновлена биологическим наследованием, которое мы наблюдаем в животном мире. Точно так же, как характеристики и черты передаются от родителей к их потомкам в природе, ООП позволяет классам наследовать свойства и поведение от своих родительских классов.
Отбросив мелочи, давайте сразу к главному. Цель этого поста (кроме того, чтобы выставлять напоказ мои забавные факты) — поделиться уникальной точкой зрения на ООП, которую многие разработчики не могут распознать, особенно когда пытаются понять структуру и назначение концепций ООП в первый раз. На мой взгляд, объектно-ориентированное программирование (ООП) — это средство для создания надежных систем с помощью многоразовых модульных компонентов, которые соединяются в иерархическую структуру.
Это может быть многословно, но если бы я попытался упростить это, я бы сказал; Объектно-ориентированное программирование позволяет нам создавать небольшие части или компоненты системы и вставлять их друг в друга для создания целой структуры или системы.
Типа Лего.
Моя аналогия с Lego, возможно, неверна, но если вы уже знакомы с особенностями ООП, то вы знаете, что объектно-ориентированные системы будут основаны на принципах объектно-ориентированного программирования (ООП), представляющего собой парадигму программирования, которая организует разработку программного обеспечения вокруг объекты, объекты, которые могут содержать данные и поведение, объекты, созданные на основе базовой схемы, также известной как класс. Эти объекты предназначены для хранения соответствующих данных и поведения, как и их реальный аналог.
Теперь самое время спросить: понимаете ли вы, что объектно-ориентированное программирование (ООП) использует иерархические отношения для организации и структурирования своих классов и объектов? Это делает мой друг, это делает. Существует четкая иерархическая связь, установленная посредством наследования, когда классы организованы в виде иерархической древовидной структуры. Классы, находящиеся выше в иерархии (суперклассы или базовые классы), предоставляют общие свойства и поведение, которые могут быть унаследованы классами, расположенными ниже в иерархии (подклассы или производные классы). Это средство продвижения повторного использования кода, модульности и возможности моделировать отношения в реальном мире.
Хорошо, проверьте это. Скажем, вы хотите моделировать различные типы транспортных средств. Вы можете определить надкласс под названием Vehicle
, который предоставляет общие свойства и поведение для всех типов транспортных средств. Таким образом, вам не придется разрабатывать эти поведения или свойства заново в каждом подклассе Vehicle. Наследование — это настоящая возможность повторного использования, если вы спросите меня.
Проверьте это, Транспортное средство станет средством наследования:
public class Vehicle { private String brand; private String color; private int year; public Vehicle(String brand, String color, int year) { this.brand = brand; this.color = color; this.year = year; } public void accelerate() { System.out.println("The vehicle is accelerating."); } public void brake() { System.out.println("The vehicle is braking."); } }
Теперь давайте создадим два подкласса Car
и Motorcycle
, которые наследуются от класса Vehicle
:
public class Car extends Vehicle { private int numberOfDoors; public Car(String brand, String color, int year, int numberOfDoors) { super(brand, color, year); this.numberOfDoors = numberOfDoors; } public void openTrunk() { System.out.println("Opening the car trunk."); } } public class Motorcycle extends Vehicle { private boolean hasSidecar; public Motorcycle(String brand, String color, int year, boolean hasSidecar) { super(brand, color, year); this.hasSidecar = hasSidecar; } public void doWheelie() { System.out.println("Performing a wheelie with the motorcycle."); } }
Ты видишь? Car
и Motorcycle
являются подклассами Vehicle
, унаследовавшими свойства (brand
, color
, year
) и поведение (accelerate()
, brake()
) от суперкласса. Это еще не все, унаследованные свойства и поведение могут быть изменены (полиморфизм), чтобы соответствовать уникальности каждого объекта.
Посмотрите, как конструкторы используются ниже для предоставления уникальных и конкретных данных при создании объекта. Теперь объекты; «автомобиль» и «мотоцикл», созданные ниже, содержат данные и поведение, которые используются здесь для представления его объектов реального мира.
public class Main { public static void main(String[] args) { Car car = new Car("Toyota", "Red", 2022, 4); car.accelerate(); // Inherited from Vehicle class car.brake(); // Inherited from Vehicle class car.openTrunk(); // Unique to Car class System.out.println(); Motorcycle motorcycle = new Motorcycle("Honda", "Black", 2021, false); motorcycle.accelerate(); // Inherited from Vehicle class motorcycle.brake(); // Inherited from Vehicle class motorcycle.doWheelie(); // Unique to Motorcycle class } }
Из иерархических отношений вы можете легко увидеть, как объекты реального мира можно моделировать в системах объектно-ориентированного программирования, разбивая их отношения и реплицируя их в коде. Поэтому всякий раз, когда вам трудно решить, как смоделировать класс или всю систему, просто вспомните его реальные примеры и их иерархические отношения, потому что ООП поможет вам.
ПРИМЕЧАНИЕ. Существуют различные способы демонстрации иерархической связи объектов реального мира с ООП. Некоторые примеры можно найти ниже, эти примеры могут служить руководством для понимания связи между объектно-ориентированными системами и системами реального мира.
ИЕРАРХИЧЕСКАЯ ОТНОШЕНИЕ КЛАСС-ОБЪЕКТ
Иерархия животных:
- Класс: Животное
- Объекты: лев, тигр, леопард (объекты разных типов из класса Animal)
Иерархия транспортных средств:
- Класс: Автомобиль
- Объекты: автомобиль, мотоцикл, грузовик (объекты разных типов из класса Vehicle)
Иерархия формы:
- Класс: Форма
- Объекты: круг, прямоугольник, треугольник (объекты разных типов из класса Shape)
Иерархия сотрудников:
- Класс: Сотрудник
- Объекты: менеджер, разработчик, дизайнер (объекты разных типов из класса Employee)
ИЕРАРХИЧЕСКАЯ ОТНОШЕНИЕ «HAS-A» (агрегация, ассоциация и композиция).
Иерархия автосалонов:
- Класс: Автосалон
- Ассоциация: CarDealership имеет клиентов (Ассоциация)
- Агрегация: у CarDealership есть продавцы (агрегация)
- Композиция: CarDealership имеет CarInventory (Композиция)
Иерархия социальных сетей:
- Класс: SocialMediaPlatform
- Ассоциация: SocialMediaPlatform имеет пользователей (ассоциация)
- Агрегация: SocialMediaPlatform имеет сообщения (агрегация)
- Композиция: Пост имеет комментарии (Композиция)
ИЕРАРХИЧЕСКИЕ ОТНОШЕНИЯ «ЕС-А» (Наследование)
Иерархия животных:
- Суперкласс: Животное
- Подклассы: млекопитающее, рептилия, птица
- Другие подклассы: Собака, Кошка, Змея, Орел
Иерархия транспортных средств:
- Суперкласс: Транспортное средство
- Подклассы: Автомобиль, Мотоцикл, Грузовик
- Другие подклассы: седан, внедорожник, спортивный автомобиль, круизер, пикап.