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

السي شارب مقابل الجافا - نقاش علمي هادف

رائج
بدأه سلفي وأفتخر في 23 مايو 2010 · 96 رد · 13,994 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#26

جزاك الله خيراً أخي طارق.

أنا في الحقيقة بقي لي رسالة واحدة أتكلم فيها بصفة عامة عن لغة السي شارب كمقدمة دون الدخول في تفاصيل .. كالرسالتين السابقتين ..

وكنت أنتظر من الأخوة محبي الجافا الرد بردود مماثلة أو أفضل في نقطة الهيكل المعماري للغة وتاريخ بسيط عنها للمعرفة العامة للجميع ولكن لم يحدث بعد :)

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#27

الجافا لغة أنشأت من طرف شركة Sun وظهرت للوجود سنة 1995.

من بين أهداف الجافا هو توفير لغة بسيطة، كائنية التوجه، آمنة ( حيث يتم حجز ونحرير الذاكرة بدون تدخل المبرمج؛ الإدارة السيئة للذاكرة هي مصدر المشاكل في كثير من برامج C/C++)

الجافا، مثل لغات أخرى ( Jythonـ Groovy، JRuby ...) تشتغل على بيئة التشغيل جافا Java Virtual Machine.

بيئة التشغيل جافا تقوم بتنفيذ أوامر ال Byte Code، هذه الأوامر تكون موجودة في ملفات class الناتجة عن عملية ال compile لشيفرة الجافا.

post-181903-004933800 1276727828_thumb.g

بيئة التشغيل جافا متوفرة بالنسبة لعدة منصات، وهذا يمكننا من تشغيل برامج الجافا في المنصات التي تتوفر على JVM.

post-181903-022466700 1276727029_thumb.g

من بين الأعمال المنوطة ببيئة التشغيل جافا:

-- تفسير أوامر ال byte code.

-- تحميل الفئات classes الخاصة بال Java API.

-- إدارة الذاكرة (Garbage collector)

بيئة التشغيل المستعملة حاليا هي ال Java HotSpot Virtual Machine، ومن بين مميزاتها أنها تستعمل JIT (Just In Time Compiler) Compiler

يوجد هناك بيئات تشغل أخرى مثل Oracle JRockit JVM، والتي يبدو أنه سيتم دمجها مع ال HotSpot VM في النسخة القادمة Java7، بعد أن تم شراء Sun من طرف Oracle.

يتم التحكم في ال specifications الخاصة بلغة الجافا من طرف منظمة ال JCP، والتي تظم شركات مثل IBM و RedHat و Google و Intel ...

...

المرفقات
jvm.gifbytecode.gif

تم تعديل هذه المشاركة بواسطة herch في 17 يونيو 2010 في 01:53

2
#28
اقتباس
الجافا، مثل لغات أخرى ( Jythonـ Groovy، JRuby ...) تشتغل على بيئة التشغيل جافا Java Virtual Machine.

لي تعقيب بسيط, كل اللغات السابقة مكتوبه بالجافا وذلك للإستفاده من الإمكانيات التي تقدمها JVM وقت صنع اللغه, ووقت العمل عليها, حيث إستخدام إحدي هذه اللغات يمكنك من التكامل مع الجافا في مشاريعك , ربما نجد قريبا JJava (جافا مكتوبه بالجافا :D )

تم تعديل هذه المشاركة بواسطة {هويدي} في 17 يونيو 2010 في 02:03

1
#29
{هويدي} كتب:

لي تعقيب بسيط, كل اللغات السابقة مكتوبه بالجافا وذلك للإستفاده من الإمكانيات التي تقدمها JVM وقت صنع اللغه, ووقت العمل عليها, حيث إستخدام إحدي هذه اللغات يمكنك من التكامل مع الجافا في مشاريعك , ربما نجد قريبا JJava (جافا مكتوبه بالجافا :D )

الحقيقة أني لا أعلم بأي لغة تمت كتابة ال compiler الخاص بهذه اللغات، كل ما أعلم أن هذه ال compilers تنتج byte code قابل للتقسير من طرف ال JVM.

تم تعديل هذه المشاركة بواسطة herch في 17 يونيو 2010 في 02:11

1
#30

إنها حقيقة مكتوبة بالجافا :

اقتباس
Jython is a Java implementation of Python

المصدر

اقتباس
JRuby 100% pure Java implementation

