السلام عليكم
إذا كان لدينا صنف به متغيرات "ليست private", لماذا نحتاج إلى setter و getter ؟؟
السلام عليكم
إذا كان لدينا صنف به متغيرات "ليست private", لماذا نحتاج إلى setter و getter ؟؟
من مبادئ ال OOP يوجد ال encapsulation، وهو عدم السماح بالتعامل مع حقول الكائن إلا عبر methods، وبالتالي الحاجة إلى ال getters وال setters. إذا جعلت الحقول public فلا فائدة من استعمال ال getters وال setters
السلام عليكم
ال 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
السلام عليكم ..
هذه مشاركة لي أوضح فيها أحد فوائد الــ Setter و الــ Getter رابط
لا إله إلا الله ... محمد رسول الله
لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة
المعرًف القديم : houssam11350_11350
من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر
السلام عليكم
بالفعل, هذا ما كنت أعتقده. شكرا لكم جميعا على المشاركة, +1 للكل :)
طيب, راودني سؤال آخر له صلة بالموضوع .. هل تقتصر فائدة الــ Setter و الــ Getter على Private Variables ؟؟
إذا كان لدينا صنف a يحتوي على (متغيرات/طرق) protected و لنفتضر أن هذا الصنف موجود في package اسمه A, إذا أردنا استخدام الــ (متغيرات/طرق) الخاصة بالصنف a في صنف آخر اسمه b موجود في package اسمه B, كيف سيكون ذلك ؟!؟
يا ريت لو يكون الشرح موضح بأكواد.
و شكرا لكم مرة أخرى.
تم تعديل هذه المشاركة بواسطة khaled_prg في 1 يناير 2012 في 21:18
السلام عليكم ..

لا إله إلا الله ... محمد رسول الله
لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة
المعرًف القديم : houssam11350_11350
من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر
مرحبا أخي حسام :)
اقتباسهذا يوضح محددات الوصول في الجافا ..
صح أو لا ؟
[*]أرجو الإجابة على هذا السؤال, لو سمحت :
اقتباسإذا كان لدينا صنف a يحتوي على (متغيرات/طرق) protected و لنفتضر أن هذا الصنف موجود في package اسمه A, إذا أردنا استخدام الــ (متغيرات/طرق) الخاصة بالصنف a في صنف آخر اسمه b موجود في package اسمه B, كيف سيكون ذلك ؟!؟يا ريت لو يكون الشرح موضح بأكواد.
تم تعديل هذه المشاركة بواسطة khaled_prg في 6 يناير 2012 في 01:36
السلام عليكم .. و عذرا على التأخر في الرد ...
لا أخي .. هي كما قلت محددات الوصول .. أي هل يمكن الوصول للمتغير أو الــ method أم لا ..وضعتها حتى لا يصبح هناك تعارض مع الــ Setter و الــ Getter من حيث الوصول .. فمن غير المنطقي وصع setter و getter لمتحول عام يمكن الوصول إلية من كل الأمكنه ...[*]طالما أن الصفين A , B موجودان في حزمتين مختلفتين و بالتالي حسب الجدول السابق , لا يمكن الوصول للمتغيرات من نوع protected و بالتالي إما نضع لها public setter و public getter أو ممكن نضع المتحولات بذلتها كــ public ..[*]هذا مثال عن محددات الوصول ..رابط[*]اقتباسأفهم من هذا أن :
- الأمكنة التي توجد بها كلمة no سنتحتاج فيها (إلزاميا) إلى استخدام الــ Setter و الــ Getter لنصل إلى المتغير
- الأمكنة التي توجد بها كلمة yes سيكون استخدام الــ Setter و الــ Getter فيها أمرا اختياريا.
صح أو لا ؟
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();
}
}لا إله إلا الله ... محمد رسول الله
لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة
المعرًف القديم : houssam11350_11350
من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر
اقتباسلا أخي .. هي كما قلت محددات الوصول .. أي هل يمكن الوصول للمتغير أو الــ method أم لا ..وضعتها حتى لا يصبح هناك تعارض مع الــ Setter و الــ Getter من حيث الوصول .. فمن غير المنطقي وصع setter و getter لمتحول عام يمكن الوصول إلية من كل الأمكنه ...
ما كنت أقصده هو أن استخدام الــ Setter و الــ Getter يكون إلزاميا للوصول إلى المتغيرات في الأماكن المصاحبة لــ no لأننا لا نستطيع رؤية المتغير في تلك الأماكن لذا نلجأ إلى استخدام الــ Setter و الــ Getter, صح أو لا ؟
اقتباس4....
+1
السلام عليكم ...
لا .. ممكن نجعلها public و نصل إليها في كل الأماكن .. و استخدام الــ Setter و الــ getter ليس إلزاميا ... بل حسب رغبة المبرمج .. بالتوفيق ..اقتباسما كنت أقصده هو أن استخدام الــ Setter و الــ Getter يكون إلزاميا للوصول إلى المتغيرات في الأماكن المصاحبة لــ no لأننا لا نستطيع رؤية المتغير في تلك الأماكن لذا نلجأ إلى استخدام الــ Setter و الــ Getter, صح أو لا ؟
لا إله إلا الله ... محمد رسول الله
لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة
المعرًف القديم : houssam11350_11350
من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر
اقتباسممكن نجعلها public و نصل إليها في كل الأماكن .. و استخدام الــ Setter و الــ getter ليس إلزاميا ... بل حسب رغبة المبرمج
لا تعارض !! :
اقتباس.. يكون إلزاميا للوصول إلى المتغيرات في الأماكن المصاحبة لــ no
و بما ان الــ Public لا تحتوي على no فسيكون استخدام الــ Setter و الــ getter أمرا اختياريا.
أشكرك على الشرح.
دمت في رعاية الله و حفظه.
تم تعديل هذه المشاركة بواسطة khaled_prg في 8 يناير 2012 في 01:39