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

مالحاجة إلى setter و getter ؟

بدأه khaled_prg في 1 يناير 2012 · 10 رد · 3,224 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#2

من مبادئ ال OOP يوجد ال encapsulation، وهو عدم السماح بالتعامل مع حقول الكائن إلا عبر methods، وبالتالي الحاجة إلى ال getters وال setters. إذا جعلت الحقول public فلا فائدة من استعمال ال getters وال setters

3
#3

السلام عليكم

ال setter و getter

نستعملهم لكي نستطيع الوصول للمتغيرات الخاصة private

لاحظ

public class Book {

        private String BookName;
        private String auther; 
        private String Y_publishe;
        private String publisher;


        public Book(String N_book,String N_auther, String N_publisher , String Y_pub) {
        BookName = N_book;
        auther=N_auther;
        publisher =  N_publisher;
        Y_publishe = Y_pub;

        }


        //getters

        public String getBookName() {
        return BookName;
        }

        public String getAuther() {
        return auther;
        }

        public String getY_publishe() {
        return Y_publishe;
        }

        public String getPublisher() {
        return publisher;
        }

        //setters
        public void setBookName(String BookName) {
        this.BookName = BookName;
        }

        public void setAuther(String auther) {
        this.auther = auther;
        }

        public void setY_publishe(String Y_publishe) {
        this.Y_publishe = Y_publishe;
        }

        public void setPublisher(String publisher) {
        this.publisher = publisher;
        }

        @Override
        public String toString(){
        return "the name of the book is: "+this.BookName+" and the Auther is: "+this.auther+" and the Publisher is: "+this.publisher+" in year :"+this.Y_publishe;
        }

}

و انشانا كائن من نوع book

Book b=new Book("algorithme","sahraoui","opu","2012");

نريد مثلا الحصول على كاتب الكتاب b

لاحظ

String s=b.getAuther();

لكن اذا كتبنا

String s=b.auther

سيظهر خطا لان المتغير auther خاص private

لكن في حالة المتغيرات من نوع public لا نحتاج الى setter and getters

لهذا ال setters and gettrs و كل البرمجة الشيئية ليست ضرورية لكنها مفيدة

تم تعديل هذه المشاركة بواسطة sahraoui17 في 1 يناير 2012 في 16:46

2
#4

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

هذه مشاركة لي أوضح فيها أحد فوائد الــ Setter و الــ Getter رابط

1

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

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

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

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

#5

السلام عليكم

بالفعل, هذا ما كنت أعتقده. شكرا لكم جميعا على المشاركة, +1 للكل :)

طيب, راودني سؤال آخر له صلة بالموضوع .. هل تقتصر فائدة الــ Setter و الــ Getter على Private Variables ؟؟

إذا كان لدينا صنف a يحتوي على (متغيرات/طرق) protected و لنفتضر أن هذا الصنف موجود في package اسمه A, إذا أردنا استخدام الــ (متغيرات/طرق) الخاصة بالصنف a في صنف آخر اسمه b موجود في package اسمه B, كيف سيكون ذلك ؟!؟

يا ريت لو يكون الشرح موضح بأكواد.

و شكرا لكم مرة أخرى.

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

#6

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

  1. ممكن وضع الــ Setter والــ Getter على المتحولات من نوع Protected ...
  2. هذا يوضح محددات الوصول في الجافا .. access.png
1

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

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

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

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

#7

مرحبا أخي حسام :)

اقتباس
هذا يوضح محددات الوصول في الجافا ..

  1. أفهم من هذا أن :
    • الأمكنة التي توجد بها كلمة no سنتحتاج فيها (إلزاميا) إلى استخدام الــ Setter و الــ Getter لنصل إلى المتغير
    • الأمكنة التي توجد بها كلمة yes سيكون استخدام الــ Setter و الــ Getter فيها أمرا اختياريا.

صح أو لا ؟

[*]أرجو الإجابة على هذا السؤال, لو سمحت :

