فقط حاول، أنا أيضا عندما دخلت المنتدى لم أكن أستطيع الكتابة بالعربية أو التعبير بها، لأن دراستي كانت بالفرنسية. إعتبرها فرصة للتدرب على اللغة :lol:
اسئلتكم واستفساراتكم
السلام عليكم ورحمه الله وبركاته .. ,
عند تعريف متغيرات في Class ما , نعرفها كالتالي ..
private int y ;
ونستطيع تعريفها هكذا أيضاً.. ,
protected int y ;
أعلم بأن التعريف الأول هو الأفضل , و لايستحب إستخدام الطريقة الثانية ..
وسؤالي , لماذا لايستحب ؟!
وشكـراً :) ,
..
سبحآن الله وبحمده .. سبحآن الله العظيم .. ,
private تعني أن هذا المتغير لا يمكن استعماله إلا داخل الفئة التي عرف فيها، بينما protected تعني أنه يمكن الوصول إليه وتغييره من الفئة التي عرف فيها وأيضا من الفئات التي ترث منها.
التعريف الأول ليس بالضرورة أفضل من الثاني، ذلك يعتمد على الموقف الذي يستعمل فيه، لكن غالبا يجب أن تكون المتغيرات private ويمكن الوصول للمتغير عن طريق getters & setters.
لنفترض مثلا أنك لديك فئة Product تحتوي على متغير price
class Product {
public int price;
//....
}
public class Main {
public static void main(String[] args) {
Product p = new Product();
p.price = 20;
}
}نستطيع الوصول للمتغير price مباشرة وتغييره.
لنفترض أن المخزن الذي يستعمل البرنامج طلب منك عدم السماح بإدخال ثمن أقل من 50 درهما، هذا يعني أنك يجب أن تذهبي إلى جميع الأماكن التي تستعملين فيها الفئة Product وتغيري الكود بحيث لا يقبل أقل من 50 درهما. في المثال استعملت الفئة مرة واحدة، ولكن في موقف حقيقي فستكون هذه الفئة مستعملة في الكثير من الأماكن، ويصعب معرفتها كلها.
لنرى الآن لو كنا استعملنا setter method منذ الأول
class Product {
private int price;
public void setPrice(int pr) {
price = pr;
}
}
public class Main {
public static void main(String[] args) {
Product p = new Product();
p.setPrice(20);
}
}الآن لو طلب منك صاحب المخزن عدم السماح بإدخال ثمن أقل من 50 درهم، فسيكفيك الذهاب إلى setPrice وتغييرها بحيث لا تقبل قيمة أقل من 50
public void setPrice(int pr) {
if (pr >= 50) {
price = pr;
} else {
System.out.println("The price is under the minimum limit");
}
}لهذا يتم تفضيل private على باقي الmodifiers،سواء public أو protected أو package
المبرمج الجيد هو مبرمج كسول :lol:، فعندما تكتبين برنامجك بشكل جيد ستكونين مرتاحة بشكل أكبر وتتجنبين المشاكل المتعبة.
.
تم تعديل هذه المشاركة بواسطة herch في 13 ديسمبر 2009 في 23:55
شكراَ جزيلاً على الإجابة يا أخ عصام ,
ستكون لي عودة إذا وجدت شيء غامض بالنسبة لي ..
..
تم تعديل هذه المشاركة بواسطة إشراقــه فجــر في 14 ديسمبر 2009 في 00:34
سبحآن الله وبحمده .. سبحآن الله العظيم .. ,
شرح أكثر من رائع , أتضحت لي الصورة .. ,
الله يجزاك الجنة ..
سبحآن الله وبحمده .. سبحآن الله العظيم .. ,
تبادر في ذهني سؤال (و حقيقة لا أعلم مدى صحته ) !
هل في عدم أستخدام protected , نوع من الحماية للبيانات ؟
سؤال غبي , لكن أحتاج الإجابة ..
سبحآن الله وبحمده .. سبحآن الله العظيم .. ,
هل تعنين عند استخدام private بدل protected؟؟
نعم ,
عند إستخدام private , هل البيانات ستكون محمية أكثر ؟؟ ..
سبحآن الله وبحمده .. سبحآن الله العظيم .. ,
private تحمي ال-access لل-member. فهي لا تسمح بال-direct access لل-private member من خارج ال-class .
شكراجزيلا على الاجابه .. herch,NullOne :)
كنت اختار run main Project :blush:
جزاكم الله خيراعلى التوضيح
استغفر الله واتوب اليه ..~
لآاله الاانت سبحانك انى كنت من الظالمين ..~
كيف اعمل package استخدمها فيما بعد و في مشاريع اخرى ؟؟؟؟
تم تعديل هذه المشاركة بواسطة sameh mahmoud في 16 ديسمبر 2009 في 16:36
سبـــــحــــان الله و بحمده سبحان الله العظيم

