Інкапсуляція
об'єднання полів та методів в одну одиницю (клас)
це робиться для того, щоб обмежити доступ до певних компонентів за допомогою модифікаторів доступу (public, private, protected тощо)
У Spring Boot Rest API інкапсуляція забезпечує, щоб моделі даних надавали доступ лише до необхідних полів.
Клас сутності User
приховує чутливу інформацію, таку як пароль. Паролі можуть бути захешовані та перевірені всередині класу або сервісного шару без прямого відкриття.
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = hashPassword(password);
}
private String hashPassword(String password) {
// Логіка хешування
return passwordHash;
}
}
Наслідування
дозволяє класу успадковувати поля та методи від іншого класу, що сприяє повторному використанню коду та моделюванню ієрархії
Клас BaseEntity
може містити спільні властивості, такі як id
, createdAt
, updatedAt
, які успадковуються іншими класами сутностей, такими як Order
і Customer
.
@MappedSuperclass
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
// Гетери та сетери
}
@Entity
public class Customer extends BaseEntity {
private String name;
private String email;
// Додаткові поля та методи
}
Поліморфізм
дозволяє методам виконувати різні завдання залежно від об'єкта, що викликає їх. Це може бути досягнуто через перевизначення чи перевантаження методів.
Різні способи оплати (CreditCardPayment
, PaypalPayment
) можуть реалізувати загальний інтерфейс PaymentService
. Система динамічно визначає, який метод викликати.
public interface PaymentService {
void processPayment(double amount);
}
public class CreditCardPayment implements PaymentService {
@Override
public void processPayment(double amount) {
System.out.println("Обробка платіжної операції кредитною карткою на суму " + amount);
}
}
public class PaypalPayment implements PaymentService {
@Override
public void processPayment(double amount) {
System.out.println("Обробка платіжної операції через PayPal на суму " + amount);
}
}
Абстракція
приховує деталі реалізації та показує лише суттєві функції користувачеві
У дизайні API абстракція використовується для визначення контрактів сервісів при приховуванні деталей реалізації.
Абстрактний клас NotificationService
може визначати методи для надсилання повідомлень, не розкриваючи основних реалізацій (електронною поштою, SMS, push-повідомлення).
public abstract class NotificationService {
public abstract void sendNotification(String message, String recipient);
}
public class EmailNotificationService extends NotificationService {
@Override
public void sendNotification(String message, String recipient) {
System.out.println("Надсилання електронного листа " + recipient + ": " + message);
}
}
Перекладено з: [OOP principles in Java Simplified](https://vedantkekan.medium.com/oop-principles-in-java-simplified-484fdf1652b1)