فقط أريد من الزملاء اذا احد عنده مقدمة تعريفية عامة باللغة العربيه عن سي شارب وامكاناتها (باختصار اريد وضعها في اطروحة مشروع التخرج)
ولكم خالص التقدير....
فقط أريد من الزملاء اذا احد عنده مقدمة تعريفية عامة باللغة العربيه عن سي شارب وامكاناتها (باختصار اريد وضعها في اطروحة مشروع التخرج)
ولكم خالص التقدير....
منقول من c4arab
بسم الله الرحمن الرحيم
مقدمة عن C #
::مفاهيم وأساسيات::
بما أن C# تم إنشائها خصيصاً لتمثل إحدى لغات الـ .NET فسنحتاج لمعرفة ماهية .NET أولاً.
ماهي الـ .NET؟
كثيراً ما يتردد على مسامعنا كلمة .NET سواء في الإنترنت أو الصحف والمجلات التقنية أو حتى في الجامعات! فما هي الـ.NET ؟
هل هو برنامج ضخم يتم شراءه؟ أم لغة برمجة؟ أم خدمة يتم الاشتراك بها؟!
الهدف الذي أرادات شركة مايكروسوفت تحقيقه من وراء الـ .NET هو أن تجعل أجهزة الكومبيوتر و برامجه و الأجهزة الأخرى كالطابعات والماسحات الضوئية ومواقع الويب تعمل معاً وتوفر للمستخدم حلولاً أقوى لمشكلاته، بدلاً من أن تتصل هذه الأجهزة و البرامج بالإنترنت بشكل منفصل.
فالـ .NET عبارة عن مجموعة من تقنيات برمجية تمثل البنية التحتية والتي تسمى بـ .NET FRAMEWORK والتي تجعل المعلومات، المستخدمين، التطبيقات، ومختلف الأجهزة، والأنظمة تتصل ببعضها البعض من خلال ما يسمى بخدمات الويبweb services.
Web Services:
هي عبارة عن برامج يتم وضعها على الجهاز الخادم server لتعمل من خلال الإنترنت، هذه البرامج تم بناءها بواسطة لغة XML لتسمح لمختلف التطبيقات بتبادل المعلومات بغض النظر عن اللغة التي كُتبت بها هذه التطبيقات، أو أي نظام تشغيل تعمل عليه، أو حتى نوعية الأجهزة التي توجد عليها هذه التطبيقات.

