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

تمرين يحتوي على مفهوم "الوراثة" في الجافا !

بدأه khaled_prg في 30 يناير 2012 · 14 رد · 3,022 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته

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

نص التمرين :

مربي دواجن يستقبلها من موزع للدجاج و البط و يُشرف على تربيتها حتى تبلغ المرحلة (الحجم) المناسب للبيع.

يتم تمييز الداجنة عن طريق الوزن و رقم التعريف اللذان يُكتبان على خاتم تحمله في أحد ساقيها. تصل الداجنة إلى المربي و عمرها ثلاثة أسابيع حيث يتم وضع خاتم لها (تختيمها) و تسجيلها في قاعدة البيانات.

يوجد نوعان من الدواجن : البط و الدجاج و تختلف تسعرة كل منهما المُعبر عنها باليورو. في المقابل فإن التسعرة مُوحدة لكل الدواجن التي من نفس النوع, و تتغير هذه التسعرة كل يوم. يختلف الوزن الذي يُذبح عنده الدجاج و البط, في حين يتساوى لكل الدجاج (على التوالي لكل البط).

  1. اكتب الفئة الأم الدواجن و الفئتين اللتين يرثانها (فئات مشتقة) الدجاج و البط.
  2. اكتب فئة تُمكن من تمثيل مجموعة الدواجن من خلال تخزينها في جدول و معرفة عدد الدواجن التي يملكها المربي و نوع كل واحدة منها.
    لنعتبر أن المربي لا يُمكن أن يستقبل أكثر من 200 داجنة دفعة واحدة.
  3. اكتب دالة (طريقة) تُمكن من حساب التسعرة الإجمالية للدواجن التي يملكها المربي.
#2

بالنسبة للإخوة اللذين يفهمون الفرنسية :

Voici l’énoncé :

Un éleveur de volaille reçoit d’un fournisseur de jeunes canards et de jeunes poulets qu’il élève jusqu’à

ce qu’ils aient la taille nécessaire à leur commercialisation.

Une volaille est caractérisée par son poids et un numéro d’identification reporté sur une bague qu’elle

porte a sa petite patte. Les volailles arrivent à l’élevage à l’âge de trois semaines. Elles sont baguées et

enregistrées dans le système informatique.

Il y a deux sortes de volailles : des canards et des poulets. Le prix du canard et celui du poulet sont deux

prix différents, exprimés en euros par kilo. En revanche, le prix est le même pour tous les individus de la

même espèce. Ce prix varie chaque jour. Le poids auquel on abat les bêtes est différents pour les canards et

les poulets, mais c’est le même pour tous les poulets (respectivement, tous les canards).

1. Écrivez une classe des volailles avec deux sous-classes des poulets et des canards. Il faut pouvoir enregistrer les prix du jours, les poids d’abbatage, le poids d’une volaille donnée.

2. Écrivez une classe permettant de représenter l’ensemble des animaux de l’élevage au moyen d’un tableau et de savoir le nombre de volailles reçues et le type de chaque volaille. On considérera que l'éleveur ne peut pas recevoir au maximum que 200 volailles à la fois.

3. Écrire une méthode qui permet de calculer le prix total de toutes les volailles que l'éleveur possède

تم تعديل هذه المشاركة بواسطة khaled_prg في 30 يناير 2012 في 01:30

#3

محاولاتي :

Volaille.Java