المصدر

بالنسبة ل Groovy فإن كل الشوهد تؤكد أنها كتبت بالجافا , لكني لم أجد هذه الكلمة مطلقة في مكان ما

#31

جزاكم الله خيراً أخوتي على إحياء النقاش.

الـ Ruby والـ Python ... لغات يتم دعمها على منصات لغات أخرى .. فمثلاً الدوت نت IronPython و IronRuby لغات تعمل تحت منصة الدوت ونت .. وكذلك التي ذكرها الأخ herch تعمل على منصفة الجافا وهكذا.

إذن نستكمل النقاش .. وجزاك الله خيراً أخ herch على المعلومات المفيدة خاصة نقطة الـ JIT فمعلوماتي عن الجافا أنها تستخدم Interpreter ولم أكن أعلم بوجود أي Compilers إلا الآن! معلومة جديدة!

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#32

الأن نبدأ مقدمة سريعة عن السي شارب .. ونتكلم هنا عن ماذا قدمته السي شارب.

في البداية كما اتفقنا أن الـ .NET هو نقلة نوعية في عالم البرمجيات لأنه - كما تحاول ميكروسوفت ووضحنا من قبل - حل كثير من المشاكل التي تقابل كثير من مبرمجي اللغات المختلفة أو تحاول أن تعالج كثير من القصور الموجود في اللغات الأخرى والمنصات المختلفة. فلذا كان من الطبيعي أن يتم اختراع لغة جديدة من الألف إلى الياء وهي السي شارب. تشبه السي شارب إلى حد كبير طريقة كتابة الجافا لذا انتشر بشدة أن السي شارب ما هي إلى تقليد للجافا. وهذا غير دقيق لأن السي شارب والجافا يعتبران من عائلة السي كـ Object C و C++ وغيرها لذا فهما يشتركان في نفس الطريقة.

ولكن إن كان يقصد بهذا القول أن السي شارب قامت بعمل نفس مزايا الجافا في بداية ظهورها فهذا ما فعلته الجافا من تطبيق مبدأ الـ OO والـ Classes الذي ظهر في السي بلس بلس وأيضاً ما فعلته السي بلس بلس في مبدأ المؤشرات من السي. طبعاً هذا أمر طبيعي. فما فائدة أن يتم بناء لغة بدون النظر إلى مميزات اللغات الأخرى وعيوبها. فبهذا سنقوم باختراع العجلة للأبد.

ولكن الحقيقة هنا هي أن السي شارب بها كثير من الـ Constructs الذي يتبع VB6 أو C++ وعلى سبيل المثال إمكانية أن تأخذ الدالة عدد متغير من المتغيرات باستخدام param مثلاً وغيرها كما في الـ VB6 وإمكانية Operator Overloading الموجودة في الـ C++ وأيضاً الـ Callback Methods باستخدام الـ Delegates.

أيضاً تدعم السي شارب الكثير من المزايا الموجودة في الـ Functional Languages مثل Haskel أو LISP .. وهذه المزايا منها مثلاً الـ Lambda Expressions والـ anonymous types. وأيضاً تدعم الـ Language Integrated Query أو LINQ مما يجعلها مميزة في عالم البرمجة هذه الأيام.

فهنا نحن نقول أن السي شارب يمكن اعتبارها مجموعة من اللغات مدمجة مع بعضها البعض في إطار أنيق وتحت منصة قوية تجعلها تدعم المبرمج بكل ما يحتاجه بسهولة. فهي مكتوبة بطريقة Clean مثل الجافا إن لم يكن أفضل. وبسيطة الاستخدام كـ VB6 وتدعم كثير من مزايا القوة والمرونة كما في C++.

صدرت من السي شارب عدة إصدارات متلاحقة مع إصدارات الدوت النت .. كانت بدايتها عند إصدار النسخة 1 و 1.1 .. ثم تم إصدار 2 و 3 و 3.5 و أخيراً 4

دعونا نستعرض بعض المزايا في كل إصدارة لنستعرض لا للحصر.

كل الإصدارات تدعم الآتي:

* لا حاجة لكتابة المؤشرات بعد الآن (اللغة تعطيك السماحية أن تكتب المؤشرات إن أردت)

* التحكم التلقائي في الذاكرة عن طريق الـ Garabage Collector

* كل الـ Constructs المعروفة كالـ Classes و Interfaces و Delegates و Enums و Structrures ... وغير ذلك.

