مضى على الشبكة و يوم من العطاء.

البرمجة الكائنية class (oop)

Sadell_AliSadell_Ali is verified member.

الرقابة والتنظيم
.:: الرقابة والتنظيم ::.
.:: طاقم المشرفين ::.

السمعة:

بعد أن تطرقنا في الدرس السابق إلى مفهوم ال struct سنقوم في هذا الدرس بالتحدث عن مفهوم ال class وبإذن الله بعد معرفة مفهوم ال class سيتم وضع أمثلة أكثر لتوضيح وتبسيط كيفية عملهم فلِنبدأ

class : عبارة عن نوع جديد يتم تعريفه بواسطة الكلمة class و هذا النوع يمكنه أن يحتوي على دوال, متغيرات, مصفوفات إلا أن
النوع الذي تقوم بتعريفه بواسطة الكلمة
class يشبه بشكل كبير النوع الذي تقوم بتعريفه بواسطة الكلمة struct التي تعرفنا عليها في السابق
لهذا السبب سنبدأ بذكر الفرق بينهما حتى لا يختلط عليك التعامل بينهما من شدة التشابه الموجود بينهما.

الفرق الأساسي بين النوع الذي يتم تعريفه بواسطة الكلمة class و النوع الذي يتم تعريفه بواسطة الكلمة struct
هو أن ال struct يمكن الوصول لأي شيء موجود فيه بشكل مباشر, بينما في النوع class أنت من تحدد ما إن كان يمكن الوصول للأشياء التي تضعها فيه بشكل مباشر أم لا.

تعريف ال class :
لتعريف ال class نكتب الكلمة class ثم نعطيه إسم, ثم نفتح أقواس تحدد بدايته و نهايته
مثال بسيط =>

C++:
class Book {
    // هنا يمكنك تعريف كل ما سيحتويه الكلاس
}
إلا أن الخصائص المبنية أو الموجودة داخل ال class يجب أن تحدد كيفية الوصول لها
فالخصائص ( Attributes ) : هي الأشياء (المتغيرات, المصفوفات و الكائنات) التي يتم تعريفها بداخل الكلاس و التي سيملك أي كائن(object) ننشئه منه نسخة خاصة منها .
ويتم تحديد الوصول للخصائص عن طريق استخدام الكلمات المخصصة لذلك و التي يقال لها (Access Specifiers)
public : تستخدم لتحديد أن الأشياء الموضوعة في الكلاس يمكن الوصول لها من أي مكان
private: تستخدم لتحديد أن الأشياء الموضوعة في الكلاس لا يمكن الوصول لها من خارجه
protected : تستخدم لتحديد أن الأشياء الموضوعة في الكلاس لا يمكن الوصول لها من خارجه "سيتم شرحها في المرات القادمة بإذن الله"
سنضع مثال الأن سيوضح طريقة وضع الكلمات
public و private و protected في الكلاس
كود:
class Book {
 
    public:
        // public هنا أي شيء نقوم بتعريفه يعتبر أنه
 
    private:
        // private هنا أي شيء نقوم بتعريفه يعتبر أنه
 
    protected:
        // protected هنا أي شيء نقوم بتعريفه يعتبر أنه
 
};

مثال
كود:
class Book {
 
    public:
        string title;
        string author;
        double price;
        int numberOfPages;
 
};
في هذا المثال قمنا بتعريف class يسمى Book
وقمنا بتعريف 4 متغيرات حددنا طريقة الوصول لها فكانت طريقة الوصول لها public
إي انه يمكن الوصول لها من أي مكان .
معلومة => نستطيع تحديد طريقة الوصول الى البيانات الموجودة في الكلاس (إي ان نحدد اذا كنا نريد البيانات أن تكون public أو private
أو أن تكون بعض البيانات نوعها public والأخر private ) ونستطيع عدم تحديد طريقة وصول البيانات الا أنه ستكون نوع البيانات الموجودة في الكلاس هي private تلقائيا

والآن سنتعرف على كيفية إنشاء كائن من كلاس وإعطائه قيم
طريقة إنشاء كائن من كلاس هي نفسها طريقة إنشاء كائن من ال struct 😁
و بالنسبة للوصول للأشياء التي يملكها الكائن, فيمكنك الوصول لأي شيء موجود فيه طالما أن نوعه public من خلال كتابة إسم الكائن ثم وضع نقطة ثم وضع إسم الشيء الذي تريد الوصول إليه
مثال على ذلك =>
كود:
#include <iostream>
using namespace std;
// يحتوي على 4 متغيرات Book هنا قمنا بتعريف كلاس إسمه
class Book {
 
