الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال بسيط عن الabstract و ال interface

بدأه النمر الصغير في 27 ديسمبر 2011 · 11 رد · 1,907 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا طالب في الجامعه ، وهذه اول ماده بخصوص الجافا ...

وصلت الى الابستراكت والانترفيس وفاهم الفروقات وفاهم ان مينفعش نعمل اوبجكت من الانترفيس ولا الابستراكت وفاهم ان الابستراكت كلاس ولكن الانترفيس لا يعتبر كلاس واعرف كيفيه كتابه الميثود وطريقه كتابه الانترفيس والابستراكت وتعريفهم من خلال الهيدر ... الخ

لدي تعقيدة واحده مش فاهمها تماما ودورت في اكثر من منتدى ولم افهمها وتابعت كثير من ردودكم .. وهي :

فائدة الأبستراكت ( من الناحيه العقلية و المنطقيه ) وكذلك الانترفيس ...

عندما راجعت اكواد وبعض الردود ، وجدت انك بتعرف ميثود في الابستراكت وتعملها اوفررايدنج مره اخرى في كلاس اخر ( طيب ايه فائده الابستراكت مانا اعمل كلاس جديد واعرف فيه ميثود عادي )

- اعلم انها تجبرني على استخدام الميثود ( ولكن ما فائدة الاجبار هنا :) ؟ من الناحيه المنطقيه ) يعني امتى وانا بمربمج او احل سؤال اقول مينفعش احل الا باستخدام ابستراكت او انترفيس

#2

السلام عليكم ..

  1. الموضوع طرح هنا رابط
  2. مشاركتي في الموضوع المذكور هي رقم 9 حاول قراءة البند رقم 2 و رقم 4 منها .. و لو عندك استفسارات لا تتردد ..
  3. إذا لم تتوضح بعض الأفكار .. لا تترد بالسؤال عنها ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3
houssam11350_11350 كتب:

السلام عليكم ..

  1. الموضوع طرح هنا رابط
  2. مشاركتي في الموضوع المذكور هي رقم 9 حاول قراءة البند رقم 2 و رقم 4 منها .. و لو عندك استفسارات لا تتردد ..
  3. إذا لم تتوضح بعض الأفكار .. لا تترد بالسؤال عنها ..

للاسف قرات المشاركه والبنود ولكن لم افهم شيئ منها .

اريد ان اعرف لماذا نكتب الميثود في الابستراكت كلاس ثم نعيد كتباتها هي هي في كونكريت كلاس او كلاس الابن مره اخرى .. اليس هذا مضيعه للوقت

واريد ان اعرف لماذا نكتب في جسم الدالة ( ال body ) كود في الابستراكت كلاس ، ونكتب في داله اخرى كلمة ابستراكت امام الميثود وعدم وضع كود بداخلها مافائدة الكود اذا بداخل الداله الاولى وما فائده كتابتها في الابستراكت كلاس طالما احنا هنكتبها مره اخرى في اي كلاس ابن .

#4

نحن نكتب في الفئة المجردة تعريف الدالة

لكنا لا نكتب الخطوات لأن الخطوات غير معلومة لكن التعريف معلوم

مثال الكائن الحي يتنفس

هل كل الكائنات الحية تتنفس بنفس الطريقة بالطبع لا

فالإنسان يتنفس باستخدام الأنف

بينما السمكة تتنفس باستخدام الخياشيم وهكذا

بالمناسبة مرحباً بك معنا

اقترح عليك أن تتطلع على قوانين المنتدى لأن الموضوح طرح كثيراً وبإمكانك الاستفادة بالبحث

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5
علاء الصالحي كتب:

نحن نكتب في الفئة المجردة تعريف الدالة

لكنا لا نكتب الخطوات لأن الخطوات غير معلومة لكن التعريف معلوم

مثال الكائن الحي يتنفس

هل كل الكائنات الحية تتنفس بنفس الطريقة بالطبع لا

فالإنسان يتنفس باستخدام الأنف

بينما السمكة تتنفس باستخدام الخياشيم وهكذا

بالمناسبة مرحباً بك معنا

اقترح عليك أن تتطلع على قوانين المنتدى لأن الموضوح طرح كثيراً وبإمكانك الاستفادة بالبحث

تحياتي

