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

اختبر نفسك مع جافا

مغلقرائج
بدأه nardien28 في 6 أكتوبر 2006 · 70 رد · 13,013 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26

بالفعل أخ malek-sa هذا الجواب غريب من المشاركين!!

لا يمكن ل interface عمل implement لأي شيء آخر!!

implement تعني تحقيق أي كتابة body لميثود .. ومن الخطأ وجود تحقيق لميثود في ال interface

أرجو التفاعل !!

فحنوت ألثم جرحه الرعافَ فانتكأت جراحي..

وهمت على خدي الدموع فقلت يا روحي وراحي..

هلّا رحمتَ قلوبنا .. وعدلت عن هذا الرّواحِ ِ ..؟

فأجابني البطل المسجّى هازئاً بيَ .. باقتراحي

كفكف دموعك ليس في عبراتك الحرّى ارتياحي

هذي سبيلي .. إن صدقت محبتي .. فاحمل سلاحي

Sun Certified Java Programmer

#27
اقتباس

6-في أي صف مجرد abstract : يشترط وجود طريقة واحدة على الأقل مجردة

فعلا كلامك صحيح و لكن اذا لم تكت اي ميثود abstract سيفقد الكلاس فائدته

سؤال بسيط ( مش للخبراء )

اكتب كلاس يقوم بطباعة اسمك مثلا باستخدام

System.out.print()

بحيث لا يحتوي هذا الكلاس الميثود main

منقطع من حين لاخر

#28

....

6 لا يشترط وجود أي طريقة مجردة..

بالمناسبة،، لا تفقد الفئة المجردة فائدتها إذا لم تكن فيها أي فئة مجردة.

#29

17 . ان وسم طريقة ما بأنها native أي مكتوبة بلغة ++C أو C يجعل وسمها بـ :

Synchronized مقبول

Final مقبول

وللإضافة أيضا static مقبوول

سيمضي ركبنا العملاق لن يركع .. بإيمان لغير الحق لا يصدع

عزيزا شامخا كالمجد بل أروع .. فسجل أيها التاريخ ما تسمع :

فلسطين لنا الآمال والمطمع .. نعاهد أن نحررها وأن ترجع

ونقسم نستعيد الأرض أو نصرع .. ويبقى رمزنا الزيتون والمدفع

Palestine.gif

#30

بالمناسبة،، لا تفقد الفئة المجردة فائدتها إذا لم تكن فيها أي فئة مجردة.

-------------------

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

بالاضافة الى ميثود تختلف من كلاس الى اخر و هي ال abstract method

ما الفائدة من كلاس abstract اذا كان لا يحتوي على اي ميثود astract ؟؟

منقطع من حين لاخر

#31

انا اوافق الأخ ابو الفؤاد في كلامه

الفئة المجردة الفارغة تكون مفيدة في حال كانت interface مثل الواجهة الفارغة Seriable

ولكن الفئة المجردة الفارغة ستضيع علي فرصة الوراثة من اي صف اخر

سيمضي ركبنا العملاق لن يركع .. بإيمان لغير الحق لا يصدع

عزيزا شامخا كالمجد بل أروع .. فسجل أيها التاريخ ما تسمع :

فلسطين لنا الآمال والمطمع .. نعاهد أن نحررها وأن ترجع

ونقسم نستعيد الأرض أو نصرع .. ويبقى رمزنا الزيتون والمدفع

Palestine.gif

#32

إليك فائدتين:

1- تسهيل تنفيذ عمل واجهة معينة تريد منها طريقة أو طريقتين! مثلا لو نظرت إلى الفئة المجردة MouseListener فإنك ستجد 5 طرق مجردة.. وإن أردت الاستماع فعليك أن تبني فئة كاملة تنفذ كل هذه الأوامر.. لكنك بالمقابل تستطيع استعمال MouseAdapter الفئة المجردة وتنفذ الأمر الذي يعجبك فقط.

الواجهة MouseListener http://java.sun.com/j2se/1.4.2/docs/api/ja...seListener.html

الفئة المجردة MouseAdapter

http://java.sun.com/j2se/1.4.2/docs/api/ja...useAdapter.html

myButton.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
System.out.println("Ahleeeeen");
}
});