    public:
        string title;
        string author;
        double price;
        int numberOfPages;
};
int main()
{
    // book2 و الثاني إسمه book1 الأول إسمه ,Book هنا قمنا بتعريف كائنين من
    Book book1;
    Book book2;
    // book1 هنا قمنا بإعطاء قيم لمتغيرات الكائن
    book1.title = "C++ for beginners";
    book1.author = "Mhamad Harmush";
    book1.price = 9.99;
    book1.numberOfPages = 420;
    // book2 هنا قمنا بإعطاء قيم لمتغيرات الكائن
    book2.title = "Network 1";
    book2.author = "Nadine Masri";
    book2.price = 22.49;
    book2.numberOfPages = 310;
    // book1 هنا قمنا بعرض قيم الكائن
    cout << "Book 1 ----------- \n";
    cout << "Title: " << book1.title << "\n";
    cout << "Author: " << book1.author << "\n";
    cout << "Price: " << book1.price << "$\n";
    cout << "Number of pages: " << book1.numberOfPages << "\n\n";
    // book2 هنا قمنا بعرض قيم الكائن
    cout << "Book 2 ----------- \n";
    cout << "Title: " << book2.title << "\n";
    cout << "Author: " << book2.author << "\n";
    cout << "Price: " << book2.price << "$\n";
    cout << "Number of pages: " << book2.numberOfPages;
    return 0;
}
في هذا المثال قمنا بتعريف 4 متغيرات نوعهم public (أي أننا نستطيع الوصول لهم عن طريق
وضع اسم الكلاس وهو "Book" وبعدها نضع نقطة ثم نضع المتغير المراد الوصول إليه ) وبعدها قمنا بإنشاء كائنين من الكلاس "book1" و "book2"
وبالأخير قمنا بإعطاء قيم لمتغيرات الكائن الاول والثاني فكانت النتيجة 👇
كود:
Book 1 -----------
Title: C++ for beginners
Author: Mhamad Harmush
Price: 9.99$
Number of pages: 420
Book 2 -----------
Title: Network 1
Author: Nadine Masri
Price: 22.49$
Number of pages: 310
مثال "تعريف دالة بداخل كلاس "
كود:
#include <iostream>
using namespace std;
// يحتوي على 4 متغيرات Book هنا قمنا بتعريف كلاس إسمه
class Book {
public:
    string title;
    string author;
    double price;
    int numberOfPages;
    // تقوم بطباعة كل قيم المتغيرات الموجودة فيه Book عند استدعاءها من أي كائن ننشئه من printInfo هنا قمنا بتعريف دالة إسمها
    void printInfo()
    {
        cout << "Title: " << title << "\n";
        cout << "Author: " << author << "\n";
        cout << "Price: " << price << "$\n";
        cout << "Number of pages: " << numberOfPages << "\n";
    }
};
// main() هنا قمنا بتعريف الدالة
int main()
{
    // book إسمه Book هنا قمنا بتعريف كائن من
    Book book;
    // book هنا قمنا بإعطاء قيم لمتغيرات الكائن
    book.title = "C++ for beginners";
    book.author = "Mhamad Harmush";
    book.price = 9.99;
    book.numberOfPages = 420;
 
    // حتى تقوم بطباعة القيم الموجودة فيه book من الكائن printInfo() هنا قمنا باستدعاء الدالة
    book.printInfo();
    return 0;
}
في المثال التالي, قمنا بتعريف كلاس إسمه Book يمثل المعلومات التي يمكن أن يتضمنها أي كتاب كعنوانه, إسم المؤلف, سعره و عدد صفحاته.
كما أننا قمنا بوضع دالة إسمها printInfo بداخل الكلاس عند استدعاءها من أي كائن ننشئه منه فتقوم بطباعة قيمه بشكل مرتب.
في الأخير قمنا بإنشاء كائن من Book و إعطاؤه قيم, و من ثم إستدعاء الدالة printInfo() منه حتى تقوم بطباعة قيمه فكانت النتيجة هي
كود:
Title: C++ for beginners
Author: Mhamad Harmush
Price: 9.99$
Number of pages: 420
أما في هذا المثال
سنقوم ببناء شكل الدالة داخل الكلاس و محتواها خارج الكلاس ويكون ذلك
بكتابة نوع البيانات التي ستقوم الدالة بإرجاعه، ثم كتابة اسم الكلاس ثم وضع :: وأخر أمر نكتب أسم الدالة ()
كود:
#include <iostream>
using namespace std;
// يحتوي على 4 متغيرات Book هنا قمنا بتعريف كلاس إسمه
class Book {
public:
    string title;
    string author;
    double price;
    int numberOfPages;
    // printInfo() هنا قمنا بتعريف شكل الدالة
    void printInfo();
};
// و جعلناها تقوم بطباعة قيم متغيرات الكائن الذي يستدعيها Book الموجودة في الكلاس printInfo هنا قمنا بتعريف محتوى الدالة
void Book::printInfo()
{
    cout << "Title: " << title << "\n";
    cout << "Author: " << author << "\n";
    cout << "Price: " << price << "$\n";
    cout << "Number of pages: " << numberOfPages << "\n";
}
// main() هنا قمنا بتعريف الدالة
int main()
{
    // book إسمه Book هنا قمنا بتعريف كائن من
    Book book;
    // book هنا قمنا بإعطاء قيم لمتغيرات الكائن
    book.title = "C++ for beginners";
    book.author = "Mhamad Harmush";
    book.price = 9.99;
    book.numberOfPages = 420;
 
    // حتى تقوم بطباعة القيم الموجودة فيه book من الكائن printInfo() هنا قمنا باستدعاء الدالة
    book.printInfo();
    return 0;
}
فكانت النتيجة لهذا المثال
كود:
Title: C++ for beginners
Author: Mhamad Harmush
Price: 9.99$
Number of pages: 420