اقتباس
إذا كان لدينا صنف a يحتوي على (متغيرات/طرق) protected و لنفتضر أن هذا الصنف موجود في package اسمه A, إذا أردنا استخدام الــ (متغيرات/طرق) الخاصة بالصنف a في صنف آخر اسمه b موجود في package اسمه B, كيف سيكون ذلك ؟!؟

يا ريت لو يكون الشرح موضح بأكواد.

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

#8

السلام عليكم .. و عذرا على التأخر في الرد ...

  1. اقتباس
    أفهم من هذا أن :
    • الأمكنة التي توجد بها كلمة no سنتحتاج فيها (إلزاميا) إلى استخدام الــ Setter و الــ Getter لنصل إلى المتغير
    • الأمكنة التي توجد بها كلمة yes سيكون استخدام الــ Setter و الــ Getter فيها أمرا اختياريا.

    صح أو لا ؟

    لا أخي .. هي كما قلت محددات الوصول .. أي هل يمكن الوصول للمتغير أو الــ method أم لا ..وضعتها حتى لا يصبح هناك تعارض مع الــ Setter و الــ Getter من حيث الوصول .. فمن غير المنطقي وصع setter و getter لمتحول عام يمكن الوصول إلية من كل الأمكنه ...[*]طالما أن الصفين A , B موجودان في حزمتين مختلفتين و بالتالي حسب الجدول السابق , لا يمكن الوصول للمتغيرات من نوع protected و بالتالي إما نضع لها public setter و public getter أو ممكن نضع المتحولات بذلتها كــ public ..[*]هذا مثال عن محددات الوصول ..رابط[*]
     package pacA;
    public class A
    {
    protected int valA = 0;
    
    public int getValA()
    {
    return valA;
    }
    
    public void setValA(int valA)
    {
    this.valA = valA;
    }
    
    }

    package pacB;
    import pacA.*;
    public class B
    {
    A a = new A();
    
    public void  printTheValA()
    {
    System.out.println(a.getValA());
    }
    
    }

    package test;
    import pacB.*;
    public class Test {
        	public static void main(String args[]) {
    
    				B b = new B();
    				b.printTheValA();
        	}
    }

1

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

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

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

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

#9
اقتباس
لا أخي .. هي كما قلت محددات الوصول .. أي هل يمكن الوصول للمتغير أو الــ method أم لا ..وضعتها حتى لا يصبح هناك تعارض مع الــ Setter و الــ Getter من حيث الوصول .. فمن غير المنطقي وصع setter و getter لمتحول عام يمكن الوصول إلية من كل الأمكنه ...

ما كنت أقصده هو أن استخدام الــ Setter و الــ Getter يكون إلزاميا للوصول إلى المتغيرات في الأماكن المصاحبة لــ no لأننا لا نستطيع رؤية المتغير في تلك الأماكن لذا نلجأ إلى استخدام الــ Setter و الــ Getter, صح أو لا ؟

اقتباس
4.

...

+1

#10

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

اقتباس
ما كنت أقصده هو أن استخدام الــ Setter و الــ Getter يكون إلزاميا للوصول إلى المتغيرات في الأماكن المصاحبة لــ no لأننا لا نستطيع رؤية المتغير في تلك الأماكن لذا نلجأ إلى استخدام الــ Setter و الــ Getter, صح أو لا ؟
لا .. ممكن نجعلها public و نصل إليها في كل الأماكن .. و استخدام الــ Setter و الــ getter ليس إلزاميا ... بل حسب رغبة المبرمج .. بالتوفيق ..

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

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

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

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

#11
اقتباس
ممكن نجعلها public و نصل إليها في كل الأماكن .. و استخدام الــ Setter و الــ getter ليس إلزاميا ... بل حسب رغبة المبرمج

لا تعارض !! :

اقتباس
.. يكون إلزاميا للوصول إلى المتغيرات في الأماكن المصاحبة لــ no

و بما ان الــ Public لا تحتوي على no فسيكون استخدام الــ Setter و الــ getter أمرا اختياريا.

أشكرك على الشرح.

دمت في رعاية الله و حفظه.

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

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