2- صناعة فئة لا تريد عمل مكونات منها مباشرة ،، بل تريد دائما أن يقوم المبرمج بعمل نسخة خاصة به بعمل وراثة لها.

 
public abstract class Entity{
String name;
String address;
public Entity(String name, String address){
this.name=name;
this.address=address;
}
public String getName(){
return name;
}
public String getAddress(){
return address;
}
}

---
public class Person extends Entity{
public Person(String name, String add){
super(name, add);
}
}
--
public class Company extends Entity{
public Company(String name, String add){
super(name, add);
}
}

لاحظ معي أن فئة Entity عبارة عن حاوي لبعض المعلومات عن شخص قانوني.. الأشخاص القانونيون هم الفرد والمؤسسة والشركة ،، والشركة المحدودة ،، والعامة.... الموضوع ومافيه، أننا لا نريد أن نعمل New من Entity لكننا نريد عمل فئات ترثها كل له حقيقة موجودة..

#33

بالنسبة للنقطو الاولى

كلامك صحيح

الـ Adapter فهو من اهم الفوائد للـ abstract class

بالنسبة للنقطة الثانية

في الكلاس Entity يمكن عمل

Constructor بحيث يكون private و بالتالي لا يمكن انشاء اوبجكت منه ، و في نفس الوقت يمكن وراثته .

منقطع من حين لاخر

#34

قصدك يكون المنشئ protected أو package..

إذا كان private فلا يمكنك وراثته إذا كان المنشئ الوحيد في هذه الفئة!

إذا كان package فسيستطيع أن ننادي على new من الفئات التي في داخل نفس الحزمة وهذا ما لا نريده!

ونفس الموضوع إذا كان protected ..

....

بغض النظر عن إمكانية فعل هذا بالتحكم بالمنشئ أو الباني.. فإن مفهوم التجرد لهذه الفئة أفضل من التحكم في الباني نفسه وفرض القيود عليه..

عندما أتكلم عن Entity ما ،، فإن المستمع يعرف مباشرة أني أتكلم بتجرد ،، أو بشكل عام.. وهذا هو الفن في عرض المفهوم في مخيلتنا ونقله إلى الحاسب.. ولهذا أقول أن Entity هو فئة مجردة! أو abstract

فنحن نستطيع أن نصنع وحدة أو Entity جديد... مما يُفهم منه أن الباني public .. ولكن في نفس الوقت نحن نتكلم بتجرد.. فنحن حقيقة نتكلم عن مؤسسة أو شخص قانوني عموما!

-----

المثال الأول: وهو استعمال Adapter ،، تمثل فائدة ((تقنية)) في البرمجة نفسها!

المثال الثاني: وهو بناء فئة مجردة،، تمثل فائدة ((شيئية التوجه)) مباشرة.. وهي أبلغ في توضيح الفائدة الفلسفية في موضوع التصميم الشيئي التوجهي!

أعتذر عن الإطالة!

#35

كيف يمكن لنا تنفيذ برنامج بدون دالة main ?

:huh:

#36
اقتباس
كيف يمكن لنا تنفيذ برنامج بدون دالة main ?

لم افهم هل السؤال متعلق بـ Adapter Pattern ؟؟

منقطع من حين لاخر

#37

أخي أبو الفؤاد .. نسيت انك سألت ...

اقتباس
سؤال بسيط ( مش للخبراء )

اكتب كلاس يقوم بطباعة اسمك مثلا باستخدام

System.out.print()

بحيث لا يحتوي هذا الكلاس الميثود main

سيمضي ركبنا العملاق لن يركع .. بإيمان لغير الحق لا يصدع

عزيزا شامخا كالمجد بل أروع .. فسجل أيها التاريخ ما تسمع :

فلسطين لنا الآمال والمطمع .. نعاهد أن نحررها وأن ترجع

ونقسم نستعيد الأرض أو نصرع .. ويبقى رمزنا الزيتون والمدفع

Palestine.gif

#38

ما الفرق بين انشاء object في الـ constructor أو أئناء تعريفه في الـ datamember

كمثال انشاء غرض من الكلاس DBM

