
مفهوم الكلاسات class في Dart
الكلاس ( Class ) هو عبارة عن حاوية كبيرة تحتوي على كل الكود من متغيرات و دوال و كائنات. من أجل تعريف كلاس Class جديد يكفي فقط أن نكتب الكلمة class ثم وضع إسم لهذا الكلاس, ثم فتح أقواس تحدد بداية الكلاس و نهايته, مفهوم الكلاسات class في Dart.
درس اليوم من أهم الدروس يجب عليك إتقانه و التدرب عليه عدة مرات لأنه إذا أتقنته سوف يُسهِّل عليك أشياء كثيرة في لغة دارت. البديل للدوال function في الكلاس هي الميثود methods. الميثود تقريباً بنفس عمل function لكن لا نكتب بالبداية function, نكتب إسم الميثود في البداية. الكلاس أتى تقريباً بديل عن الدوال functions, مفهوم الكلاسات class في Dart.
يتم استخدام الكلاسات (Classes) لتعريف هياكل البيانات والسلوك في البرنامج. تساعد الكلاسات في تنظيم الكود وتجميع البيانات ذات الصلة والوظائف معًا, مفهوم الكلاسات class في Dart.
الشكل العام لبناء كلاس في دارت Syntax
class ClassName { <fields> <getters/setters> <constructor> <functions> }
في البداية نكتب الكلمة class و بعدها نضع إسم للكلاس ClassName. و بعدها فتحنا أقواس معكوفة و ضمنها نكتب constructor ثم فتحنا أقواس معكوفه مرة ثانية.
لإنشاء كلاس جديد في Dart، يمكنك استخدام الكلمة المفتاحية “class” متبوعة بالاسم الذي ترغب في تسميته للكلاس. على سبيل المثال، إذا كنت ترغب في إنشاء كلاس يمثل شخصًا، يمكنك كتابة الكود التالي:
class Person { String name; int age; void sayHello() { print('Hello, my name is $name'); } }
في هذا المثال، تم إنشاء كلاس يسمى “Person” يحتوي على خاصيتين: “name” و “age”، ووظيفة “sayHello” التي تقوم بطباعة رسالة تحتوي على اسم الشخص.
بعد تعريف الكلاس، يمكنك إنشاء كائن (Object) من الكلاس باستخدام الكلمة المفتاحية “new”. على سبيل المثال:
void main() { var person = Person(); person.name = 'John'; person.age = 30; person.sayHello(); // ستطبع: "Hello, my name is John" }
في هذا المثال، تم إنشاء كائن من الكلاس “Person” باسم “person”، وتم تعيين قيمة لخاصيتي “name” و “age”، ثم تم استدعاء الوظيفة “sayHello” لطباعة رسالة التحية.
تجدر الإشارة إلى أنه يمكن تعريف البناءة (Constructors) والوظائف الأخرى والخصائص الإضافية في الكلاسات. يمكنك قراءة المزيد عن الكلاسات في لغة Dart في وثائق اللغة الرسمية.
مثال
كود إنشاء الكلاس Class creation code :
class Student { var stdName; var stdAge; var stdRoll_nu; }
أنشأنا كلاس بإسم Student ثم بداخله ثلاثة متغيرات و هي stdName, stdAge, stdRoll_nu ثم أغلقنا الكلاس.
كود انشاء كائن من الكلاس Code to create an object from a class :
class Student { var stdName; var stdAge; var stdRoll_nu; showStdInfo() { print("Student Name is : ${stdName}"); print("Student Age is : ${stdAge}"); print("Student Roll Number is : ${stdRoll_nu}") } } void main () { var std = new Student(); }
أنشأنا كائن من الكلاس و هي معلومات showStdInfo و به ثلاث عمليات طباعة لمعلومات الطالب.
كود استدعاء تابع في الكلاس Invoke code in a class:
class Student { var stdName; var stdAge; var stdRoll_nu; showStdInfo() { print("Student Name is : ${stdName}"); print("Student Age is : ${stdAge}"); print("Student Roll Number is : ${stdRoll_nu}"); } } void main () { var std = new Student(); std.stdName = "Peter"; std.stdAge =24; std.stdRoll_nu = 90001; std.showStdInfo(); }
في هذا الكود قمنا بإستدعاء التابع في الكلاس و عرض معلومات الطالب.
مثال على إنشاء كلاس بسيط:
class Person { String name; int age; Person(this.name, this.age); void printDetails() { print('Name: $name, Age: $age'); } } void main() { var person = Person('John', 30); person.printDetails(); }
مثال على إرث الكلاسات (Inheritance):
class Shape { void draw() { print('Drawing a shape'); } } class Circle extends Shape { void draw() { print('Drawing a circle'); } } void main() { var shape = Shape(); shape.draw(); // Output: Drawing a shape var circle = Circle(); circle.draw(); // Output: Drawing a circle }
مثال على استخدام الكلاسات الاستاتيكية (Static Classes):
class MathUtils { static double add(double a, double b) { return a + b; } static double subtract(double a, double b) { return a - b; } } void main() { var sum = MathUtils.add(5, 3); var difference = MathUtils.subtract(10, 7); print('Sum: $sum'); // Output: Sum: 8 print('Difference: $difference'); // Output: Difference: 3 }
مثال على استخدام الكلاسات الاستاتيكية (Static Classes) والثوابت (Constants):
class Constants { static const double pi = 3.14159; static const int maxLoginAttempts = 3; } void main() { print('PI: ${Constants.pi}'); // Output: PI: 3.14159 print('Max login attempts: ${Constants.maxLoginAttempts}'); // Output: Max login attempts: 3 }
إضافة وظائف أخرى إلى الكلاس
يمكنك إضافة وظائف أخرى إلى الكلاس. في لغات البرمجة التي تدعم الكلاسات، يمكنك تعريف وإضافة وظائف جديدة إلى الكلاس بواسطة الكلمة المفتاحية “def” وتعريف اسم الوظيفة ومتابعتها بالمعاملات التي تحتاجها الوظيفة. هذا يتيح لك توسيع سلوك الكلاس وإضافة وظائف إضافية لتنفيذ وظائف مختلفة.
على سبيل المثال، إذا كان لديك كلاس يُدعى “Person” يحتوي على وظائف “set_name” و “get_name” لتعيين والحصول على اسم الشخص، يمكنك إضافة وظيفة جديدة مثل “greet” لتحية الشخص. يمكن تعريف الوظيفة “greet” كما يلي:
class Person: def __init__(self, name): self.name = name def set_name(self, name): self.name = name def get_name(self): return self.name def greet(self): print("Hello, my name is", self.name)
بعد إضافة الوظيفة “greet”، يمكنك استخدامها على الكائنات المنشأة من الكلاس “Person” بنفس الطريقة التي تستخدم بها الوظائف الأخرى. على سبيل المثال:
person = Person("John") person.greet() # ستقوم هذه الوظيفة بطباعة "Hello, my name is John"
باستخدام هذا الأسلوب، يمكنك إضافة وظائف إضافية للكلاس حسب احتياجاتك وتوسيع قدراته بدون الحاجة إلى تعديل الكود الموجود بأماكن أخرى في البرنامج.
تعديل وظيفة موجودة في الكلاس
يمكنك تعديل وظيفة موجودة في الكلاس إذا كنت تمتلك صلاحية الوصول والتعديل على الكود المصدر. إليك خطوات عامة يمكنك اتباعها:
- افتح الملف الذي يحتوي على الكلاس في محرر النصوص الخاص بك.
- انتقِ الوظيفة التي ترغب في تعديلها.
- قم بتعديل الكود الخاص بالوظيفة وفقًا لاحتياجاتك. يمكنك إضافة وحذف الأوامر وتغيير السلوك والمنطق الداخلي للوظيفة.
- احفظ التغييرات في الملف.
من الجدير بالذكر أنه يجب أن تكون حذرًا عند تعديل الوظائف الموجودة في الكلاس، حيث أن أي تغيير قد يؤثر على سلوك الكود الأصلي وربما يؤدي إلى حدوث أخطاء أو تأثيرات غير متوقعة في البرنامج الذي يستخدم الكلاس. لذا، يفضل أن تقوم بعمل نسخة احتياطية من الملف قبل إجراء أي تعديلات، واختبار الكود بعد التعديلات للتأكد من صحة وسلامة النتائج المتوقعة.
لمشاهدة فيديو هذا الدرس لفهمه أكثر