* إمكانية الـ Operator Overloading كما في السي بلس بلس وهذا للفئات الخاصة بك بكل سهولة ودون تعقيد.

* الدعم الكامل للـ Attribute based programming بمعنى أنه يمكنك وضع بعض الكلمات التعبيرية فوق أي فئة لتضيف له إمكانية جديدة ليست فيه بكل سهولة.

وعندما ظهر الإصدار 2 وكان في عام 2005 تم تدعيم الآتي:

* إمكانية بناء الفئات والدوال من نوع Generic

* دعم ال anonymous methods والتي تستخدم محل الـ delegates أو ال call backs بكل سهولة عند الحاجة بمعنى أصح كأنها inline function

* الكثير من التعديل والتبسيط والتسهيل في الـ Model الخاص بالـ Delegates و ال Events

* إمكانية تعريف فئة على أكثر من ملف باستخدام partial keyword

وعندما ظهر الإصدار 3 و يليه مباشرة 3.5 في 2008 تم تدعيم الآتي:

* دعم الـ LINQ وهو عملية استعلام Strongly Typed داخل اللغة ويمكنها الاستعلام تقريباً من أي شيء يحتوي على بيانات بدءاً من الأ Arrays ومروراً بالـ files وال XML وانتهاءً بقواعد البيانات.

* دعم الـ Anonymous types فيمكنك الآن بناء فئة كاملة تحتاجها لفترة قصيرة في البرنامج at runtime

* دعم الـ extension methods والتي تمكنك من إضافة دوال مثلاً على فئة معينة بدون subclassing وبكل سهولة

* دعم الـ lambda expression والذي يسهل التعامل مع الـ delegates أكثر وأكثر وأكثر

* دعم الـطريقة الجديدة لتعريف الـ objects والمسماه بالـ object initialization

وعندما ظهر الإصدار 4 في 2010 النسخة النهائية وهو الحالي طبعاً تم دعم الآتي:

* دعم الـ Optional parameters في الدوال

* دعم الـ dynamic keyword والذي أضاف للغة نكهة الـ dynamic languages

* تبسيط أسهل وأقوى في التعامل مع الـ COM

* دعم الـ covariance وال contravariance للـ generic types مما يضيف إليها قوة فوق قوة.

في النهاية هناك ملحوظة هامة .. وهو أن لغة السي شارب تنتج ما يسمى بالـ managed code لأنه تحت مظلة الدوت نت .. وما دون ذلك يطلق عليه unmanaged code من وجهة نظر اللغة.

جزاكم الله خيراً .. وأنتظر مشاركات أخوتي من محبي الجافا إن أرادوا أن يستعرضوا ببساطة مزايا اللغة وإصدارتها الحالية والسابقة.

جزاكم الله خيراً

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#33

فيما يخص اإختلافات بين النسخ، فالنسخة التي جلبت تغييرات كبيرة هي النسخة الخامسة (أو النسخة 1.5)

من بين أهم المميزات التي جاءت بها هذه النسخة :

  • ال Generics
  • ال Enums
  • إمكانية تمرير عدد متغير من ال arguments ل method ما
  • ال AutoBoxing، وهو إمكانية التحويل تلقائيا من ال primitive type إلى ال Wrapper المقابل له، والعكس
  • ال Annotations
  • Java Management Extensions JMX

بالنسبة لل Operator Overloading و Optional parameters فالجافا لا تدعمهما.

ال lambda expression ( لا أعلم ما هي !! هل لها علاقة بال closures؟)

ال anonymous methods ليست مدعومة. عادة يتم كتابة ال method داخل interface، ثم ننشئ anonymous class تعمل implement لهذه الواجهة وتطبق ال method

ال Attribute based programming تقابله ال Annotation في الجافا، إذا كنت فهمتها بالشكل الصحيح.

الجافا تدعم ال reflection، لكن دون إمكانية التعديل على البرنامج عند تنفيذه.

الجافا تتوفر على أنواع مختلفة من ال references

  • Strong reference
  • Soft reference
  • Weak reference
  • Phantom reference

الجافا تدعم ال unicode

الجافا تتيح إمكانية تشخيص عملية تحميل الفئات class loading، مما يتيح تحميل الفئات المستعملة من أي مكان، من الشبكة مثلا، أو حتى من الملف التنفيذي نفسه، مثلا لو كانت الفئة (ال byte code) مخزنة في متغير

