Single Responsibility Principle(SRP)
ينص هذا المبدأ على أن كل فئة يجب أن تتحمل مسؤولية واحدة. إنه يؤكد على أن الفصل الدراسي يجب أن يؤدي وظيفة واحدة محددة وليس لديه الكثير من الأسباب للتغيير.
مثال: إدارة معلومات المستخدم وإرسال إشعارات البريد الإلكتروني.
class UserManager {
void createUser(UserData userData) {
// Logic for creating a user
}
}
class EmailService {
void sendEmail(EmailData emailData) {
// Logic for sending an email
}
}
Open/Closed Principle(OCP)
يشجع هذا المبدأ على توسيع الوظائف عن طريق إضافة رمز جديد بدلاً من تعديل الكود الحالي.
مثال: التعامل مع طرق الدفع المختلفة في تطبيق التجارة الإلكترونية.
abstract class PaymentProcessor {
abstract void processPayment();
}
class CreditCardPaymentProcessor extends PaymentProcessor {
void processPayment() {
// Logic for processing credit card payment
}
}
class PayPalPaymentProcessor extends PaymentProcessor {
void processPayment() {
// Logic for processing PayPal payment
}
}
Liskov Substitution Principle(LSP)
يؤكد هذا المبدأ أن كائنات الفئة المشتقة يجب أن تكون قابلة للاستبدال بكائنات من الفئة الأساسية دون التأثير على صحة البرنامج.
مثال: إدارة الأشكال الهندسية.
abstract class Shape {
abstract double area();
}
class Rectangle extends Shape {
double area() {
// Logic for calculating area of rectangle
}
}
class Square extends Shape {
double area() {
// Logic for calculating area of square
}
}
مبدأ فصل الواجهة(ISP)
ينصح هذا المبدأ بتقسيم الواجهات إلى واجهات أصغر لتجنب إجبار الفئات على تنفيذ الأساليب التي لا تحتاج إليها.
مثال: واجهات لتحديث البيانات وعرضها.
interface UpdateableFeature {
void updateFeature();
}
interface DisplayableFeature {
void displayFeature();
}
Dependency Inversion Principle(DIP)
يقترح هذا المبدأ استخدام حقن التبعية لإدارة التبعيات.
مثال: استخدام حقن التبعية لإدارة التبعيات.
class OrderProcessor {
private final DBConnection dbConnection;
private final EmailService emailService;
OrderProcessor(DBConnection dbConnection, EmailService emailService) {
this.dbConnection = dbConnection;
this.emailService = emailService;
}
}
تذكر أن تطبيق SOLID المبادئ Java يجب أن يتم بمرونة بناءً على الغرض المحدد لمشروعك وفهمك لـ SOLID و Java.