تعمل الحزمة بشكل عادي وتضيف لها الفئات الخاصة بها، ثم تضعها في ملف jar، وفي الفئات التي ستسعمل الحزمة تعمل import لها، وبالطبع لازم تضيف الملف jar للCLASSPATH
تم تعديل هذه المشاركة بواسطة herch في 16 ديسمبر 2009 في 17:04
يجب أن تفكر في تصميم الكود
تتعلم بعض الأشياء عن design pattern و refactoring
تتعلم بعض الأشياء عن thread safe
تحياتي
شكرا للأخ علاء
سؤال اخر (انا اسف انه سؤال بدائي )
و هو : ما هو الـ collection الذي يؤدي وظيفة الجدول ؟؟ , او بمعنى اخر يؤدي وظيفة المصفوفة ذات البعدين [][] و لكن يحتوى على خاصية مسح سطر معين و كذلك اضافة سطر جديد ؟؟
و شكرا جدا
سبـــــحــــان الله و بحمده سبحان الله العظيم

هل تعني مثل dictionary؟؟ يعني يكون فيه أزواج key->value
ليسkey value يا عصام هو عبارة عن اعمدة و صفوف , بحيث تقاطع صف مع عمود يعطي قيمة معينة , مثل المصفوفة ذات البعدين
هل وصلت الفكرة ؟؟؟
سبـــــحــــان الله و بحمده سبحان الله العظيم

لا أدري إذا كانت موجودة، لكن ممكن تعمل collection ذات بعدين، أو collection مكونة من collection، كالمصفوفة ذات بعدين التي هي في الحقيقة مصفوفة مكونة من مصفوفات
ArrayList<Arraylist<String>>
السلام عليكم ورحمه الله وبركاته ..
جربت الكود في هذا الموضوع
تظهر لي النافذة في الزاوية اليسرى العليا , وأنا أريد ظهورها في منتصف الشاشة ؟
ماهو الكود اللازم لفعل ذلك ؟ .
بحثت لكن لم أجد أو ربما لم أبحث جيداً :sad: ..
و لم نتطرق إلى التعامل مع النوافذ حتى الآن ..
وشكـراً جزيلاً ..
تم تعديل هذه المشاركة بواسطة إشراقــه فجــر في 17 ديسمبر 2009 في 02:47
سبحآن الله وبحمده .. سبحآن الله العظيم .. ,
استعملي setLocationRelativeTo ومرري لها null
JFrame frm = new JFrame(); //... frm.setLocationRelativeTo(null); frm.setVisible(true);
أضفت هالسطر ..
frm.setLocationRelativeTo(null);
ونفذ المطلوب ..
المعذرة :sad:..
سبحآن الله وبحمده .. سبحآن الله العظيم .. ,
herch كتب:استعملي setLocationRelativeTo ومرري لها null
JFrame frm = new JFrame(); //... frm.setLocationRelativeTo(null); frm.setVisible(true);
شكراً جزيلاً ..
تم تعديل هذه المشاركة بواسطة إشراقــه فجــر في 17 ديسمبر 2009 في 03:21
سبحآن الله وبحمده .. سبحآن الله العظيم .. ,
لماذا تحتاج هكذا شيء يا سامح؟
كما قال عصام بإمكانك أن تستخدم مصفوفة المصفوفات فينتج عندك بعد ثاني
تحياتي
السلام عليكم ورحمه الله وبركاته
اولا اعتذرعن طرح سؤالى بهذه الطريقه لكنى محتاجه لمساعدتكم ولم اعرف كيف اوضحه :blush:
ثانيا السؤال كما يلي :)..
The CPU class is described as follows:
• One attribute:
clockSpeed – a double value representing the clock speed of the CPU object. Note: clock speed of a modern computer may be something like 2.5GHz, so a value you could use for testing purposes is 2.5.• Two constructors:
A default constructor.
A constructor that initializes the attribute, where cs is the clockSpeed.
• Two methods:
getClockSpeed() – return the clockSpeed value associated with the CPU object.
setClockSpeed(cs) – change the clockSpeed value associated with the CPU object, where cs is the new value.
انا قمت بحله كما يلى مع انى لم افهم الملاحظه :( لااعلم مدى اهميتها لكنى اتمنى توضيحها :
public class CPU
{
private double clockSpeed;
public CPU(double cs)
{
clockSpeed = cs;
}
public double getclockSpeed()
{
return clockSpeed;
}
public void setclockSpeed( double cs)
{
clockSpeed = cs;
}
}
ايضا الكلآس test كتبته باكثر من طريقه لكنه مليء بالاخطاء :( ..
public class CPUTest
{
public static void main(String args[])
{
CPU cpu1=new CPU();
cpu1.getclockSpeed();
}
}استغفر الله واتوب اليه ..~
لآاله الاانت سبحانك انى كنت من الظالمين ..~
هذا الموضوع مغلق.
