What is Abstraction?

  • إظهار التفاصيل المهمة أو الضرورية لتشغيل الشيء، غير كدا كل التفاصيل بتكون مخفية من ال user

  • مثال في الحياة الوقعية: ال Coffee machine عشان تعمل قهوة كل اللي محتاج تعرفه انك بتحط ماية وشوية بن وبتدوس على الزرار وخلاص، بدون ما بتعرف درجة الحرارة المطلوبة عشان القهوة تتعمل او اي تفاصيل من دي

  • مثال آخر: هو العربية فمعظمنا ميعرفش العربية شغالة ازاي من جوا (ميكانيكيًا) بس عارفين ان فيه دواسة بنزين وفرامل وغيرها اللي بنتعامل معاها

  • نفس الفكرة المفروض نطبقها في البرنامج بتاعي وانا بتعامل مع الClasses

  • هو مشابه شوية للـEncapsulation ان الكلاس مش لازم تتعامل مع باقي الclasses وبتتعامل من خلال ال getter, setter

  • الفرق بينهم ان ال Abstraction هو المفهوم الأشمل والأكبر شوية والـEncapsulation بيساعده عشان المفهوم دا يكتمل في اني يبقا عندي حماية للداتا ومفهوم اني مش لازم ابقا عارف ايه الداتا اللي موجودة في باقي الـclasses

  • المفهوم دا بيبقا واضح اكتر لو شغالين على بروجكت كبير شوية وكل واحد مننا عنده تاسك على كلاس معين ففي الحالة دي الأفضل ان كل واحد يبقا شغال على الجزء بتاعه من غير ما يبقى مهموم بتفاصيل بتاع الأجزاء التانية بتشتغل ازاي؟

  • عشان أحقق دا لازم ابص لفكرة البرنامج بتاعي لحاجتين وهما ال Interface و Implementation


  • مثال الشطرنج: دلوقتي انا مبرمج شغال على كلاس الفيل وانت شغال على الملك فأنا مش محتاج أعرف الكود بتاع الملك عامل ازاي بس هحتاج أعرف الحاجات اللي الملك هيتعامل فيها مع الفيل، يعني هيتعامل معاه ازاي؟ يعني مثلًا لو الملك معمولة كش المفروض الفيل ميتحركش فأنا المفروض أخد get من الملك هل هو معمولة كش ولا لا؟ ودا التعامل بيبقا عن طريق ال interface، فانت كمبرمج للفيل مش محتاج تعرف ازاي عرفنا الملك مكشوش ولا لا، انت محتاج تعرف الحالة بس

  • جزء الInterface: الmethods اللي كل الclasses بتقدر تتعامل معاها عشان يقدروا يكلموا بعض جزء الImplementation: اللوجيك بتاع الكود مكتوب ازاي وتفاصيل الكود

  • الموضوع دا بيخلي كل جزء مستقل بذاته ومش معتمد على كلاس تاني

  • لو كله مرتبط ببعضه فدا بيعمل بيأثر بالسلب لو عملت أي تغيير صغير لأن دا بيعمل Ripple Effect

  • وجود Interface بيتيح للclasses انها تتكلم مع بعض وتتبادل المعلومات من خلاله بيأكدلي ان انا هعرف اشتغل عليه لوحده واغير فيه بدون التأثير على أي كلاس تاني

  • ال Abstraction بيمنع ان الدنيا تصبح معقدة وكمان لما بخبي تفاصيل أكتر في البرنامج وأظهر التفاصيل المهمة بيعلي ال Security factor

  • الفكرة بتخلي المبرمجين ياخدوا شوية أفكار Abstracted ويبنوا عليها أفكار أكثر تعقيد بدون ما يحتاجوا انهم يفهموا الحاجات القديمة دي شغاله ازاي من جوا، فمش ببدأ من تحت ودا بيدينا مساحة اننا نخترع أكتر ونطور أكتر

  • دا نفس الفكرة في أي Library الناس بتستخدمها اننا مش بنحتاج نفهم اللي فيها

Example of Abstraction

abstract class PaymentMethod 
{ 
	public abstract void ProcessPayment(decimal amount); 
} 
class CreditCardPayment : PaymentMethod 
{ 
	public override void ProcessPayment(decimal amount) 
	{ 
		Console.WriteLine($"Processing credit card payment of {amount}"); 
	} 
} 
class PayPalPayment : PaymentMethod 
{ 
	public override void ProcessPayment(decimal amount) 
	{ 
		Console.WriteLine($"Processing PayPal payment of {amount}"); 
	} 
} 
class FawryPayment : PaymentMethod 
{ 
	public override void ProcessPayment(decimal amount) 
	{ 
		Console.WriteLine($"Processing Fawry payment of {amount}"); 
	} 
}