عبدالوهاب العليوي | Abdulwahab Al-Alawi
267 subscribers
58 photos
3 files
12 links
هنا نحكي عن البرمجة، التقنية، الأدوات، وأشياء تهم كل مبرمج بطريقة بسيطة وممتعة.
Download Telegram
كثيرٌ من الناس يعيشون في دوّامة الانشغال المستمر، لكنهم مع ذلك لا يشعرون أنهم يحققون تقدماً حقيقياً. والسبب في ذلك أنهم يخلطون بين الحركة والتقدّم.

ليس كل جهدٍ مبذول يؤدي إلى نتائج ملموسة، فقد نقضي ساعات طويلة في تصفح المعلومات دون أن نخرج بفكرة مفيدة، وقد ننشغل بالعمل ليلاً ونهاراً دون أن نحقق نقلة نوعية في حياتنا.

السر لا يكمن في كثرة الجهد، بل في حُسن توجيهه. التركيز على الأمور الجوهرية هو الذي يصنع الفارق، أما تشتيت الجهد في كل الاتجاهات، فإنه يؤدي في النهاية إلى الإرهاق دون جدوى.

د. عبدالكريم بكار

#نصائح
2
استخدام super مع override

class Animal {
public String sound() {
return "Generic animal sound";
}
}

class Dog extends Animal {
@Override
public String sound() {
return super.sound() + " + Bark";
}
}

public class Main {
public static void main(String[] args) {
Dog d = new Dog();
System.out.println(d.sound());
}
}
اختر الإجابة الصحيحة
public class Main {
public static void main(String[] args) {
int x = 5;
int y = 2;
System.out.println(x + y * x);
}
}
نحن المهندسون!
2
استخدام super للوصول لحقل الأب
class A {
int x = 5;
}
class B extends A {
int x = 10;
int get(){ return super.x; }
}
B b = new B();
System.out.println(b.get());
int[] arr = {2, 4, 6, 8};
int sum = 0;
for(int i = 0; i < arr.length; i += 2){
sum += arr[i];
}
System.out.println(sum);
من ابرز الكتب المشهوره في مجال OOP سنقوم ان شاء الله بتنزيل ملخص للكتاب بالغة العربية بشرح بسيط و جداً مفهوم

المحتوى منقول من صفحة المهندس المصري
abdulaziz aldeeb على فيسبوك
شاركوا رابط القناة لكي تعم الفائدة وجزاكم الله الف خير
2
عبدالوهاب العليوي | Abdulwahab Al-Alawi
Photo
اول منشور


هنبدأ نتكلم عن كتاب Object-Oriented Thought Process وإن شاء الله نحاول نلخص أهم الأفكار في الكتاب.

الكاتب بدأ الكتاب بحرفين بس وهما OO ومش OOP، وبالتالي في سبب
مهم للتسمية دي، وهو أنه بيقول إن أغلب الناس بتبدأ تتعلم الـOO وهي بتتعلم لغة البرمجة، مثلًا زي C++ أو C#، بحيث إنه دخل على طول في مفهوم الـOOP وهو بيتعلم لغة البرمجة كأنها جزء منها، ولكن الحقيقة إن الـOO ليها طريقة تفكير مختلفة تمامًا، وما ينفعش حد يتعلمها كأنها أداه أو جزء من لغة معينة. وعلشان كدا الكاتب بيقول إنك بمجرد ما تفهم الـOO هتفهم كويس كل المصطلحات التانية زي الـOOA والـOOD والـOOP.