public class Class{
private static DBM dbm = new DBM("oracle");
Class(){}
.
.
.

و

public class Class{
private static DBM dbm;
Class(){
dbm = new DBM("oracle");
}
.
.
.
.

SCJP 5.0

#39

من المعروف أن static تكون مشتركه لجميع ال instance الموجوده

فلذلك من الأفضل لنا أن نعطيها القيمه وقت تحميل الكلاس

public class Class{
private static DBM dbm = new DBM("oracle");
Class(){}

في المثال الثاني ستقوم بتغيير الstatic في كل مره ننشأ instance وهذا غير مرغوب فيه لأنه يخالف مفهوم static

public class Class{
private static DBM dbm;
Class(){
dbm = new DBM("oracle");
}
#40

{عيسى} كتب:
كيف يمكن لنا تنفيذ برنامج بدون دالة main ?

:huh:

نسيت الموضوع ..! :rolleyes:

المهم الفكرة تكمن في استخدام static block كالتالي



static{
System.out.println("Essa..!");
}

}
public class Test{

منقطع من حين لاخر

#41

شكراَ أبو الفؤاد

بحثت قليلاً عن الأمر ووجدت مايلي

أن التفسير لما يحدث هو أن JVM تقوم بالبحث عن static initializer blocks وتقوم باستدعائه وقت تحميل الكلاس

بعد تنفيذه ستقوم بالبحث عن الداله main ان لم تجدها سترسل اكسبشن ويمكنك تفاديه في وضع System.exit(0) في نهاية البلوك ( وهذا ماحصل في برنامجك )

فائدة الstatic initializer من اسمه أنه يعطي قيم للمتغيرات أو static attribute في الكلاس ويمكنك وضع أي عدد منها في برنامجك

للإستزاده

http://java.sun.com/developer/JDCTechTips/2004/tt0406.html#2

جميل جداً نريد مثل هذه :)

#42

السلام عليكم

ماذا تعتقدون output كل من البرامج التاليه :

1-

public class A{

class B { static int i;}

}

2-

public class A{

public class B{}

}
#43

بالنسبة للثاني ظننت أنه سيعطي compilation fail لأنه لا يصح وجود كلاسين public في نفس الملف!! لكنه compiled بدون أخطاء

الأول ظننت أنه سيترجم بدون أخطاء .. لكنه أعطى خطأ أن الكلاسات الداخلية لا يصح أن نعرف فيها datamember من النوع static

أنا اندوخت!!!

I'm Throwing Exceptions!!!!

فحنوت ألثم جرحه الرعافَ فانتكأت جراحي..

وهمت على خدي الدموع فقلت يا روحي وراحي..

هلّا رحمتَ قلوبنا .. وعدلت عن هذا الرّواحِ ِ ..؟

فأجابني البطل المسجّى هازئاً بيَ .. باقتراحي

كفكف دموعك ليس في عبراتك الحرّى ارتياحي

هذي سبيلي .. إن صدقت محبتي .. فاحمل سلاحي

Sun Certified Java Programmer

#44

الأول يعطي Compilation error والسبب أن Inner classes لايستطيع تعريف متغير static

الثاني صحيح لأنه بامكانك تعريف اكثر من public class يكون داخل public class رئيسي أو داخل scope واحد

أتمنى تخليني أدوخ واشوف اسئله !!

#45

لو سمحتم عندي برنامجين الاول مستخدم فيه static initializer والثاني اهوه نفس البرنامج بس بدون static iniializer والنتيجه الي يطبعها بالبرنامجين نفس الشي ودي بس احد يقولي شنو فايدة ststic analizer.

البرنامج رقم واحد مستخدم فيه static analizer

import java.util.Arrays;


class SieveOfEratosthenes {

		 static boolean[] isPrime;
		 final static int pSize = 100;

		 static {					// begin the static initializer
			 initializeIsPrime();
		 }

 static void initializeIsPrime() {

			   isPrime = new boolean[pSize];
			   Arrays.fill(isPrime,true);			  
			   isPrime[0] = isPrime[1] = false; 
			   for (int i = 2; i < isPrime.length; i++) {
				  if (isPrime) {
					 for (int j = 2*i; j < isPrime.length; j+=i) {
						   isPrime[j] = false;
					}
				 }
			  }
 }