.....

طبعا مازال هناك الكثير ليُقال، لكن هذا ما لدي حاليا smile.gif. ومن لديه إضافات لا يتردد.

الأسلوب جاف بعض الشيء بالمقارنة مع أسلوب الأخ أحمد laugh.gif

2 −1
#34

جزاك الله خيراً أخي herch فأنا سعيد بالنقاش معك ..

كنت في بداية الموضوع أعلنت أني قمت بتنصيب Eclipse على الجهاز من أجل تجربة ما أراه في النقاش فأنا من محبي التعلم والمعرفة. أقول هذا حتى أوضح أن النقاش ليس حرباً ولكنه تبادل للعلم والمعرفة والفائدة :D

لذا فإن النقاش قد يتطرق إلى دقائق صغيرة جداً جداً فأنا لا أحب أن أترك شيئاً دون أن أفهمه .. وهذا سيجعلنا نبحث أكتر ونقرأ أكثر وربما نتعلم أشياء لم نجدها بعد :)

نحن نتبع هذا الفهرس في النقاش ونحن الآن ما زلنا في النقطة الأولى والتي هي:

1 - Architecture .. سنتكلم هنا عن الهيكل المعماري للغة وعلاقتها مثلاً بالـ CLR والدوت نت .. أو في حالة الجافا علاقتها بالـ Virtual Machine .. هي مقدمة عامة نشرح فيها كلا اللغتين بمنظور لا يحتوي على كثير من التفاصيل (كمشاركتي التي قمت فيها بشرح علاقة السي شارب بالدوت نت مثلاً) وهكذا .. ما هي ال Data types المتوفرة في كل لغة مثلاً بصفة عامة .. طريقة التعامل مع الـ Value and reference types ..

أنا أقترح أن يكتب كلانا برنامج صغيرة وليكن Hello World أو برنامج يجمع رقمان .. ويقوم كلاً منا بعرضه ولكن بالخطوات كاملة .. بمعنى

اعتبرني لا أعرف شيء عن الجافا ولا عن الـ IDE الخاص بها .. فستقوم بعمل مشروع من البداية للنهاية بالـ Screen shots عن كيفية عمل مشروع جديد في الـ Eclipse أو الـ NetBeans وكتابة هذا البرنامج الصغير .. وهذا من أجل أن نقوم بعد ذلك بالتشريح المجهري :D

سنقوم بمقارنة الـ Anatomy بين البرنامجين بلغتي السي شارب والجافا .. وهنا سيتضح كثير من الأمور المبدئية ..

ثم بعد ذلك ننتقل إلى نقاط الفهرس .. موافق؟ ونريد مشاركة من الجميع إن أرادوا طبعاً :D

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#35

بالمناسبة أنا أقصد هنا برنامج Console فقط .. حتى لا ندخل في تفاصيل نحن في غنى عنها الآن.

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#36

ملحوظه, صغيره, غالبا أنت لست بحاجه ل IDE لتطوير معظم البرامج الصغيره, يكفيك ال SDK فقط :P

و في حالة برنامج HelloWorld , أنت لست حتي بحاجه لمحرر نصوص, يكفيك سطر الأوامر فقط :P (لاحظ الأمر cat )

cat > HelloWorld.java  # inspired by "Real programmers do: cat > a.out "
public class HelloWorld{
	public static void main(String[] args){
		System.out.println("Hello World!");
	}
}

javac HelloWorld.java && java HelloWorld

تم تعديل هذه المشاركة بواسطة {هويدي} في 18 يونيو 2010 في 15:09

#37

وكذلك السي شارب :P

أنا الذي أريد أن أتعلم كيفية استخدام الـ Eclipse فليس لدي وقت كما تعلم لقراءة أي شيء الآن خارج مجالي فأستغل هذه المناظرة في التعلم أيضاً :)

تم تعديل هذه المشاركة بواسطة أحمد عبد المنعم في 18 يونيو 2010 في 15:01

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#38

لاحظت التعديل قدراً يا هويدي ..

هل أمر cat هذا خاص بالجافا أم هو خاص بالـ Unix-like operating systems ؟

فمعلوماتي عنه أنه يتعلق بالـ Text files ويستخدم إما لكتابة ملف جديد وإما عرضهم أو دمج أكثر من ملف.