قد نوهت في مشاركتي اني قد اطلعت على كثير من المواضيع اللتي تناقش الفكره وكلها تناقش فكره ( السانتكس syntax ) وليس من جهه سؤالي ..

للاسف ردك الكريم لم افهم منه شيء انا لا اريد طيور وحمام وكائنات انا اريد في موضوعنا وسؤالي فقط ، لماذا نكتب الميثود في الابستركت كلاس ونعيد كتابتها مره اخرى في الكلاس الابن ؟

انا ممكن اعمل كلاس جديد واعمل فيه الميثود عادي جدا بدون استخدام الابستراكت كلاس ( معتقدي ان الابستراكت كلاس مضيعه وقت - اكيد كلامي خاطئ - اريد ان افهم الهدف من الابستراكت ويفدني في ايه في برمجه الجافا او اي برنامج ؟

ومتى استخدم الابستراكت كلاس عند البدأ في برمجه اي برنامج

#6

كونك لا تحب الطيور والحيوانات أمر يعنيك

و أنا لست هنا حتى أعطيك ما تريد

أنا هنا لأن هناك من يريد أن يتعلم ويصبر على العلم

وعندما لا يفهم يستفسر بأدب

ولست هنا لأحقق أمانيك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7

ومن قال لك انني تعديت عليك او طلبت امر اريده منك ؟

حضرتك لم تقرأ سؤالي او لم تفهمه كما يجب مع اني قد كررته في الموضوع اكثر من مره وباكثر من صيغه وترد علي بطيور وحيوانات وكائنات ؟

كانك تعلم طفل صغير ام تعلم برمجه الجافا

اذا لم تسطع ان ترد على سؤالي بلغه الجافا ومن منطلق الجافا ففضلا لا ترد علي بصيغه فيها تقليل من المتعلم

على اي حال شكرا لك وبنتظار شخصا اخر يكون لديه علم ما فائده ال abstract class

وشكرا ,,,

#8

أخي النمر الصغير ، أنت تعرف القاعدة في اللغه وتعرف أن Abstract class لا يمكن أن ننشيء منه كائن واذا احتوى على abstract methods فأي sub-class عليه بعمل override لها؟

اذا كنت تسأل لماذا من منطلق السؤال فالجواب لأن مصمم أراد ذلك :) ..

اما اذا كنت تريد معرفة كيفية الاستفادة من المفهوم في تصميمك للبرامج، فأهلاً وسهلاً بك في Object Oriented Design & Design Pattern :) ..

في الغالب عندما يتم شرح مفهوم جديد، سوف نحاول ربطه بشيء ملموس أمامنا، حتى تستطيع فهم الفكرة بشكل أكبر ، مثال الأخ علاء واضح وكان يمكنك أن تطلب مثال برمجي للفكرة ،

من الأمكان التي يتضح فيها قائده الabstract class هو تطبيق ل template pattern :

http://www.javacamp.org/designPattern/

http://sourcemaking.com/design_patterns/template_method/java/2

http://en.wikipedia.org/wiki/Template_method_pattern

انظر للروابط أعلاه وأسأل عن ما استصعب لديك،،

أيضاً حاول القرائه أكثر في الdesign pattern للتعرف على طرق الاستفادة من الأدوات في اللغه ك abstract classes و interface ..

بالتوفيق،،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#9