الفرق بين الـOO والـProcedural: هنا الكاتب بيتكلم عن فرق قوي جدًا بين البرمجة الإجرائية وما بين الـOO. والفرق الجوهري ده في كلمة Both، أو كلاهما. والكلمة دي عائدة على الخصائص والسلوكيات، والمقصود هنا هو إن الـOO قدرت تجمعلك البيانات والوظائف في مكان واحد مقفول عليهم، وده بالظبط مفهوم الـEncapsulation، على عكس الـProcedural اللي عبارة عن سلوكيات (وظائف) منفصلة عن الخصائص أو الداتا. يعني ممكن الداتا تبقى في الـGlobal عادي خالص، وأي حد يقدر يوصلها وكمان يقدر يعدل عليها. وبالتالي مفيش تحكم في الداتا بتاعتي أصلًا لأنها متاحة لكل الوظائف.
وبالتالي المقصود بكلمة Both هنا معناه إن ال OO قدرت تجمعلك الأتنين مع بعض في نفس المكان والعملية دي بنقول عليها Encapsulation.

مفهوم الـEncapsulation: الكاتب عرف الـEncapsulation إنه عملية تجميع الخصائص والسلوكيات في مكان واحد، والحقيقة ده كلام مظبوط، ولكني عايزك تفرق ما بين التطبيق السليم والمظبوط للمفهوم وما بين المفهوم نفسه. يعني بكل بساطة أنا أقصد إن كل حاجة ليها طرق كتير جدًا علشان تتنفذ، يعني ممكن أقول أنا لما عملت تجميع للـAttributes والـMethods في مكان واحد وبكدا عملت Encapsulation. كلامك صح، بس هل دي أفضل Encapsulation ممكنة؟ وهنا بقى بيدخل معانا مفهوم جديد بيعزز الـEncapsulation ويخليه أقوى، والمفهوم ده هو الـData Hiding.

مفهوم الـData Hiding: إحنا قولنا إن بمجرد ما عملنا تجميع للخصائص (Fields) والسلوكيات (Methods) في مكان واحد وهو الـClass، وقولنا إن ده كدا اسمه Encapsulation، بس الحقيقة إن كل مفهوم ليه مستويات من القوة، وعلشان نوصل لقوة الـEncapsulation لازم نشرح مفهوم الـData Hiding، وهو بكل بساطة كدا بيقولك بما إنك جمعت السلوكيات (Methods) والخصائص (Attributes) في مكان واحد، بقيت قادر تمنع أو تسمح بالوصول لبعض الخصائص والسلوكيات.

ملحوظة: الكاتب بيقول إن مصطلح ال Object Data أو بيانات الكائن في سياق الـOOP بنقول عليها Attributes. والسلوكيات أو الوظائف بنقول عليها Methods. وبيقولك إن التحكم في الوصول لأي من الـMethods أو الـAttributes بنقول عليه Data Hiding.

يعني بكل بساطة كدا الـData Hiding مش بس تخص التحكم في الوصول للـ Attributes ، لكن بتتحكم في الوصول للـAttributes والـMethod مع بعض عن طريق ما يسمى بالـAccess Modifiers، ودي مسموح تستخدمها سواء مع الـAttributes أو مع الـMethod.

الـAccessors والـMutator: أحيانًا تسمى بالـSetters والـGetters. المفهوم ده بكل بساطة قدرنا نعمله بسبب وجود الـData Hiding. والفكرة كلها في الموضوع إنك بتمنع الوصول لل Attributes وبتخليها private وتسمح بالوصول ليها عن طريق وظائف public. والميزة دي قوية جدًا وبتعملك control قوي جداً على الداتا بتاعتك، وهنتكلم على الموضوع ده تاني بعدين. وعلشان أوضحلك جزء بسيط أوي من أهميتها خلينا نقول أنت عندك كلاس أسمه Date وجواه طبعاً Day و Month و Year لو أحنا مش عاملين الخصائص دي private وكان أي حد يقدر يعدل عليها ممكن يخليلك ال Month يبقي ب 13 مثلاً, وممكن يخليلك اليوم ب 32 مثلاً وده مش منطقي لأن أخر حاجه في الشهور 12 وأخر حاجه في عدد الأيام في الشهور هو 31 وكمان علي حسب الشهر. وبالتالي لما بتعمل Setter بشكل مظبوك بتقدر تحط لوجيك معين علشان يمنع أي تعديل مش مظبوط علي ال Object بتاعك.