ما قمت به أنت أنك قمت بعمل ملف جديد اسمه HelloWorld.java وكتبت بداخله:

public class HelloWorld{
        public static void main(String[] args){
                System.out.println("Hello World!");
        }
}

وبهذا تم كتابة هذا الملف على القرص الصلب ثم أنك قمت باستدعاء الجافا لتشغيل الملف.

فإن كان فهمي صحيحاً فهذا لا علاقه له من قريب ولا من بعيد بالجافا. لأن هذا يمكنك فعله في الـ DOS مثلاً حسب علمي والله أعلم.

جزاك الله خيراً

تم تعديل هذه المشاركة بواسطة أحمد عبد المنعم في 18 يونيو 2010 في 15:28

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#39

عفوا على المقاطعة واعرف ان هذا نقاش لكنني رايت dynamic variable

ماهو الفرق بين var and dynamic

صراحة لم اجد هنالك فرق هل هذا صحيح ؟؟

In bad state

#40

100% صح أخي أحمد.

#41
X-File كتب:

عفوا على المقاطعة واعرف ان هذا نقاش لكنني رايت dynamic variable

ماهو الفرق بين var and dynamic

صراحة لم اجد هنالك فرق هل هذا صحيح ؟؟

الفرق شاسع .. استخدام object أو var .. لا تعني أن الـ variable غير معلوم .. بل إن الـ Compiler يعرف الـ data type أثناء الـ compile time

بمعنى:

var x = new List<int> { 1, 2, 3 };

x هنا معروف أنه List في ال compile time ..

أما dynamic لا يتم معرفة الـ type إلا في ال run time ..

{هويدي} كتب:

100% صح أخي أحمد.

جزاك الله خيراً

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#42
            var x = "ahmad";
            x = 10;
            Console.WriteLine(x.GetType());

تمام

ربنا يوفقك فعلا جربتها طلعت صح عطاني خطا انو لا يمكنني اسناد لمتغير من نوع نصي قيمة رقمية

سؤالي ماهي فائدة كل واحدة منها

او هل يوجد حالات لاستخدامها

بصراحة بحثت وما استفدت طبعا ان كان حديثي هنا يخلق مقاطعة انا انسحب واعتذر

بالتوفيق ولكم جزيل الشكر

تعديل ....

     var   x = 5.5;
            Console.Write(x.GetType());

لماذا يعتبر الناتج Double هل هناك سبب لم لم يكن الناتج float

هل هذا يدل على ان ال Double افضل من float

تم تعديل هذه المشاركة بواسطة X-File في 18 يونيو 2010 في 22:49

In bad state

#43

هناك الكثير من الأشياء تم اختراعها لأسباب معينة ولكن بسبب كثرة استخدامها بطريقة أخرى اختفى السبب الأصلي لاختراع هذه الأشياء ومن هذه الأشياء var keyword

فهي لم تخترع لتكون مثل var الموجودة في الـ javascript والتي هي dynamic language ويختلف طريقة عملها تماماً عن الـ var في السي شارب وهذا سبب التضارب الآن .. ولكنها اخترعت من أجل عيون الـ anonymous types فهذا المثال يوضح الغرض منها:

   var type = new
            {
                Name = "Ahmed",
                Age = 26
            };

            Console.WriteLine(type.Name);

وهذا لأنه يستحيل عليك معرفة نوع الـ class الذي قمت بكتابته الآن لأنه ببساطة anonymous ولهذا نترك وظيفة التعرف على الـ class للـ compiler باستخدام var

وفي الأصل فإن anonymous classes تم اختراعها من أجل عيون الـ LINQ لذا يمكننا أن نعتبر أن الـ var استخدامها مع الـ LINQ هو بيت القصيد.

ولكن اختلفت استخدامات الناس فمنهم من يستخدمها لسهولة الكتابة .. ومنهم من يستخدمها للغرض الأصلي الذي أنشئت من أجله ومنه من يسيء التعامل معها لظنه أنه توازي عمل var في ال dynamic languages وهذا خطأ كبير.

أما بخصوص الـ dynamic فالوضع مختلف فهي تشبه إلى حد كبير var في ال dynamic languages ولهذا فإن الكود التالي صحيح جداً ففي المرة الأولى يعطيك أنه int والمرة الأخرى double

            dynamic x = 10;
            Console.WriteLine(x.GetType());
            x = 20.4;
            Console.WriteLine(x.GetType());

