Ответ
Объектно-ориентированное программирование (ООП) — это парадигма программирования, в которой программа структурируется как набор взаимодействующих объектов, каждый из которых является экземпляром определенного класса. Класс описывает состояние (данные в полях) и поведение (методы).
Четыре основных принципа (столпа) ООП:
-
Инкапсуляция (Encapsulation)
- Что это: Сокрытие внутреннего состояния объекта и деталей реализации, предоставление контролируемого доступа через публичные методы.
- Зачем: Обеспечивает целостность данных, уменьшает связность, упрощает поддержку.
-
Как: Использование модификаторов доступа (
private,protected,public) и методов-геттеров/сеттеров.public class BankAccount { private double balance; // Поле скрыто (инкапсулировано) public double getBalance() { // Контролируемый доступ return balance; } public void deposit(double amount) { if (amount > 0) { // Валидация внутри метода balance += amount; } } }
-
Наследование (Inheritance)
- Что это: Механизм создания нового класса (потомка) на основе существующего (родителя), с возможностью повторного использования и расширения его функциональности.
- Зачем: Позволяет избежать дублирования кода, создавать иерархии классов.
- Как: Ключевое слово
extendsв Java.public class Vehicle { // Родительский класс protected String brand; public void honk() { System.out.println("Beep!"); } } public class Car extends Vehicle { // Дочерний класс private int doors; public Car(String brand, int doors) { this.brand = brand; // Поле унаследовано this.doors = doors; } }
-
Полиморфизм (Polymorphism)
- Что это: Способность объектов с одинаковой спецификацией (интерфейсом) иметь различную реализацию. Один интерфейс — множество форм.
- Зачем: Повышает гибкость и расширяемость кода.
- Как: Переопределение методов (
@Override) и использование ссылок родительского типа.public abstract class Shape { public abstract double area(); // Абстрактный метод } public class Circle extends Shape { private double radius; @Override public double area() { return Math.PI * radius * radius; } // Своя реализация } public class Square extends Shape { private double side; @Override public double area() { return side * side; } // Другая реализация } // Полиморфное использование Shape shape1 = new Circle(5); Shape shape2 = new Square(4); System.out.println(shape1.area()); // Вызовется Circle.area() System.out.println(shape2.area()); // Вызовется Square.area()
-
Абстракция (Abstraction)
- Что это: Процесс выделения существенных характеристик объекта и игнорирования нерелевантных деталей. Моделирование сущности предметной области.
- Зачем: Позволяет управлять сложностью, фокусируясь на взаимодействии, а не на реализации.
- Как: Абстрактные классы (
abstract class) и интерфейсы (interface).// Абстракция "Транспортное средство" public interface Vehicle { void startEngine(); // Контракт, скрывающий детали void stopEngine(); } public class ElectricCar implements Vehicle { @Override public void startEngine() { // Специфичная реализация для электрокара connectBattery(); initializeMotor(); } // ... private методы connectBattery(), initializeMotor() }