 static void printPrimes() {
 	 initializeIsPrime(); 
		  for (int i = 0; i < isPrime.length; i++) {
			 if (isPrime) {
				 System.out.print(i+" ");
			}
		  }
		 System.out.println();
   }
 }

 public class Eratosthenes {
	  public static void main(String[] args) {	  
		 SieveOfEratosthenes.printPrimes();
	  }
 }

البرنامج الثاني بدون استخدام static analyzer

 class SieveOfEratosthenes {

		 static boolean[] isPrime;
		 final static int pSize = 100;

	  //   static {					// begin the static initializer
		//	 initializeIsPrime();
		  //}

 static void initializeIsPrime() {

			   isPrime = new boolean[pSize];
			  // Arrays.fill(isPrime,true);
			   for (int i=0;i<pSize;i++)
				  isPrime=true;
			   isPrime[0] = isPrime[1] = false; 
			   for (int i = 2; i < isPrime.length; i++) {
				  if (isPrime) {
					 for (int j = 2*i; j < isPrime.length; j+=i) {
						   isPrime[j] = false;
					}
				 }
			  }
 }

 static void printPrimes() {

		  for (int i = 0; i < isPrime.length; i++) {
			 if (isPrime) {
				 System.out.print(i+" ");
			}
		  }
		 System.out.println();
   }
 }

 public class Eratosthenes {
	  public static void main(String[] args) {	  
		 SieveOfEratosthenes.printPrimes();
	  }
 }

تم تعديل هذه المشاركة بواسطة CS25 في 20 نوفمبر 2006 في 03:55

#46

السلام عليكم

أخي CS25

static initializer تقوم بإعطاء قيم للـStatic Attribute التي لديك

هي ليست ضروريه بمعنى أن الكومبايلر سيعطيك خطأ إن لم يجدها ، ولكنها مفضله لدى المبرمجين لأن static member لاتحبذ أن تكون داخل Constructor والسبب لأنها عامه على مستوى الكلاس وليست على مستوى instance

في مثالك هناك واحد static members وهو عباره عن isPrime array

لذلك عندما تريد استخدام static initializer فسوف تقوم بملئ عناصر isPrime وهذا ماحذث لديك في المثال الأول

 static {					// begin the static initializer
			 initializeIsPrime();
		 }

static void initializeIsPrime() {

			   isPrime = new boolean[pSize];
			   Arrays.fill(isPrime,true);			  
			   isPrime[0] = isPrime[1] = false; 
			   for (int i = 2; i < isPrime.length; i++) {
				  if (isPrime) {
					 for (int j = 2*i; j < isPrime.length; j+=i) {
						   isPrime[j] = false;
					}
				 }
			  }
}

في البرنامج الثاني المفترض أن لايقدم مثل الأول والسبب أنك تستدعي فقط PrintPrimes

ولاينفذ الدالهinitializeIsPrime() والسبب أن static method لاتنفذ إلا باستدعائها بعكس static initializer الذي ينفذ بدون استدعاء وقت تحميل الكلاس

#47

مافي تفاعل :(

ماهو مخرج الكود التالي :

 
public class A
{
	  private int i;
	  static int m=0;
 public A(){
	   go(i++);
}
private void go(int j)
{
	i=++j;
	m+=5;
	  m+=++i;

}
public static void main(String[] args)
{
   A a=new A();
	System.out.println("i is "+a.i);
	  System.out.println("m is "+m);
}
}
#48

output :

=======

i is 2

m is 7

#49

أظن سيعطي Compile error :

لأن i لا يمكن الوصول لها فهي private

فحنوت ألثم جرحه الرعافَ فانتكأت جراحي..

وهمت على خدي الدموع فقلت يا روحي وراحي..

هلّا رحمتَ قلوبنا .. وعدلت عن هذا الرّواحِ ِ ..؟

فأجابني البطل المسجّى هازئاً بيَ .. باقتراحي

كفكف دموعك ليس في عبراتك الحرّى ارتياحي

هذي سبيلي .. إن صدقت محبتي .. فاحمل سلاحي

Sun Certified Java Programmer

#50

استاذي أياد يبدو أنك لم تلاحظ أنها في نفس الكلاس

هذا الموضوع مغلق.

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