وأيضاً اختراع dynamic لم يكن من أجل هذه النوعية لأن هذا ضد مباديء الـ C# تماماً والتي تعتمد على ال strongly typed ولكن هي في الأصل اخترعت لتسهيل التعامل مع الـ COM وال dynamic languages فيمكنك وبكل بساطة تشغيل كود python من داخل السي شارب باستخدام هذه الكلمة.

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

var x = 5.5

لماذا اعتبرها الـ Compiler عبارة عن double وليس float

هذا لأن السي شارب تتعامل مع أي رقم غير صحيح بأنه double افتراضياً ولو أردت أن تخبر ال compiler أنك تقصد float فعليك تحديد ذلك مثل الأتي (انظر حرف الـ F بعد الرقم) وستختلف النتيجة وتصبح System.Single وهو الـ .NET Type المقابل للـ float

            var x = 10.4;
            Console.WriteLine(x.GetType());

            var y = 10.4F;
            Console.WriteLine(y.GetType());

جزاك الله خيراً

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#44

يوجد نوعان من الأصناف في الجافا، ال primitive types وال references

ال primitive types الموجودة في الجافا هي : boolean byte char short int float long double. بالنسبة لكل primitive type، توجد فئة مقابلة Wrapper، فمثلا بالنسبة ل int توجد الفئة Integer، بالنسبة ل boolean توجد Boolean وهكذا. الهدف هو استعمالها في حالات لا تقبل إلا ال reference types، في ال generics مثلا. لكن مع ال autoboxing، لع تعد الحاجة لل Wrappers، حيث يتم التحويل تلقائيا من primitive type إلى wrapper والعكس، إذا ما دعت الحاجة.

ال references تمثل الكائنات والمصفوفات.

الفرق بين ال primitive types وال references هو أن المتغيرات من النوع الأول تحتوي على القيمة نفسها، بينما ال المتغيرات من صنف references تحتوي على مؤشر لمكان وجود الكائن، أي عنوانه في الذاكرة.

هذا الأمر يجرنا إلى مسألة ال pass by value و pass by reference، حبث يظن البعض أنه في الجافا يتم تمرير ال primitive types by value، بينما الكائنات يتم تمريرها by reference، وهذا خطأ، حيث يتم دائما التمرير by value، كل ما في الأمر أن ال primitive types تحتوي على قيمتها الفعلية، بينما قيمة ال references هي المؤشر أو العنوان في الذاكرة.

برنامج بسيط باستعمال Netbeans ( لا أستعمل eclipse)

post-181903-005781300 1276895526_thumb.p

post-181903-069310800 1276895510_thumb.p

post-181903-015092500 1276895653_thumb.p

لمن لا يريد استعمال IDE، فيجب أن يكون إسم الملف المصدري هو نفسه إسم الفئة، مع الإمتداد java. أي أن الفئة Main يجب أن تكون داخل الملف Main.java

public class Main {

	public static void main(String[] args) {

		System.out.println("My First Java Application");
	}
}

تم بعد ذلك ننادي على ال compiler

javac Main.java

وأخيرا نشغل البرنامج، بتمرير إسم الفئة فقط إلى البرنامج java

java Main
المرفقات
Capture-New Java Application.pngCapture-New Project.pngCapture-MyJavaApp - NetBeans IDE 6.8.png
1
#45

:) :)

الف شكر الك ربنا يوفقك ويجزيك كل خير

تمام وضحت الفكرة

full option

تعديل

على فكرة نفس مصطلحات السي شارب بالحرف

تم تعديل هذه المشاركة بواسطة X-File في 19 يونيو 2010 في 01:28

In bad state

#46

جزاك الله خيراً أخي herch وأخي XFile

===================================

أما بخصوص السي شارب فأبدأ بالجزء الخاص ببناء البرنامج

في البداية هناك خطأ شائع جداً ومغلوط وهو أنك إن أردت بناء برنامج دوت نت فعليك شراء نسخة من الفيجوال ستوديو أو أنك عليك تنصيب النسخة المجانية حتى من الفيجوال ستوديو. وهذا خطأ شائع فالـ .NET Framework SDK مجانية تماماً لمن أراد تنصيبها على جهازه فهي تحتوي على مجموعة من الـ compilers و الـ .NET Class Libraries وبعض نماذج الأكواد والـ Documentation أيضاً! فبمجرد تنزيل الـ SDK أصبحت قادراً على بناء برامج بالدوت نت!