اذًا نستطيع تعريف الدالة داخل الكلاس بطريقتين:✌️
  • تعريف الدالة كما هي بداخل الكلاس

  • تعريف شكل الدالة ( Function Header أو Prototype ) فقط بداخل الكلاس و تعريف محتوى الدالة ( Function Body ) خارج تعريف الكلاس
سيتم إعطاء أمثلة أكثر عن ال (structs و classes) في المرة القادمة لمعرفة أفكار جديدة بإذن الله 🤍

🌸يعطيكم العافية 🌸

دروس البرمجة الكائنية
 
التعديل الأخير بواسطة المشرف:
بعد أن تطرقنا في الدرس السابق إلى مفهوم ال struct سنقوم في هذا الدرس بالتحدث عن مفهوم ال class وبإذن الله بعد معرفة مفهوم ال class سيتم وضع أمثلة أكثر لتوضيح وتبسيط كيفية عملهم فلِنبدأ

class : عبارة عن نوع جديد يتم تعريفه بواسطة الكلمة class و هذا النوع يمكنه أن يحتوي على دوال, متغيرات, مصفوفات إلا أن
النوع الذي تقوم بتعريفه بواسطة الكلمة
class يشبه بشكل كبير النوع الذي تقوم بتعريفه بواسطة الكلمة struct التي تعرفنا عليها في السابق
لهذا السبب سنبدأ بذكر الفرق بينهما حتى لا يختلط عليك التعامل بينهما من شدة التشابه الموجود بينهما.

الفرق الأساسي بين النوع الذي يتم تعريفه بواسطة الكلمة class و النوع الذي يتم تعريفه بواسطة الكلمة struct
هو أن ال struct يمكن الوصول لأي شيء موجود فيه بشكل مباشر, بينما في النوع class أنت من تحدد ما إن كان يمكن الوصول للأشياء التي تضعها فيه بشكل مباشر أم لا.

تعريف ال class :
لتعريف ال class نكتب الكلمة class ثم نعطيه إسم, ثم نفتح أقواس تحدد بدايته و نهايته
مثال بسيط =>

[CODE highlight="1"]class Book {
// هنا يمكنك تعريف كل ما سيحتويه الكلاس
};[/CODE]
إلا أن الخصائص المبنية أو الموجودة داخل ال class يجب أن تحدد كيفية الوصول لها
فالخصائص ( Attributes ) : هي الأشياء (المتغيرات, المصفوفات و الكائنات) التي يتم تعريفها بداخل الكلاس و التي سيملك أي كائن(object) ننشئه منه نسخة خاصة منها .
ويتم تحديد الوصول للخصائص عن طريق استخدام الكلمات المخصصة لذلك و التي يقال لها (Access Specifiers)
public : تستخدم لتحديد أن الأشياء الموضوعة في الكلاس يمكن الوصول لها من أي مكان
private: تستخدم لتحديد أن الأشياء الموضوعة في الكلاس لا يمكن الوصول لها من خارجه
protected : تستخدم لتحديد أن الأشياء الموضوعة في الكلاس لا يمكن الوصول لها من خارجه "سيتم شرحها في المرات القادمة بإذن الله"
سنضع مثال الأن سيوضح طريقة وضع الكلمات
public و private و protected في الكلاس
كود:
class Book {
 