int ID;
double Poids;
public Volaille(double P, int id){
Poids = P;
ID = id;
}
@Override
public String toString(){
return "Poids : "+Poids+", N° : "+ID;
}
public abstract String getType();
}
public abstract class Volaille {

Poulet.Java


//On suppose que le poids d'abattage égal cinq kilo.
final static double POIDS_ABAT = 5.00;
static double prixJour;
public Poulet(double p, int id, double pj){
super(p,id);
prixJour = pj;
}
static void SetPrixJour(double PrixPoulet){
prixJour = PrixPoulet;
}
@Override
public String toString(){
return super.toString() +", Prix du Jour : "+prixJour+", Poids d'abattage : "+POIDS_ABAT;
}
public String getType(){
return "Poulet";
}
}
public class Poulet extends Volaille{

Canard.Java


//On suppose que le poids d'abattage égal quatre kilo.
final static double POIDS_ABAT = 4.00;
static double prixJour;
public Canard(double p, int id, double pj){
super(p,id);
prixJour = pj;
}
static void SetPrixJour(int prixCanard){
prixJour = prixCanard;
}
@Override
public String toString(){
return super.toString() +"Prix du Jour : "+prixJour+", Poids d'abattage : "+POIDS_ABAT;
}
public String getType(){
return "Canard";
}
}
public class Canard extends Volaille{

EnsembleVolailles.Java


final static short NBR_MAX = 200;
Volaille ensembleVolailles[] = new Volaille[NBR_MAX];
public int NbrTypeVolaille(){
int Nbr = 0;
for(int i =0;i < ensembleVolailles.length;i++)
if(ensembleVolailles != null){
Nbr++;
System.out.println(ensembleVolailles.getType);//Erreur !
}
return Nbr;
}
}
public class EnsembleVolailles{

Prix du Jour = التسعرة اليومية.

Poids d'abattage = الوزن الذي تُذبح عنده الداجنة.

تم تعديل هذه المشاركة بواسطة khaled_prg في 30 يناير 2012 في 01:51

#4

المشكلة التي واجهتتني هي كيفية معرفة نوع كل داجنة !!

... الدالة التي أعرف من خلالها نوع الداجنة هي méthode abstraite و بالتالي لا أستطيع استخدامها من الفئة الأم !!, مالعمل يا تُرى ؟ : (

#5

السلام عليكم

تم بحمد الله حل السؤال الثاني :

EnsembleVolailles.Java

public class EnsembleVolailles{
    final static short NBR_MAX = 200;
    static Volaille ensembleVolailles[] = new Volaille[NBR_MAX];
    public static int NbrTypeVolaille(){
        int Nbr = 0;
        for(int i =0;i < ensembleVolailles.length;i++)
            if(ensembleVolailles != null){
                Nbr++;
                System.out.println(ensembleVolailles.getType());
            }
        return Nbr;
    }
    public static void main(String args[]){
        Poulet Plt_1 = new Poulet(0.25,18,0.30);
        Canard Cnrd_1 = new Canard(0.30,21,0.33);
        Poulet Plt_2 = new Poulet(0.19,36,0.24);
        Canard Cnrd_2 = new Canard(0.18,42,0.2);
        Poulet Plt_3 = new Poulet(0.07,25,0.17);
        ensembleVolailles[0] = Plt_1;
        ensembleVolailles[1] = Cnrd_1;
        ensembleVolailles[2] = Plt_2;
        ensembleVolailles[3] = Cnrd_2;
        ensembleVolailles[4] = Plt_3;
        int nbr = NbrTypeVolaille();
        System.out.println(nbr);
    }
}

و هذه صورة لتنفيذ الكود :

01lmjop30.png

طيب الآن, لنتقدم إلى السؤال الأخير :

اكتب دالة (طريقة) تُمكن من حساب التسعرة الإجمالية للدواجن التي يملكها المربي.

أو :

Écrire une méthode qui permet de calculer le prix total de toutes les volailles que l'éleveur possède

تحياتي.

#6

ماشاء الله يا خالد ... جميل جدا

#7

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

  1. عمل جميل أخ خالد ....الكود يعمل , لكن فيه خطأ منطقي ...هو أنه لدينا الــ Data Member (الحقل) المسمى prixJour و هو static ... أي له منطقة واحدة محجوزة من أجل كل الــ Objects التي تم إنشاؤها من الصف .. و أنت في الــ Constructor تقوم بتمرير قيم مختلفة له ..
    Poulet Plt_1 = new Poulet(0.25,18,0.30);
        	Canard Cnrd_1 = new Canard(0.30,21,0.33);
        	Poulet Plt_2 = new Poulet(0.19,36,0.24);
        	Canard Cnrd_2 = new Canard(0.18,42,0.2);
        	Poulet Plt_3 = new Poulet(0.07,25,0.17);

    و هو يأخذ فقط آخر قيمة ...

  2. أما بالنسبة لحساب التسعيرة الإجمالية للدواجن (بعد حل المشكلة الأولى) ... فيمكن حله بنفس الطريقة .. أي abstract.. كمايلي :
    public abstract class Volaille {
    
       //.........    
    	// getPrice
    	public abstract double getPrixJour();
    }

    و يكون :

    public class Poulet extends Volaille{
    //......
    
    	public  double getPrixJour()
    	{
        	return prixJour;
    	}
    
    }

    و كذلك الــ Canard أما الحساب فيكون كمايلي :

    double sum = 0;
        	for(Volaille volaille : ensembleVolailles)
            	if(volaille != null)
            	sum += volaille.getPrixJour();
    
        	System.out.println("Sum=" + sum);

بالتوفيق ..

2

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

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

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

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

#8
اقتباس
ماشاء الله يا خالد ... جميل جدا

هلا بالحبيب الغالي (شكلي صرت خليجي ! :D), اشتقت إليك :)

مرحبا أخي حسام.

اقتباس
الكود يعمل , لكن فيه خطأ منطقي

نعم معك حق.

اقتباس
بالنسبة لحساب التسعيرة الإجمالية للدواجن (بعد حل المشكلة الأولى) ... فيمكن حله بنفس الطريقة .. أي abstract

قمت بكتابة هذا الكود بناء على نفس الفكرة :

Volaille.Java

public abstract class Volaille {
    int ID;
    double Poids;
    public Volaille(double P, int id){
        Poids = P;
        ID = id;
    }
    @Override
    public String toString(){
        return "Poids : "+Poids+", N° : "+ID;
    }
    public abstract String getType();
    public abstract double getPrixJour();
}

Poulet.Java

public class Poulet extends Volaille{
    //On suppose que le poids d'abattage égal cinq kilo.
    final static double POIDS_ABAT = 5.00;
	static double prixJour;
    public Poulet(double p, int id){
        super(p,id);
    }
	public static void SetPrixJour(double PrixPoulet){
	     prixJour = PrixPoulet;
	}
    public double getPrixJour(){
        return prixJour;
    }
    @Override
    public String toString(){
        return super.toString() +", Prix du Jour : "+prixJour+", Poids d'abattage : "+POIDS_ABAT;
    }
    public String getType(){
        return "Poulet";
    }
}

Canard.Java

public class Canard extends Volaille{
    //On suppose que le poids d'abattage égal quatre kilo.
    final static double POIDS_ABAT = 4.00;
    static double prixJour;
    public Canard(double p, int id){
        super(p,id);
    }
    public static void SetPrixJour(double prixCanard){
	     prixJour = prixCanard;
	}
    public double getPrixJour(){
        return prixJour;
    }
    @Override
    public String toString(){
        return super.toString() +"Prix du Jour : "+prixJour+", Poids d'abattage : "+POIDS_ABAT;
    }
    public String getType(){
        return "Canard";
    }
}

EnsembleVolailles.Java

public class EnsembleVolailles{
    final static short NBR_MAX = 200;
    static double prixTotalPoulet =0,prixTotalCanard = 0;
    static Volaille ensembleVolailles[] = new Volaille[NBR_MAX];
    public static double PrixTotal(){
        for(int i =0;i < ensembleVolailles.length;i++)
            if(ensembleVolailles != null){
                if(ensembleVolailles.getType().equals("Poulet"))
                    prixTotalPoulet += ensembleVolailles.getPrixJour();
                if(ensembleVolailles.getType().equals("Canard"))
                    prixTotalCanard += ensembleVolailles.getPrixJour();
            }
        return prixTotalPoulet + prixTotalCanard;
    }
    public static void main(String args[]){
        Poulet Plt_1 = new Poulet(0.25,18);
        Poulet.SetPrixJour(0.24);
        Canard Cnrd_1 = new Canard(0.30,7);
        Canard.SetPrixJour(0.17);
        Poulet Plt_2 = new Poulet(0.19,36);
        Canard Cnrd_2 = new Canard(0.18,42);
        ensembleVolailles[0] = Plt_1;
        ensembleVolailles[1] = Cnrd_1;
        ensembleVolailles[2] = Plt_2;
        ensembleVolailles[3] = Cnrd_2;
        System.out.println("Le prix total = "+PrixTotal());
    }
}

ما رأيك ؟

... لدي ملاحظة في الكود, بما أن prixJour هو متغير static ألا يُستحسن أن تكون الدالة getPrixJour أيضا static ؟؟ و لكن هل يمكن للـ méthode abstraite أن تكون statique ؟

تم تعديل هذه المشاركة بواسطة khaled_prg في 31 يناير 2012 في 11:47

#9

السلام عليكم و رحمة الله ..

أهلا و سهلا بك أخي خالد ...أيضا أنا اشتقت إليك ....