السلام عليكم ...

  1. اقتباس
    وسؤالي فقط ، لماذا نكتب الميثود في الابستركت كلاس ونعيد كتابتها مره اخرى في الكلاس الابن ؟
    نحن نكتبها في الصف الأب (الــ abstract) دون body و في الصفوف الأبن نكتبها مع الــ Body ...
  2. سؤال : لماذا تم تعريفها إذا في الصف الأب ؟ .. الجواب : كي نضمن أن جميع الصفوف الأبناء سيعيدون تعريفها كما وردت في الصف الأب تماما ...
  3. سؤال : لماذا لا نعرفها في الصف الأب دون abstract ؟ الجواب : لأننا لا نعرف كيف سنكتب الــ body لها .. فهو يختلف من صف لآخر .. و كل صف أبن من الصف المجرد سيعيد تعريفها و لكن يكتب الــ body المناسب له ..
  4. سؤال : لماذا لا نعرفها في الأبناء دون ذكرها في الأب ؟ الجواب : مالذي يضمن للمترجم أنك لو كتبت صفا جديدا يرث من الصف المجرد ستعيد تعريفها في هذا الصف الجديد .. أما لو كانت معرفة كمجردة في الأب و ورثت منها .. سيعطي المترجم رسالة خطأ يطالبك فيها بإعادة تعريف الإجراء المجرد و كما ورد في الصف الأب تماما ( أو تعريف صفك الجديد بأنه مجرد) جرب ذلك ..
  5. المثال الذي ذكرته في مشاركتي التي في الرابط عن الصفوف ObjectInputStream و PipedInputStream و StringBufferInputStream و FileInputStream و ByteArrayInputStream التي جميعها ترث من الصف المجرد InputStream و الذي فيه الإجراء read هو إجراء مجرد .. و لاحظ كيف يمكننا تعريف متحول منه ...
    int x = 0 ;
        	byte[] buff = new byte[] {1 , 2, 3,4 , 5};
        	InputStream inputStream ;
        	if(x == 1)
                	inputStream = new FileInputStream("E:\\d1.txt");
        	else
                	inputStream = new ByteArrayInputStream(buff);
    
        	int toRead = inputStream.read();
        	System.out.println(toRead);

    فلو لم تكن الأجراء read معرف في الصف الأب InputSteam لما كنا قادرين على كتابة الكود inputStream.read() لأنه بذلك أضمن أن كل الصفوف التي ترث من InputStream فيها تعريف للإجراءread ..و لكن كل صف يعرفها يطريقته أي يكتب الــ Body المناسب له ..

  6. سؤال : لماذا الــ read مجرد؟ .. الجواب : لأن عملية الـ read من ملف تختلف عن عملية read من مكان في الذاكرة .. و بالتالي نضع الإجراء كــ abstract عندما يكون مشترك بين عدة كائنات و لكن الــ Implementation يختلف من صف لآخر ..
  7. سؤال : ماذا يفيدنا كل هذا ؟ ... الجواب : فقط يقلل عدد أسطر الكود و ينظمه و يجعله أكثر قابلية للقراءة ... و ممكن كتابة برنامج يقوم بنفس المهام دون صفوف مجردة و حتى دون وراثة ..

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 28 ديسمبر 2011 في 01:39

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#10

السلام عليكم ،

جزاكم الله خيرا على الرد جميع هذه المفاهيم او اغلبها مفهومه لدي واعرف طريقه كتابتها ..

ما توقفني هو اول جملة وهي ( المصمم اراد ذلك ) واوقفني كلمه اخرى وهي ( Design Patterns ) اعتقد الكلمتين يتعلقو فقط باجابه سؤالي ...

1- اكيد عندما ابدا اي برنامج من الصفر اسال نفسى ، هل يحتاج البرنامج الى ابستراكت كلاس او الى انترفيس ؟ ولماذا ؟

// ليه اتعب نفسي واعمل ابستراكت كلاس واعمل اوفر رايد للميثودز .. ماهو ممكن ابدأ بانشاء concrete كلاس واشتغل عادي ( اكيد المصمم له هدف من تنظيم شيء ما في ال Design Patterns وهذا ما اريد معرفته )

تم تعديل هذه المشاركة بواسطة النمر الصغير في 28 ديسمبر 2011 في 09:10

#11

اخي النمر الصغير حياك الله واهلا بك معنا

في البداية اعرف ان الامور ما زالت لك غير واضحة لانك جديد في هذا العالم وكلنا مر بنفس الشيء اما سبب ارتباكك فانا افهمه واحيانا لغاية الآن اعاني منه

باختصار على جواب سؤالك انك لست مرغم باستعمال الـ abstract class وكتابة الميثود داخلها ثم اللجوء الى اعادة كتابتها مرة أخرى في الصنف الابن

تستطيع البرمجة وكتابة الكود الذي تريده حتى بدون الـ abstract class لكن هنا لا بد لنا من وقفة لكي نتامل

اخواني اشاروا لنقطتين وهما الـ Design Patterns وقضية التصميم

سأبدأ معك بقضية التصميم

اذا ان لغة الجافا عندما صنفت تم تصميم هذه الامور من كلاسات وصفوف مجرد وواجهات ليتم التعامل معها لتسهيل البرنامج كتابة وصيانة