هذه الصورة مأخوذة من موقع مايكروسوفت
.NET FRAMEWORK:
يحتوي على مكتبة .NET وهذه المكتبة عبارة عن أكواد جاهزة مصنفة تصنيفات مختلفة فبعضها خاص ببرمجة الشبكات وبعضها خاص ببرمجة تطبيقات الويندوز، والبعض الآخر مختص ببرمجة مواقع الويب.
ويحتوي الـ .NET FRAMEWORK أيضاً على ما يسمى بـ Common Type System(CTS) وهي عبارة عن الأنواع المتاحة للغات الـ .NET لتمثيل البيانات في ذاكرة الكومبيوتر.
ويحتوي هذا الـ FRAMEWORK أيضاً على Common Language Runtime(CLR) وهو عبارة عن محرك يقوم بتنفيذ جميع البرامج المكتوبة بأحد لغات .NET
لغات .NET:
§ Visual basic.net
§ Visual C#.net
§ Visual c++.net
§ Visual j#.net
§ Jscript.net
§ Cobol.net
§ Perl.net
§ Eiffel.net
§ Python.net
§ Pascal.net
§ Mercury.net
§ Mondrian.net
§ Oberon.net
§ Salford FTN95.net
C#:
C# كما ذكرنا في البداية أنها إحدى لغات .NET من إنتاج شركة مايكروسوفت، وتنطق "سي شارب".
تم إنشائها بواسطة فريق عمل بقيادة أندرس هيجلزبرج، وقدر ركز هذا الفريق في بناء هذه اللغة على نقاط القوة في اللغات الأخرى وتجنب نقاط الضعف فيها بالإضافة إلى بعض المميزات الجديدة التي أضيفت إلى هذه اللغة! لذلك فهي تتميز بالقوة والمرونة، وكباقي لغات .NET فيمكن استخدامها لإنشاء تطبيقات الويندوز، وتطبيقات الويب و أجهزة الترجمة و غيرها. وتعتمد البرمجة بسي شارب على مفهوم البرمجة باستخدام الكائنات بصورة كاملة!
::نقاط مهمة في C#::
كل لغة برمجة لها بعض القيود أو دعنا نسميها أساليب لكتابة البرامج بها. و لهذا فنحن بحاجة لوضع هذه النقاط في الاعتبار عند البرمجة، حتى لا نقع في أخطاء بسيطة قد تعطل عملنا حتى نكتشفها!!
عند كتابة برامج C# نأخذ في الاعتبار أن :
§ لغة C# لغة حساسة لحالة الأحرف، أي أن الكلمة Console تختلف عن الكلمة console.
§ يجب أن ينتهي كل سطر برمجي بعلامة الفاصلة المنقوطة (;).
§ لإضافة تعليقات للكود نستخدم الرمز // لإضافة تعليقات في سطر واحد، بينما نستخدم الرمز /* */ ونضع التعليقات بينهما لإضافة تعليقات في أكثر من سطر. مثال:
//this line to display a welcome message on the screen
Console.WriteLine("welcome to the first C# Program");
§ عند تنفيذ برامج C# فإنه يتم تجاهل المسافات البيضاء. و المسافات البيضاء هي الأسطر الفارغة التي قد نستخدمها في تنسيق شكل البرنامج لتسهل قراءته !
أنواع البرامج في C#:
قبل أن ننتقل لنتعرف بشكل أعمق على C#، يهمني أن تعرف أنواع البرامج التي يمكن برمجتها مستخدماً C#، حيث سنتعرض لهذه الأنواع خلال الدروس القادمة بإذن الله:
§ برامج نصية: وهي البرامج التي تعرض نتائجها في صورة نصية على سطر الأوامر (الدوس) تماماً كما في المثال السابق.
§ برامج الويندوز: هي برامج ذات واجهة رسومية، كما في العديد من البرامج التي تستخدمها كبرنامج وورد مثلاً.
§ خدمات الويب: هي برامج يمكن استدعاؤها عبر الويب. مثل MSN Messenger للمراسلة الفورية عبر الإنترنت.
§ نماذج ويب: وهي صفحات ويب يتم معالجتها على الجهاز الخادم.
بسم الله الرحمن الرحيم
مفاهيم البرمجة غرضيّة التوجه OOP Concepts:
كما تعلم أن لغة السي شارب لغة غرضية التوجّة، سنتحدث في بداية هذه الدورة بمقدمة عن البرمجة الغرضيّة التوجه OOP - Object Oriented Programming بشكل مختصر بإذن الله...
ما هو الكائن:
لعل كل ما نراه في حياتنا اليومية من بشر وفواكه وحيوانات ووو هو كائن "object".... , لو نظرنا لفئة الحيوانات مثلا فالأسد والنمر والغزال والأرنب كلٌ منهم يمثل كائناً مستقلا بذاته, و له خصائص تميزه عن الآخر , ويقوم بسلوكيات ووظائف .
إذن لكل كائن خصائص يتميّز بها و سلوكيات يقوم بها ومن هذه السلوكيات تنتج أحداث، وبهذه الثلاث عوامل يتميز كل كائن عما سواه:
وكل كائن ( object ) ينتمي لفئة أعلى منه (class) فمثلا الفراولة هو كائن وهو ينتمي لفئة الفواكه, الأسد هو كائن وينتمي لفئة الحيوانات, السيارة والطائرة والسفينة هي كائنات وهي تنتمي للفئة التي هي وسائل النقل . وهكذا ...
فبينما كانت برامج السي هي عبارة عن مجموعة من الدوال functions, فإن برامج السي شارب هي مجموعة من الـclasses سواء كانت من صنع المبرمج (user defined) أو classes جاهزة في اللغة (built-in) , وهذه الـclasses بدورها تحتوي بداخلها على مجموعة من الدوال (methods) التي تؤدي الوظائف المعينة, و المتغيرات (Variables) التي تحمل Data، كما تحوي مجموعة من الأحداث! ويعرف هؤلاء الثلاثة (variables, methods, and events) بالأعضاء members.
Information Hiding:
لنأخذ مثال السيارة على أنها كائن object , سائق السيارة ليس من الضروري أن يعرف كيف تم صناعة العجلات أو محرك السيارة أو أو أو , ولكن المهم في الموضوع أن يعرف السائق كيف يستطيع استخدام هذه السيارة .
وكذلك أي كائن في السي شارب ليس من الضروري أن تعرف كيف تم عمله (implementing) أو البيانات الخاصة به, بل كل ما عليك هو معرفة كيفية استخدامه.
تذكر عندما تكتب برامجك في المستقبل أن تجعل هناك بيانات خاصة بالكائن لا تستطيع الكائنات الأخرى الاطلاع عليها وهذا ما يعرف بمفهوم الـ "information Hiding " وغالبا ما تكون الـData والتي تمثل بواسطة variables هي المخفية في البرنامج أي نعرفها بـprivate, بينما الدوال (methods) هي العامة أي تعرف كـ public لكي يتمكن المبرمج من استخدامها وإن خفي عليه كيفية تمثيلها!
مفهوم الـ namespaces أو فضاء الأسماء :
من المؤكد أنك لاحظت وجود السطر التالي عند إنشاء أي برنامج بالسي شارب :
using system ;
والتي يتم إنتاجها مباشرة من قبل الـ visual studio تدل على أن البرنامج الحالي يستخدم جميع الخصائص التي توجد بداخل الـSystem namespace , ومن أعظم نقاط القوة في هذه اللغة هي أنها توفر العديد من الـ namespaces والتي تحوي بداخلها على الأكواد الجاهزة التي لا يلزم المبرمج سوى استدعاء مثل هذه الملفات واستخدامها مباشرة "دون الحاجة لإعادة تصنيع العجلة !!!" .
أي شيء في السي شارب يكون داخل class, وأي class لابد أن يكون بداخل namespace (بالضبط مثل الملف داخل المجلد).
وتستطيع الوصول لأي class داخل namespace معين عن طريق الـ( . ) "dot qualifier " ..
/* لا تنزعج إذا رأيت الأمور ليست واضحة تماما لأنها ستتضح لك أكثر مع مرور الوقت وكتابة البرامج إن شاء الله. */
كيفية إنشاء class ثم كائن منه "object" :
كما أنه في حياتنا الواقعية كل كائن يرث جميع خصائص الـ class الذي ينتمي إليه فإننا سنتعلم في السي شارب كيف نشتق كائن من class ليمثل هذه الفئة و يرث جميع صفاتها و خصائصها .
• لو قمنا بإنشاء console Application كالتالي فإننا سنلاحظ أن تولدت لدينا بعض الأسطر مباشرةً:
نلاحظ أنه على الأقل لا بد من وجود class واحد في البرنامج, ويمكن أن يكون أكثر من ذلك ..
يبدأ تعريف أي class بكتابة الكلمة المحجوزة class ويليها اسم هذا الكلاس و الاسم سيكون اختياري بالطبع ويخضع لشروط اختيار أسماء المتغيرات Variables والتي تعرفها بالتأكيد كأن لا يبدأ الاسم برقم ولا يحتوي على رموز ...... ألخ!
لابد عندما تريد إنشاء هذه الفئة class فإنك تفكر في أن تشتق منها كائنات تنتمي لهذه الفئة وترث منها جميع صفاتها أليس كذلك ؟....
لنقوم الآن بكتابة برنامج بسيط وننشئ فيه class ومن ثم نشتق كائنا من هذا الـ class و سنرى كيف يمكن لهذا الكائن أن يصل لأي دالة من دوال الكلاس.
أنشأنا (two classes (Class1 & Class2..
Class1 :
يحوي الدالة Main والتي تعتبر نقطة بداية تنفيذ البرنامج بالتالي سنخصص هذا الكلاس لإنشاء ممثل (كائن) من الكلاس Class2.
Class2 :
السطر(7): عرفنا المتغير( i ), و هنا أشير إلى أن المتغيرات التي يتم تعريفها داخل الـ class وليس بداخل دالة من دوالها مثل المتغير " i " هنا, تسمى instance variable
و الكلمة المفتاحية private والتي تسبق تعريف هذا المتغير تسمى Access modifier , بحيث أن المتغيرات و الدوال التي يتم تعريفها بواسطة private يمكن الوصول إليها فقط من داخل الكلاس الحالي وهذا يعرف بمفهوم الـ data hiding , بينما أن المتغيرات والدوال التي يتم تعريفها بواسطة public يمكن الوصول إليها من داخل و خارج الكلاس الحالي .
و لتعلم أنه أي instance variable or method يجب أن يكتب لها أي نوع من الـ access modifiers .
في الأسطر (10 - 13) عرفنا الـ Constructor للـ Class2 , وهنا قد تتساءل ما هو الـConstructor وما هي صفاته؟!!
الـ constructor مصطلح من مصلحات الـOOP ويعني المنشئ، نقصد بهذا المكان الذي ينشأ منه الكائن.
وهو كأي دالة ممكن أن يكون له Argument أي بارميتر مرسله له. كما لابد من أن يأخذ دائما نفس اسم الكلاس ويعرف بأنه Public دائما.
عندما نقوم بإنشاء object من الكلاس class2 بواسطة الكلمة new كما سنرى فيما بعد فإن الـ constructor يتم استدعائه مباشرة . الفرق الجوهري بين الـ constructor والدوال الأخرى هو أن الـ constructor لا يمكنها أن تعود بقيمة.
بداخلها وضعنا جملة طباعة عادية لنرى متى يتم طباعة هذه الجملة والتي منها سنعرف الوقت الذي يتم فيه مناداة الـ Constructor .
في الأسطر(15 -17) عرفنا الدالة Class2Method و وظيفة هذه الدالة هي أيضا جملة طباعة.
انتهينا الآن من توصيف الكود، فلننتقل إلى كيفية تفاعله مع بعضه البعض:
في الـ Class1 :
سنقوم بإنشاء كائن من الكلاس Class2 .
كما في السطر (26) بدأنا بكتابة اسم الكلاس الذي نريد إنشاء الـ object منه ثم اسم الكائن وهو اختياري أسميناه هنا Class2Object ثم new وهي كلمة مفتاحية بمجرد كتابتها يقوم الكومبايلر بحجز مكان في الذاكرة لهذا الكائن ثم مباشرة يقوم بنداء الـ constructor للكلاس Class2 .وبانتهاء هذا السطر نكون قد أنشأنا الكائن Class2Object من الكلاس السابق وما علينا هو فقط استخدامه، كيف يتم استخدامه؟ هذا ما ستعرفه في الأسطر التالية!!
في السطر (27 ) :
الآن بكتابة اسم الكائن متبوعا بـ ( . ) "the member access operator" نستطيع الوصول لأي دالة أو أي متغير من الكلاس Class2 شرط أن يسمح لنا بالوصول إليه و هو في حالتنا هنا Class2Method .
ويمكن أن نعمم هذا الميكانزم بواسطة المعادلة التاليةـ:
referenceName . memberName
كما كتباناها:
()Class2Object . Class2Method
و لو قمنا بتشغيل البرنامج ستكون المخرجات كالتالي:
كما رأيت: تم تنفيذ الـConstructor حينما أنشأنا الكائن أولاً ثم تم تنفيذ الدالة التي قمنا بمناداتها Class2Method ..
وأخيراً ومن هنا نستنتج دورة حياة الكائن :
وبذلك نكون قد استعرضنا بعض المفاهيم الأساسية في الـ OOP.
Success Is A Journey Not A Destination
ألف شكر اخي الكريم
هذا الموضوع مغلق.