  1. بالنسبة لحساب إجمالي الدواجن , لا داعي للعبارتين اللتين تفحصان النوع :
     if(ensembleVolailles.getType().equals("Poulet"))

    و العبارة الأخرى , لأن الإجراء getPrixJour معرف في الصف الأب .. فماذا لم تم إضافة صفوف جديدة ترث من الصف Volaille , فهذا سوف يسبب أنه لن يتم حساب الصف الجديد في إجمالي سعر الدواجن ..

  2. اقتباس
    و لكن هل يمكن للـ méthode abstraite أن تكون statique ؟
    .. لا .. لا يمكن ذلك ..Why can't static methods be abstract in Java ..

بالتوفيق ..

1

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

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

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

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

#10
اقتباس
السلام عليكم و رحمة الله

و عليكم السلام و رحمة الله و بركاته

اقتباس
أهلا و سهلا بك أخي خالد ...أيضا أنا اشتقت إليك ....

أهلا بك و أنا أيضا اشتقت إليك و إلى النقاش معك ...

اقتباس
لا داعي للعبارتين اللتين تفحصان النوع

ملاحظة ممتازة أخي حسام, بارك الله فيك :)

المشكلة أنني لم اتعود بعدُ على مفهوم الــ Polymorphisme في الجافا و بالتالي أجد بعض الأحيان صعوبة في تداخل الصنف الأب مع أبنائه ...