كفايه لحد هنا علشان المنشور بقي طويل أوي, المره الجايه هنكمل كلامنا مع الفصل الأول.


صفحة المهندس على فيسبوك
Abdulaziz aldeeb

#ملخص #oop #شرح
2
عبدالوهاب العليوي | Abdulwahab Al-Alawi pinned «شاركوا رابط القناة لكي تعم الفائدة وجزاكم الله الف خير»
عبدالوهاب العليوي | Abdulwahab Al-Alawi
Photo
هنكمل كلامنا مع الفصل الأول من كتاب Object-Oriented Thought Process وهنتكلم عن مفهوم الـ Class والـ Object.
بص يا سيدي، في كلمة حلوة أوي اتقالت عن الـ Class في الكتاب وهي blueprint. لو بحثت عن الكلمة دي في جوجل، هتلاقي صور لمخططات بيوت أو مخططات سيارات، يعني رسومات هندسية بتوضح الشكل النهائي للبيت قبل البناء أو السيارة قبل التصنيع وهكذا. المهم، هو ده بالظبط بقى دور الـ Class.
دلوقتي، في سياق البرنامج بتاعك، لو قولتله: أعملي Object من نوع Car؟ هل هو عارف هيعمل كده إزاي؟ يعني مثلاً هيستنتج Car عشوائي، ولا هيروح يعمل Object فاضي، ولا هيعمل إيه بالظبط؟
الحقيقة هنا إنك طالما قولتله أعمل Object من نوع Car، يبقى لازم يكون عندك Class من نفس النوع اسمه Car، لأن الـ Class ده هو المكان الوحيد اللي فيه كلمة السر بتاعة إزاي هعملك الـ Car. يعني بكل بساطة، لو قولتلك: أعملي كيكة، وإنت ما بتعرفش تعمل كيكة، يبقى لازم على الأقل أديكلك ورقة فيها خطوات عمل الكيكة صح. ونفس العلاقة بالظبط بين الـ Object والـ Class. يعني لو قولتلك أعمل Object من نوع Car، يبقى لازم يكون عندك Class اسمه Car أروح أشوف إنت عايز الـ Car دي تبقى عاملة إزاي بالظبط، صح؟
والمثال بتاع الكاتب كان عن قوالب تشكيل الكعك والبسكويت، وقالك إن الـ Class هو المخطط اللي بيحدد شكل النتيجة النهائية المطلوبة. وبردو المهندس المدني بيصمم المبنى ويعمل مخطط قبل ما يعمل المبنى نفسه. وهنا بردو نفس العلاقة بين الـ Class، اللي هو بمثابة الـ blueprint، وبين المبنى الفعلي نفسه، اللي هو الـ Object.
يعني إنت بتحدد تفاصيل الـ Object، يبقى شكله إزاي بالظبط لما تعمل منه نسخة. يعني كل دور الـ Class إنه يبقى المخطط بتاعك، علشان لما تروح تقوله أعمل Object من الـ Car، يبقى عارف إنه هيروح يلاقي عندك Class اسمه Car، يقوم يشوف إنت قايله يعمل إيه بالظبط جوا الـ Class ده ويعمله.
يعني لو رجعنا لمثال الفرخة ولا البيضة، هتلاقي نفسك مش عارف تحدد مين الأول. لكن مع الـ Class والـ Object، دايمًا الـ Class بييجي قبل الـ Object. يعني إنت أصلاً مش هتعرف تعمل Object قبل ما تعمل الـ Class.
وكمان لو إنت فاهم Database كويس، ممكن تعتبر إن الـ Class هو شكل الجدول والأعمدة وأنواع البيانات لكل عمود في الجدول. أما الـ Object فهو الداتا نفسها بقى، أو الـ Row الفعلي في الجدول.
الحقيقة، بعد كده هتبقى المنشورات على قد المفهوم، لأن الصور مهمة جدًا جدًا، وما ينفعش ندخل المفاهيم في بعض ونتغاضى عن الصورة.

#oop #ملخص
2