بمعنى ان الطريقة الاصيلة والصحيحية والاحترافية تكمن باستخدام المواضيع الاساسية والطرق الرئيسة في لغة جافا كالصفوف المجردة والواجهات

هنا ستقول لي لكن من الناحية المنطقية لا اجد فائدة او انه اسهل بالنسبة لي البرمجة دون الواجهات والصفوف المجردة اقول لك ربما انت في هذه المرحلة تجدها اسهل لكن ليس دائما

كما ان الامر لا يتعلق فقط بالسهولة انما يتعلق بالانتشار يعني انت لما تكتب برنامج يتم الاستخدام الصحيح فيه للواجهات او الصفوف المجردة عندها سيكون مفهوما لكل من يقراه او من يريد عمل تطوير او صيانة للكود

الهدف هو وضع معايير ثابتة لكي يتعامل الكل مع كود مكتوب من اكثر من شخص بالاضافة حتى لتسهيل الكتابة للكود نفسه

انظر معي ربما تكون ما زلت تقول لا لم اقتنع بفكرتك وانه لا حاجة لبرامجك للتطوير او الصيانة او لن يطلع عليها احد غيرك فلماذا توجع راسك

حسنا ان كانت هذه فكرتك فانت لست بحاجة لكثير من تقنيات الجافا وتستطيع ان تكتب الكثير من البرامج فقط باستخدام الحد الادنى من اوامر وصفوف الجافا لكن تكون قد فوتت على نفسك الكثير

وهنا اشير انني اعرف شخص تعلم الجافا ولكنه لا يستخدمها استخدام صحيح حتى انه لا يطبق البرمجة الغرضية التوجه التي هي اساس الجافا فتصور انه يكتب الكود كاملا والذي يتجاوز الف سطر في كلاس واحد فقط

فتصور لو اراد غيره الاطلاع على الكود او هو نفسه لو اراد الاطلاع على الكود الذي كتبه بعد فترة ماذا ستكون النتيجة!!!...اعتقد انه لن يتذكر شيئا ولن يفهم شيئا

القضية الثانية وهي قضية الـ Design Patterns وهنا تعني ان هناك حالات او مواقف معينة اثناء البرمجة اتفق عليها انه سيتم حلها بطريقة محددة لانها تعطي افضل النتائج وبأفضل الطرق

يعني كمثال اننا نريد ان نحسب مثلا مساحة دائرة ومرة مساحة اسطوانة ففي هكذا حالة مثلا علم الـ Design Patterns يرشدك لاستخدام الصفوف المجردة لانه يسهل الموضوع

يعني مثلا نعمل صف مجرد نحدد فيه نقطيتين x و y وفيه ميثود لحساب المساحة لكنه فارغ ثم ننشئ صنف جديد نسميه مثلا circle يتم فيه اعاده تعرف النقطتين x و y وعمل عليها overreiding باضافة الرقم pi ثم يتم حساب المساحة بعد ذلك نقوم بعمل صنف حديد نسميه cylinder يرث الصنف circle ويعمل overreiding لحساب المساحة باضافة الطول z وهكذا دواليك اذا اردت اضافة اشكال هندسية اخرى طبعا انا اعطيتك نبذة عن الموضع ولم اكتب الكود

هناك كتاب عن الـ Design Patterns اسمه Head First Design Patterns وايضا كتاب The Design Patterns Java Workbook وللأمانة انا لم اقرأ أي منهما لكن سمعت انهما مفيدان لمن يريد احتراف الجافا ابحث عنه بالانترنت وستجده وكنت رفعته لك هنا لكن قوانين المنتدى تمنعني من ذلك

اتمنى ان اكون قد ساعدتك واوصلت لك الفكرة التي تريدها

وبالتوفيق

2

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#12
vector_ever كتب:

اخي النمر الصغير حياك الله واهلا بك معنا

في البداية اعرف ان الامور ما زالت لك غير واضحة لانك جديد في هذا العالم وكلنا مر بنفس الشيء اما سبب ارتباكك فانا افهمه واحيانا لغاية الآن اعاني منه

باختصار على جواب سؤالك انك لست مرغم باستعمال الـ abstract class وكتابة الميثود داخلها ثم اللجوء الى اعادة كتابتها مرة أخرى في الصنف الابن