اقتباس
.. لا .. لا يمكن ذلك ..Why can't static methods be abstract in Java ..

  • للأسف لم أفهم الكثير مما قالو .. أرجو منك ترجمة الفكرة بالعربية أو الفرنسية
  • ألا تعتبر أنه هناك نقص على مستوي منطقية الكود !!, المتغير prixJour ساكن و بالتالي الـ méthode التي ستتعامل معه يُفضل أن تكون هي أيضا ساكنة أو statique

بالتوفيق.

#11

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

  1. اقتباس
    للأسف لم أفهم الكثير مما قالو .. أرجو منك ترجمة الفكرة بالعربية أو الفرنسية
    الرابط الذي ارسلته من موقع stackoverflow.com و هو موقع أسئلة و أجوبة و ليس موقع رسمي للمعلومات , فأي شخص يمكنه أن بسأل و أن يجيب , و لكن سنأخذ الإجابة ذات الدرجات الأكبر :
    اقتباس
    Because "abstract" means: "Implements no functionality", and "static" means: "There is functionality even if you don't have an object instance". And that's a logical contradiction.
    أي أن abstract يعني أنه تحقيق implementation مع عدم وجود وظيفة و الــ static يعني أن يوجد وظيفة functionality حتى إذا لكم يكن لدينا كائن instance .. وهذا "نقض للفرض" منطقي .. (اعتقد الترجمة جدا سيئة.. يفضل استخدام ترجمة جوجل و تحويلها للفرنسية )
  2. اقتباس
    ألا تعتبر أنه هناك نقص على مستوي منطقية الكود !!, المتغير prixJour ساكن و بالتالي الـ méthode التي ستتعامل معه يُفضل أن تكون هي أيضا ساكنة أو statique
    .. نحن وقعنا بين نارين ... فكل الــ Poulet لها سعر واحد .. مما يعني أنه علينا أن نضع هذا السعر كــ static .. و من جهة أخرى نريد معرفة سعر أي داجنة ترث من الصف Volaille أي يجب أن نضمن أن كل الصفوف التي ترث منه ممكن الحصول على سعرها ... باعتقادي لا مشكة (كبيرة) هنا ..

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 31 يناير 2012 في 17:44

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

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

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

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

#13

سلام عليكم

الان انا عندي مشروع جافا

هوة عبارة عنمثال عن الوراثية في النهاية ربط الوراثة بالواجهات GUI

ارجو من لديه الطريقة في وضع مثال او مشروع كامل يوضح ذلك وله الاجر من الله

#14
اقتباس

سلام عليكم

الان انا عندي مشروع جافا

هوة عبارة عنمثال عن الوراثية في النهاية ربط الوراثة بالواجهات GUI

ارجو من لديه الطريقة في وضع مثال او مشروع كامل يوضح ذلك وله الاجر من الله

وعليكم السلام

ان كنت تبحث عن مثال فالموضوع هذا مثال جيد جدا

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

وبالتأكيد ستجد من يساعدك باذن الله :)

بالتوفيق


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#15

سلام عليكم

شكرا لكم ع جهودكم

اريد من لديه المثال محلول كامل ان يرفاعه او ان يقول بحل المثال بالتفصيل وتوصيح كل Class على حدا وبارك الله فيكم

لاني بصراحة لا أعلم من اين ابدأ في الحل من المثال

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…