يمكنك بناء برنامج سي شارب (أو أي لغة دوت نت عموماً ولكننا نتكلم هنا عن السي شارب بالخصوص) بإحدى الطرق التالية (هذا لشهرتها وليس للحصر فهناك طرق كثيرة وهناك IDEs كثيرة):

1) عن طريق استخدام الـ compiler الخاص بالسي شارب مباشرة وهوcsc.exe وهو مجاني يتم تنصيبه على الجهاز مع الـ SDK

2) عن طريق استخدام محرر نصوص بسيط كـ Notepad ++

3) عن طريق استخدام بيئة تطوير مفتوحة المصدر ومن أشهرها في هذا الصدد SharpDevelop

4) عن طريق استخدام النسخة المجانية من VS والحالية هي Visual C# 2010 Express

5) عن طريق استخدام أحد النسخة الاحترافية من VS كـ Professional أو Ultimate على سبيل المثال.

لن أخوض في كل طريقة الآن .. ولكن هي مقدمة سريعة فقط لإزالة بعض الخلط الموجود لدى البعض.

نأتي الآن لبرنامج Hello World وسأستخدم VS 2010 Ultimate وهو الخيار الخامس. لبناء مشروع من نوع Console فهذه هي الخطوات على الترتيب:

post-53551-021640200 1276947540_thumb.jp

post-53551-066300300 1276947546_thumb.jp

post-53551-058957300 1276947549_thumb.jp

ثم تشغيل البرنامج بالضغط على CTRL + F5 أو من قائمة Build كلاهما واحد:

post-53551-038699500 1276947552_thumb.jp

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

الآن نأتي للنقاط التي تطرق لها الأخ herch وهي الـ Data Types

هناك قسمان من الأنواع في السي شارب .. قسم يطلق عليه Predefined والأخر User Defined ....

السي شارب تدعم 15 نوع Predefined في اللغة .. منهم 13 نوع Simple ... و نوعين non-Simple .. كما هو موضح بالشكل:

post-53551-053862500 1276947996_thumb.jp

وتدعم 6 أنواع User Defined يمكن للمبرمج أن يستخدمهم لتعريف أنواع جديدة في برامجه وهي كالتالي:

  1. Class
  2. Structure
  3. Array
  4. Interface
  5. Enumerators
  6. Delegates

هنا أريد أن أعقد مقارنة بين اللغتين لأن هذا هو أصل الموضوع ..

أنا أرى أن الأنواع الـ Predefined في الدوت نت أكثر من الأنوع الموجودة في الجافا والمسماه بالـ primitives كما أوضح أخي herch .. هل لهذا سبب معين مذكور في الـ Specs في اللغة؟ ربما أجد أن الخلاف فقط في المساحة المحجوزة لكل نوع .. ولكن ما لفت انتباهي كثيراً وهو عدم وجود decimal والمعروف بدقته العالية في التعامل مع البيانات المالية. هل لهذا سبب أيضاً؟

نأتي الآن للتقسيم الذي ذكره أخي herch وهو الـ reference types وال value types ... فبعد أن أوضحنا نوعية الأنواع الموجودة في السي شارب .. هذا الجدول القادم يوضح أي هذه الأنواع reference وأيها value:

post-53551-041332100 1276948583_thumb.jp

أيضاً يبدو لي أن الأخ herch لم يذكر كل الأنواع الـ Reference فكما ذكرت وأوضحت في الجدول السابق يوجد ستة أنواع من الـ reference types موزعة ما بين ال predefined وال user defined ... فأنت فقط ذكرت الفئات والمصفوفات؟ هل يمكنك التوضيح أكثر في جانب هذه النقطة .. جزاك الله خيراً

أما بخصوص نقطة كيفية تعامل الـ .NET مع كلاً من الـ Reference وال value أظنها متطابقة في كليهما .. أذكر أنني عندما كنت أدرس هذه النقطة في السي بلس بلس كانت بنفس الحال الموجودة عليه الآن السي شارب وكذلك الجافا كما أوضح أخي herch وهذا معروف لأن كلاً من اللغتين استقى كثيراً من الأفكار من عائلة السي كما أوضحت سابقاً.

جزاكم الله خيراً