    public:
        // public هنا أي شيء نقوم بتعريفه يعتبر أنه
     
    private:
        // private هنا أي شيء نقوم بتعريفه يعتبر أنه
     
    protected:
        // protected هنا أي شيء نقوم بتعريفه يعتبر أنه
 
};

مثال
كود:
class Book {
 
    public:
        string title;
        string author;
        double price;
        int numberOfPages;
 
};
في هذا المثال قمنا بتعريف class يسمى Book
وقمنا بتعريف 4 متغيرات حددنا طريقة الوصول لها فكانت طريقة الوصول لها public
إي انه يمكن الوصول لها من أي مكان .
معلومة => نستطيع تحديد طريقة الوصول الى البيانات الموجودة في الكلاس (إي ان نحدد اذا كنا نريد البيانات أن تكون public أو private
أو أن تكون بعض البيانات نوعها public والأخر private ) ونستطيع عدم تحديد طريقة وصول البيانات الا أنه ستكون نوع البيانات الموجودة في الكلاس هي private تلقائيا

والآن سنتعرف على كيفية إنشاء كائن من كلاس وإعطائه قيم
طريقة إنشاء كائن من كلاس هي نفسها طريقة إنشاء كائن من ال struct 😁
و بالنسبة للوصول للأشياء التي يملكها الكائن, فيمكنك الوصول لأي شيء موجود فيه طالما أن نوعه public من خلال كتابة إسم الكائن ثم وضع نقطة ثم وضع إسم الشيء الذي تريد الوصول إليه
مثال على ذلك =>
كود:
#include <iostream>
using namespace std;
// يحتوي على 4 متغيرات Book هنا قمنا بتعريف كلاس إسمه
class Book {
 