تستطيع البرمجة وكتابة الكود الذي تريده حتى بدون الـ abstract class لكن هنا لا بد لنا من وقفة لكي نتامل

اخواني اشاروا لنقطتين وهما الـ Design Patterns وقضية التصميم

سأبدأ معك بقضية التصميم

اذا ان لغة الجافا عندما صنفت تم تصميم هذه الامور من كلاسات وصفوف مجرد وواجهات ليتم التعامل معها لتسهيل البرنامج كتابة وصيانة

بمعنى ان الطريقة الاصيلة والصحيحية والاحترافية تكمن باستخدام المواضيع الاساسية والطرق الرئيسة في لغة جافا كالصفوف المجردة والواجهات

هنا ستقول لي لكن من الناحية المنطقية لا اجد فائدة او انه اسهل بالنسبة لي البرمجة دون الواجهات والصفوف المجردة اقول لك ربما انت في هذه المرحلة تجدها اسهل لكن ليس دائما

كما ان الامر لا يتعلق فقط بالسهولة انما يتعلق بالانتشار يعني انت لما تكتب برنامج يتم الاستخدام الصحيح فيه للواجهات او الصفوف المجردة عندها سيكون مفهوما لكل من يقراه او من يريد عمل تطوير او صيانة للكود

الهدف هو وضع معايير ثابتة لكي يتعامل الكل مع كود مكتوب من اكثر من شخص بالاضافة حتى لتسهيل الكتابة للكود نفسه

انظر معي ربما تكون ما زلت تقول لا لم اقتنع بفكرتك وانه لا حاجة لبرامجك للتطوير او الصيانة او لن يطلع عليها احد غيرك فلماذا توجع راسك

حسنا ان كانت هذه فكرتك فانت لست بحاجة لكثير من تقنيات الجافا وتستطيع ان تكتب الكثير من البرامج فقط باستخدام الحد الادنى من اوامر وصفوف الجافا لكن تكون قد فوتت على نفسك الكثير

وهنا اشير انني اعرف شخص تعلم الجافا ولكنه لا يستخدمها استخدام صحيح حتى انه لا يطبق البرمجة الغرضية التوجه التي هي اساس الجافا فتصور انه يكتب الكود كاملا والذي يتجاوز الف سطر في كلاس واحد فقط

فتصور لو اراد غيره الاطلاع على الكود او هو نفسه لو اراد الاطلاع على الكود الذي كتبه بعد فترة ماذا ستكون النتيجة!!!...اعتقد انه لن يتذكر شيئا ولن يفهم شيئا

القضية الثانية وهي قضية الـ Design Patterns وهنا تعني ان هناك حالات او مواقف معينة اثناء البرمجة اتفق عليها انه سيتم حلها بطريقة محددة لانها تعطي افضل النتائج وبأفضل الطرق

يعني كمثال اننا نريد ان نحسب مثلا مساحة دائرة ومرة مساحة اسطوانة ففي هكذا حالة مثلا علم الـ Design Patterns يرشدك لاستخدام الصفوف المجردة لانه يسهل الموضوع

يعني مثلا نعمل صف مجرد نحدد فيه نقطيتين x و y وفيه ميثود لحساب المساحة لكنه فارغ ثم ننشئ صنف جديد نسميه مثلا circle يتم فيه اعاده تعرف النقطتين x و y وعمل عليها overreiding باضافة الرقم pi ثم يتم حساب المساحة بعد ذلك نقوم بعمل صنف حديد نسميه cylinder يرث الصنف circle ويعمل overreiding لحساب المساحة باضافة الطول z وهكذا دواليك اذا اردت اضافة اشكال هندسية اخرى طبعا انا اعطيتك نبذة عن الموضع ولم اكتب الكود

هناك كتاب عن الـ Design Patterns اسمه Head First Design Patterns وايضا كتاب The Design Patterns Java Workbook وللأمانة انا لم اقرأ أي منهما لكن سمعت انهما مفيدان لمن يريد احتراف الجافا ابحث عنه بالانترنت وستجده وكنت رفعته لك هنا لكن قوانين المنتدى تمنعني من ذلك

اتمنى ان اكون قد ساعدتك واوصلت لك الفكرة التي تريدها

وبالتوفيق

شكرا لكم كثيرا وصلت الفكره الحمد لله

مواضيع مشابهة