المرفقات
1.jpg2.jpg3.jpg4.jpg5.jpg6.jpg

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#47

ال user-defined reference types في الجافا ثلاثة: class, interface & array.

  • ال class تضم الفئات العادية وال Enums
  • ال interface تضم الواجهات العادية وال Annotations
  • ال array تضم ال.... array

ال struct و ال delegate غير موجودة في الجافا.
ال unsigned types غير موجودة في الجافا، لذلك بدى لك أن ال primitive types في الجاقا قليلة.
بخصوص ال decimal، فهناك الفئة BigDecimal التي تمثل arbitrary-precision signed decimal numbers والتي تقوم بنفس الدور على ما أعتقد. لماذا لا يوجد primitive type خاص بها؟ لأن ال precision غير معروفة مسبقا، وبالتالي لا يمكن إعطائها حجم معين مثل ال primitive types الأخرى.
بالنسبة لل predefined reference types، فلم أفهم الفكرة في الحقيقة، فكل فئة تعتبر type، وبالتالي كل فئة متوفرة في ال Java API أو المكتبات الخاصة بال C# ستعتبر predefined reference type ؟؟!!
الفئة الأم التي ترث منها كل الفئات هي Object
بالنسبة لحجم ال primitive types، فهي كالتالي:

  • boolean, 1 bit, true or false
  • byte, 8 bits, from -128 to 127, inclusive
  • short, 16 bits, from -32768 to 32767, inclusive
  • int, 32 bits, from -2147483648 to 2147483647, inclusive
  • long, 64 bits, from -9223372036854775808 to 9223372036854775807, inclusive
  • char, 16 bits, from '\u0000' to '\uffff' inclusive, that is, from 0 to 65535
  • float, 32 bits
  • double, 64 bits

تم تعديل هذه المشاركة بواسطة herch في 19 يونيو 2010 في 20:36

1 −1
#48
اقتباس
بالنسبة لل predefined reference types، فلم أفهم الفكرة في الحقيقة، فكل فئة تعتبر type، وبالتالي كل فئة متوفرة في ال Java API أو المكتبات الخاصة بال C# ستعتبر predefined reference type ؟؟!!

لا .. فمثلاً هناك Predefined types موجودة في السي شارب كالـ int و long .. وغيرها وهذه value type وليست reference type أي أن قيمتها يتم تخزينها في الـ Stack .. أما الـ Reference type يتم تخزين المؤشر في الـ Stack والقيمة في الـ heap ..

post-53551-021134100 1277019707_thumb.jp

أما بالنسبة لأحجام الأنواع هي في الجدول التالي (مع العلم أول صف في الجدول خطأ لأنه signed وليس unsigned)

post-53551-043070800 1277019705_thumb.jp

ونفس الحال بخصوص الـ object type في السي شارب فكل الفئات ترث منه تلقائياً.

قمت بمقارنة الـ ranges الخاصة بأحجام الأنواع ووجدتها واحدة ولكن عدم وجود الـ unsigned في الجافا يحيرني .. ألا تحتاج أحياناً إلى قيمة لا يمكنها أن تحمل قيمة سالبة وفي نفس الوقت لا تحب أن تهدر كل القيم السالبة بدون استخدام! في الـ unsigned تضم السي شارب الـ scale ليصبح الـ Range من صفر إلى ضعف قيمة الموجب. ..

المرفقات
1.jpg2.jpg

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#49
اقتباس
ولكن عدم وجود الـ unsigned في الجافا يحيرني

يجب أن تسأل James Gosling، فلا فكرة لدي عن السبب. مع أنه يوجد هناك unsigned type، وهو char

يوجد هناك طرق للتعامل مع الأعداد على أنها unsigned، لكنها تبقى فقط تحايلات.

للمزيد عن الموضوع

#50

:D

حسناً أخي herch .. بس صعب أسأله بصراحة :D يعني بعد كل السنين دي أروح أسأله! :D

أضحك الله سنك.

إن لم يكن لديك إضافات أو لدى الأخوة .. فنستسمحكم أن ننتقل الآن إلى هذه النقاط

- أساسيات اللغة .. سنتكلم هنا عن الموضوعات الأساسية لكل لغة بمعنى:

تعريف المتغيرات Declaring variables

التهيئة ونطاق المتغيرات Initialization and scope of variables

جزاك الله خيراً

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

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

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

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

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

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