    public:
        string title;
        string author;
        double price;
        int numberOfPages;
};
int main()
{
    // book2 و الثاني إسمه book1 الأول إسمه ,Book هنا قمنا بتعريف كائنين من
    Book book1;
    Book book2;
    // book1 هنا قمنا بإعطاء قيم لمتغيرات الكائن
    book1.title = "C++ for beginners";
    book1.author = "Mhamad Harmush";
    book1.price = 9.99;
    book1.numberOfPages = 420;
    // book2 هنا قمنا بإعطاء قيم لمتغيرات الكائن
    book2.title = "Network 1";
    book2.author = "Nadine Masri";
    book2.price = 22.49;
    book2.numberOfPages = 310;
    // book1 هنا قمنا بعرض قيم الكائن
    cout << "Book 1 ----------- \n";
    cout << "Title: " << book1.title << "\n";
    cout << "Author: " << book1.author << "\n";
    cout << "Price: " << book1.price << "$\n";
    cout << "Number of pages: " << book1.numberOfPages << "\n\n";
    // book2 هنا قمنا بعرض قيم الكائن
    cout << "Book 2 ----------- \n";
    cout << "Title: " << book2.title << "\n";
    cout << "Author: " << book2.author << "\n";
    cout << "Price: " << book2.price << "$\n";
    cout << "Number of pages: " << book2.numberOfPages;
    return 0;
}
في هذا المثال قمنا بتعريف 4 متغيرات نوعهم public (أي أننا نستطيع الوصول لهم عن طريق
وضع اسم الكلاس وهو "Book" وبعدها نضع نقطة ثم نضع المتغير المراد الوصول إليه ) وبعدها قمنا بإنشاء كائنين من الكلاس "book1" و "book2"
وبالأخير قمنا بإعطاء قيم لمتغيرات الكائن الاول والثاني فكانت النتيجة 👇
كود:
Book 1 -----------
Title: C++ for beginners
Author: Mhamad Harmush
Price: 9.99$
Number of pages: 420
Book 2 -----------
Title: Network 1
Author: Nadine Masri
Price: 22.49$
Number of pages: 310
مثال "تعريف دالة بداخل كلاس "
كود:
#include <iostream>
using namespace std;
// يحتوي على 4 متغيرات Book هنا قمنا بتعريف كلاس إسمه
class Book {
public:
    string title;
    string author;
    double price;
    int numberOfPages;
    // تقوم بطباعة كل قيم المتغيرات الموجودة فيه Book عند استدعاءها من أي كائن ننشئه من printInfo هنا قمنا بتعريف دالة إسمها
    void printInfo()
    {
        cout << "Title: " << title << "\n";
        cout << "Author: " << author << "\n";
        cout << "Price: " << price << "$\n";
        cout << "Number of pages: " << numberOfPages << "\n";
    }
};
// main() هنا قمنا بتعريف الدالة
int main()
{
    // book إسمه Book هنا قمنا بتعريف كائن من
    Book book;
    // book هنا قمنا بإعطاء قيم لمتغيرات الكائن
    book.title = "C++ for beginners";
    book.author = "Mhamad Harmush";
    book.price = 9.99;
    book.numberOfPages = 420;
 
    // حتى تقوم بطباعة القيم الموجودة فيه book من الكائن printInfo() هنا قمنا باستدعاء الدالة
    book.printInfo();
    return 0;
}
في المثال التالي, قمنا بتعريف كلاس إسمه Book يمثل المعلومات التي يمكن أن يتضمنها أي كتاب كعنوانه, إسم المؤلف, سعره و عدد صفحاته.
كما أننا قمنا بوضع دالة إسمها printInfo بداخل الكلاس عند استدعاءها من أي كائن ننشئه منه فتقوم بطباعة قيمه بشكل مرتب.
في الأخير قمنا بإنشاء كائن من Book و إعطاؤه قيم, و من ثم إستدعاء الدالة printInfo() منه حتى تقوم بطباعة قيمه فكانت النتيجة هي
كود:
Title: C++ for beginners
Author: Mhamad Harmush
Price: 9.99$
Number of pages: 420
أما في هذا المثال
سنقوم ببناء شكل الدالة داخل الكلاس و محتواها خارج الكلاس ويكون ذلك
بكتابة نوع البيانات التي ستقوم الدالة بإرجاعه، ثم كتابة اسم الكلاس ثم وضع :: وأخر أمر نكتب أسم الدالة ()
كود:
#include <iostream>
using namespace std;
// يحتوي على 4 متغيرات Book هنا قمنا بتعريف كلاس إسمه
class Book {
public:
    string title;
    string author;
    double price;
    int numberOfPages;
    // printInfo() هنا قمنا بتعريف شكل الدالة
    void printInfo();
};
// و جعلناها تقوم بطباعة قيم متغيرات الكائن الذي يستدعيها Book الموجودة في الكلاس printInfo هنا قمنا بتعريف محتوى الدالة
void Book::printInfo()
{
    cout << "Title: " << title << "\n";
    cout << "Author: " << author << "\n";
    cout << "Price: " << price << "$\n";
    cout << "Number of pages: " << numberOfPages << "\n";
}
// main() هنا قمنا بتعريف الدالة
int main()
{
    // book إسمه Book هنا قمنا بتعريف كائن من
    Book book;
    // book هنا قمنا بإعطاء قيم لمتغيرات الكائن
    book.title = "C++ for beginners";
    book.author = "Mhamad Harmush";
    book.price = 9.99;
    book.numberOfPages = 420;
 
    // حتى تقوم بطباعة القيم الموجودة فيه book من الكائن printInfo() هنا قمنا باستدعاء الدالة
    book.printInfo();
    return 0;
}
فكانت النتيجة لهذا المثال
كود:
Title: C++ for beginners
Author: Mhamad Harmush
Price: 9.99$
Number of pages: 420

اذًا نستطيع تعريف الدالة داخل الكلاس بطريقتين:✌️
  • تعريف الدالة كما هي بداخل الكلاس

  • تعريف شكل الدالة ( Function Header أو Prototype ) فقط بداخل الكلاس و تعريف محتوى الدالة ( Function Body ) خارج تعريف الكلاس
سيتم إعطاء أمثلة أكثر عن ال (structs و classes) في المرة القادمة لمعرفة أفكار جديدة بإذن الله 🤍

🌸يعطيكم العافية 🌸
يعطيكِ العافية سديل 🤍🤍
 
الله يعطيك العافيه وبارك الله بجهودك
ننتظر جديدك دائماً
 
عاشت إيدك يا سديل، أحسنتي (y)
 
يعطيكي العافية, مشكوره علي هذا الجهد الرائع وننتظر جديدك باذن الله 🔥
 

آخر المشاركات

عودة
أعلى