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

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

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

السلام عليكم ورحمة الله وبركاته ..

استكمالاً لما بدأناه في الموضوع السابق وقد وضعنا الفكرة وقوانين النقاش هنا سنبدأ على بركة الله النقاش ..

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

هذه الموضوعات مستنبطة من أحد مراجع السي شارب 4 .. وأنا هنا أتكلم عن أخر نسختين من سي شارب والجافا (لا أعلم بالضبط أخر نسخة)

هذه الموضوعات ليست نهائية قابلة للتنقيح والمراجعة .. والنقد ..

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

1. Introducion1

Object Orientation

Type Safety

Memory Management

Platform Support

C#’s Relationship with the CLR

The CLR and .NET Framework

2. Language Basics

Type Basics

Numeric Types

Boolean Type and Operators

Strings and Characters

Arrays

Variables and Parameters

Expressions and Operators

Statements

Namespaces

3. Creating Types

Classes

Inheritance

The object Type

Structs

Access Modifiers

Interfaces

Enums

Nested Types

Generics

4. Advanced

Delegates

Events

Lambda Expressions

Anonymous Methods

try Statements and Exceptions

Enumeration and Iterators

Nullable Types

Operator Overloading

Extension Methods

Anonymous Types

Dynamic Binding

Attributes

Unsafe Code and Pointers

Preprocessor Directives

XML Documentation

1

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#2

خطوه جيده جدا, أهنئك عليها .

المهم, بما اني جافاوي اصيل فدعني اسالك سؤال:

أنت هنا عرضت مميزات السي شارب و تريد ان تعرف مقابلها في الجافا و لذا قمت بوضع فهرس لمواضيع السي شارب

الا تري ان هناك مواضيع في الجافا ليست موجوده في السي شارب (مثل ال inner classes)

فأقترح ان نقوم بوضع فهرس مقارنه يكون عباره عن اهم المواضيع الشائعه في البرمجه بوجه عام مثلا قد يحتوي على:

1- طريقة تعريف المتغيرات

2- هل يدعم موضوع ال dynamic typing

3- دعمه للبرمجة الشيئية التوجه

4- دعمه للانعكاسات

5- ادارة الذاكره و دعم المؤشرات

6- طريقة تنظيم الملفات

الخ

اذن نريدها مواضيع عامه يقوم كل فريق بالادلاء بدلوه فيها :)

#3

أخي هويدي ..

اقتراح رائع .. وأتفق معك فيه وبشدة ..

نحاول أن نستخلص أوجه المقارنة العامة التي يمكن أن تكون بمثابة الأرض التي نسير عليها أثناء النقاش ..

لو أمكن طلب بسيط إن كان لابد من الترجمة العربية (أنا لا أمانع) أريد فقط أن نكتب بجانب المصطلحات أسماءها الأجنبية .. :)

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

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

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

بمعنى أننا يمكننا الأن في هذه المرحلة فلترة ما يمكن من الفهرس السابق ثم نقوم بالإضافة عليه ما رأيك؟

أقصد أن نترك من الفهرس ما هو مشترك .. ونضع بند كامل لمناقشة الأفكار البرمجية العامة كالتي ذكرتها في جزء الـ Advanced من الفهرس ..

أنت تعلم كما قلت سابقاً أنا لست مبرمج جافا وربما يوجد مبرمجي جافا ليسوا مبرمجي دوت نت .. فنضع الأساسيات ثم ننقاش كل الأفكار الأخرى ..

ما رأيك؟

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#4

موافق جدا.

الخطوه التالية لي, هي إرسال قائمة بفهرس مواضيع الجافا, ثم نتقوم باخذ المشترك بينهما و المناقشة فيه.

و هذه أشهر مواضيع الجافا, حصلت عليها من مرشد الجافا:

Object-Oriented Programming Concepts
    Language Basics
	    Variables
	    Operators
	    Expressions, Statements, and Blocks
	    Control Flow Statements
    Classes and Objects
    Interfaces and Inheritance
    Numbers and Strings
    Generics
    Packages

Essential Classes
    Exceptions
    Basic I/O
    Concurrency
    The Platform Environment (Properties, CL- arguments,evn variables, ..) 
Regular Expressions
Applets
Java Web Start
Deployment
GUI
Collections
Internationalization
2D Graphics
JavaBeans(TM)
JDBC(TM) Database Access
Java Management Extensions (JMX)
RMI
Security Features in Java SE
The Extension Mechanism
The Reflection API
Custom Networking
Java Naming and Directory Interface(TM). (Working with Action Directories)
JAXP (Java API for Xml Processing, includes XML Parsing, XSLT processing, XPath and JAXB binding)

أرجو من الأخوه محبي الجافا تذكيري بشئ إن كنت قد نسيته و أنا هننا أتلكم عن Java SE فقط و أرجو من الإخوه الإلتزام بذلك.

أخ أحمد , ما رأيك أن تقوم بالدمج و تعرض علينا الناتج؟

#5

موافق جداً أخ هويدي ..

هناك فقط ملاحظة .. وسؤال.

1 - ما هي أخر نسخة جافا موجودة الأن؟

2 - الملاحظة:

في الفهرس الذي أرسلته يوجد كثير من البنود أظنها مبنية على الجافا ولكنها ليست من صميم الجافا .. هل يمكنك تحديد بنود اللغة فقط؟ هذا لأنني كما ذكرت في الفهرس الأول هي موضوعات اللغة فقط ولم أتطرق لما بني فوقها أو ما يقوم بخدمتها كالـ .NET Framework Libraries

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

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#6
اقتباس
1 - ما هي أخر نسخة جافا موجودة الأن؟
JDK 1.6
اقتباس

في الفهرس الذي أرسلته يوجد كثير من البنود أظنها مبنية على الجافا ولكنها ليست من صميم الجافا .. هل يمكنك تحديد بنود اللغة فقط؟ هذا لأنني كما ذكرت في الفهرس الأول هي موضوعات اللغة فقط ولم أتطرق لما بني فوقها أو ما يقوم بخدمتها كالـ .NET Framework Libraries

لم أفهم قصدك, فكل هذا المفروض أنه ضمن Java 2 SE التي تأتي من SUN
#7

جزاك الله خيراً أخي هويدي ..

نعم أنا أفهم طبعاً أنها من Sun

أنا قصدت أمر أخر ..

مثلاً الـ C# لها قواعد كلغة .. فهي لغة لها متغيرات Variables وطريقة تعامل معها .. لها مجموعة أكواد خاصة بالجمل الشرطية .. لها مجموعة أكواد خاصة بالجمل المتكررة Loops ... إلخ

وكذلك الـ VB.NET وكذلك في كل لغات الـ .NET

ثم بعد ذلك هناك مجموعة مكتبات في الـ .NET Framework يمكن للسي شارب أو الفي بي دوت نت أو أي لغة دوت نت التعامل معها .. مثلاً مكتبات التعامل مع الملفات .. أو مكتبات التعامل مع الشبكات .. إلخ فهي لا تعتبر جزءاً من اللغة نفسها.

ثم بعد ذلك هناك مجموعة من التقنيات التي يمكن أن تستخدم فيها أي لغة دوت نت .. مثلاً يوجد الـ Windows Forms أو يوجد الـ ASP.NET .... إلخ يمكنك أن تكتب في بي دوت نت أو سي شارب وتستخدم أي من هذه التقنيات وتختار أي مكتبة يمكنك التعامل معها من الـ .NET Framework Base Class Libraries

هذه هي بيئة التطوير التي أعيش فيها ..

حاولت إسقاطها على الفهرس الذي أرسلته لي .. لكي أقوم بعمل فلترة ..

فوجدت بعض العنواين تحمل GUI .. وتحمل Web ..... إلخ عندها سألت هل هذه الأشياء من قواعد لغة الجافا أم هي أشياء ومكتبات مبنية على أساسيات لغة الجافا؟

هل فهمت قصدي إذن؟

تم تعديل هذه المشاركة بواسطة أحمد عبد المنعم في 24 مايو 2010 في 00:55

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#8
اقتباس
فوجدت بعض العنواين تحمل GUI .. وتحمل Web ..... إلخ عندها سألت هل هذه الأشياء من قواعد لغة الجافا أم هي أشياء ومكتبات مبنية على أساسيات لغة الجافا؟

بالنسبة لل Java Web start فهو لا علاقة له ببرمجة الويب لا من قريب ولا من بعيد, مجرد إمكانية تمكنك من تشغيل برامج الجافا من الويب.

بالنسبة لل GUI , فأتفق معك, أنه من الأفضل إخراجها من النقاش.

أما بالنسبة لموضوع ال C# VS .NET Framework فبجد موضوع غريب :lol:

أنظر يا أخي, تعال نتكلم عن السي شارب كلغه كامله, بها كل مقومات لغات البرمجه , فما معني أن نناقش السي شارب بدون أن نتعرض للمدخلات و المخرجات (IO) , فهي و إن كانت شئ عام لكل لغات ال .NET framework ولكنها أيضا مكون أساسي من مكونات لغة السي شارب.

أعلم و متيقن أن كلامك صحيح 100% لكن لن تكون هناك مناقشة فعاله إذن إذا حذفنا أي شئ له علاقة بال .NET Framwrk في منقاقشتنا هذه.

#9

أنا متفق معك 100% في هذه النقطة ..

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

1 - كيفية التعامل مع الملفات

2 - كيفية التعامل مع قواعد البيانات

... إلخ

بعد أن نكون أرسينا أساسيات اللغتين ..

قد يظن البعض أنه لا خلاف بين اللغتين وأنه حتى لو كان يوجد خلاف سيكون طفيف لأن الأساسيات واحدة. ولكن الحقيقة أنه يوجد خلاف في كثير من الأمور التي قد تعتبر أفكار برمجية أصلاً .. قد تجد فكر الـ Functional Programming موجود هنا وغير موجود هناك عن طريق تطبيق Syntax معينة تتيح هذا وتدعمه .. وهكذا.

لذا أنا سأحاول أولاً أن أضع دليلاً لأساسيات اللغتين (مشترك) .. ثم بعد ذلك نبدأ في المرور سواء بالتقنيات أو سواء بالمكتبات المختلفة .. إلخ

حسناً؟

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#10

أرى أن مقارنة الـ Language Specification أولا ثم الـ Platform Libraries بعدها أفضل لندرك الفريق الحقيقي بين اللغتين وبهذا يكون هذا الموضوع دليلاً لمن يريد الانتقال من إحدى اللغتين للأخرى وبذلك يكون الموضوع قد حقق فائده.

يمكن لهذه الروابط أن تفيد في تحديد عناصر النقاش:

Java Language Specification

C# Programming Guide

تم تعديل هذه المشاركة بواسطة hazzoom في 24 مايو 2010 في 05:35

1
#11

أتفق مع هذا الرأي .. وهو أظن ما يتفق عليه الأخ هويدي ..

هذا هو الفهرس الذي تم دمجه وأنتظر الأراء ..

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

أولاً: اللغة

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

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


  • تعريف المتغيرات Declaring variables
    التهيئة ونطاق المتغيرات Initialization and scope of variables
    Predefined data types
    التحكم في سير البرنامج Conditional statements, loops, jump statements
    التعدادات Enumerations
    فضاء الأسماء Namespaces
    التعليقات Comments and documentation features
    توجيهات قبل المعالج Preprocessor directives
    المباديء التوجيهية والاتفاقيات Guidelines and conventions
    أول برنامج باللغة First program in the language ... باستخدام الـ console
    Access Modifiers
    Classes and structs
    Class members
    constructors and static constructors
    Methods
    Properties
    Read-only fields
    Partial Classes
    Inner Classes
    Static Classes
    Inheritance
    Interfaces
    Generics
    Arrays and Tuples
    Operators and Casts
    Delegates, Lambdas, and Events
    Strings and regular expressions
    Collections
    Language Integrated Query
    Dynamic Language Extensions
    Memory Management and Pointers
    Reflections
    Errors and Exceptions

ثانياً: بيئة التطوير IDE

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

ثالثاً: أساسيات هامة


  • Assemblies
    Intrumentation
    Threads, Tasks, and Synchronization
    Security
    Localization
    Transactions
    Networking
    Windows Services
    Interop
    Managed Extensibility Framework (Add - ins (or plugins) allow you to add functionality to an application at a later time. You can create a
    hosting application that gains more and more functionality over time — such functionality might be
    written by your team of developers, but different vendors can also extend your application by creating
    add - ins.)
    Manipulating Files and Registery

رابعاً: التعامل مع البيانات Data

سيتم استعراض كيفية التعامل مع البيانات المختلفة وما هي ال API التي توفرها كلا اللغتين للتعامل مع كافة البيانات كقواعد البيانات، ملفات الـ XML .. سنتحدث عن الـ ORM التي تم دعمها من شركتي اللغة إن وجد.

خامساً: العرض Presentation

هنا سنتحدث عن التقنيات المختلفة في كلا اللغتين لعرض البرامج على الشاشة .. مروراً بالكونسول .. ثم الـ client كالـ forms .. ومروراً بتقنيات الويب المختلفة في كلا اللغتين أو التي تدعمها كلا اللغتين. وأيضاً قد نعرج على كيفية تعامل كلا اللغتين في مجال ال graphics البسيط .. وليس المعقد

سادساً: الاتصال Communication

سنتكلم هنا عن التقنيات المختلفة التي توفر إمكانية distributed applications في كلا اللغتين

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

أنتظر التنقيح والتعديل على القائمة .. لقد فصلت فقط في الجزء الأول وهو اللغة .. ولم أفصل في كل جزء طبعاً .. وسنجعل كل جزء لحينه

ما رأيكم؟

تم تعديل هذه المشاركة بواسطة أحمد عبد المنعم في 24 مايو 2010 في 11:23

2

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#13

بارك الله فيكم يا شباب

الماظرات "المناقشات" من الاشياء المفيده جدا في فهم طبيعة لغات البرمجة مع اختلافها وتزيد من كمية المعلومات الاساسية التي يحتاجها كل مبرمج

فإلى الامام

وطبعا انا ميكروسوفتاوي بحت يعني c# :D

:lol: :lol:

  1. سبحان الله وبحمده سبحان الله العظيم


    متى نحكم العالم زى زمان ايام اجددنا

    صلى الله على محمد صلى الله عليه وسلم



#14

سأبدأ إن شاء الله بنقطة نقطة .. لحين تفرغ المناقشين للنقاش :)

توكلنا على الله :)

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#15

انا بالانتظار اخي احمد وبتمنى يكون فعلا في نقاش ونتعلم

انا لن اناقش كوني ليس لدي خبرة بالجافا وخبرتي بالسي شارب محدودة

ولكن بالانتظار ان شاء الله

In bad state

#16

في البداية .. اقترحنا أن تكون أول نقطة هي الـ Architecture الخاص بكل لغة .. وأقصد هنا الهيكل المعماري للغة وعلاقتها مثلاً بالـ CLR والدوت نت .. أو في حالة الجافا علاقتها بالـ Virtual Machine .. هي مقدمة عامة نشرح فيها كلا اللغتين بمنظور لا يحتوي على كثير من التفاصيل ولكن نظرة عامة كما يقولون High level تمهيداً للدخول في التفاصيل.

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

1 - كمطور سي .. قديماً (وما زالوا في بعض التطبيقات) مطوري برمجيات الويندوز استخدموا السي مع Windows API لبرمجة تطبيقات تعمل على الويندوز. وبعيداً عن تعقيدات الـ API. فالجميع هنا يتفق على أن لغة السي هي لغة صغيرة موجزة ومقتضبة. فمطوري السي عليهم التحكم في الذاكرة يدوياً واستخدام المؤشرات على سبيل المثال والتي تعتبر من أكثر الأمور جلباً للأخطاء. هذا بجانب أن لغة السي تعتبر Structural ولا تحتوي على مفاهيم الـ Object Oriented مما يؤدي إلى كتابة كود غير منسق يسمونه Spaghetti Code. فعندما تجمع كل هذه المساويء مع تعقيدات الـ API وكثرة الأنواع بها فلا عجب أن تجد أن هناك الكثير من البرامج التي تحتوي على أخطاء برمجية كثيرة.

2 - كمطور سي بلس بلس مع الـ MFC ... لا شك أنه حدثت طفرة واسعة عند ظهور هذه اللغة ودعمها لمباديء الـ Object Oriented. فيمكنك اعتبار هذه اللغة بمثابة طبقة Object Oriented على لغة السي. ولهذا فمازالت لغة السي بلس بلس تعتمد على وجود المؤشرات والتحكم اليدوي في الذاكرة. على الرغم من هذا فإنه يوجد أطر كثيرة لتدعيم اللغة كالـ MFC وبالرغم من أن هذه الأطر تساعد كثيراً في عملية التطوير إلا أنه ما زال الكتابة باللغة قابل للخطأ وهذا لأن جذورها اعتمدت على لغة السي.

3 - كمطور فيجوال بيسك 6 .. بسبب الحماس الشديد لدى كثير من المطورين لوجود لغة أكثر رفاهية وأسهل وأسرع انتقل الكثير من مطوري لغات السي والسي بلس بلس إلى لغة الفيجوال بيسك 6 عند ظهورها. هذه اللغة أصبحت شهيرة جداً لأنها توفر إمكانية بناء الواجهات المعقدة بسهولة ويسر وتوفر بناء الـ COM Servers ,وأيضاً أكواد التعامل مع قواعد البيانات أصبحت أسهل كثيراً من السابق. وأيضاً زادت اللغة على الـ MFC أنها قامت بإخفاء الكثير من التعاملات بين المبرمج وبين الـ Windows API وسهلت له أموره بشدة عن طريق استخدام الـ Wizards وغير ذلك. ولكن المشكلة الكبرى في هذه اللغة أنها لم تكن Fully Object Oriented ولكن يمكننا القول أنها Object based. فمثلاً لا يمكنك تطبيق الـ Classic inheritance داخل اللغة بسهولة ولا يوجد دعم للـ Constructors ذات المتغيرات وغير ذلك. وفوق ذلك لم يكن هناك دعم جيد للـ Multithreaded applications إلا باستخدام الـ Windows API كما كان المعتاد سابقاً.

4 - كمطور جافا .. كانت الجافا طفرة حقيقية في عالم البرمجة فكانت تدعم الـ object oriented concepts وكانت شفرتها تعتمد على سي بلس بلس من حيث طريقة الكتابة. قوة الجافا أكبر بكثير من كونها تدعم أكثر من منصة ولكنها مدت مبرمجيها بمكتبات كثيرة جعلتهم ينتجوا برامج 100% جافا بداية من التعامل مع قواعد البيانات والرسائل داخل النظام وتطبيقات الويب وأيضاً الواجهات الرسومية المعقدة وغيرها. ولكن المشكلة تكمن في أنك إن استخدمت جافا فعليك استخدامها من البداية للنهاية فهي لا تدعم بشكل جيد تضامن اللغات مع بعضها البعض لأن هذا ضد الشعار الأساسي لها: لغة واحدة لكل احتياج. على الرغم من أن التعامل مع المكتبات الغير مكتوبة بالجافا يعتبر معقداً ولم تجعله الجافا سهلاً إلا أنه ممكناً ولكن الدعم في هذا الاتجاه لم يكن في الحسبان.

5 - كمطور COM .. ربما حاولت ميكروسوفت في هذا الاتجاه إصدار إطار يدعم الـ Cross language ونجحت في ذلك إلى حد بعيد مع وجود عيوب كثيرة في محاولة توحيد الـ data types بين اللغات ولكن لن نتطرق كثيراً لمميزات هذا الإطار ولكن يكفي أن نقول أن من مشاكلة المشهورة جداً الـ DLL Hell والتي كانت تؤرق المبرمجين بشدة وهي باختصار مشكلة في عملية الـ Registeration لمكتبات الـ COM لأنه كان يجب عليك تسجيلها في الـ Registery ووجود أكثر من نسخة على نفس الجهاز يسبب الكثير من المشاكل خاصة في عملية الـ Registeration.

نأتي الأن إلى موضوعنا الأصلي .. وهو الـ .NET .. من خلال المقدمة الطويلة أحببت أن ألقي الضوء على اتجاه ميكروسوفت عند اختراع الدوت نت وما هي المساويء التي رأت أنها يجب أن تعالجها في اللغات والأطر

الموجودة في هذا الوقت .. وسريعاً جداً هذه بعض المميزات الرئيسية للـ .NET عموماً:

* الـ Interoperability .. والتي تدعم إمكانية التخاطب بين مكتبات الـ COM ومكتبات الدوت نت المختلفة بسهولة ويسر بالغين. والتي تم تسهيلها أكثر وأكثر في الإصدارة الرابعة بعد إضافة dynamic

* دعم أكثر من لغة تحت نفس الإطار كالفي بي دوت نت .. والسي شارب .. والإف شارب .. وغيرها

* مشغل واخد يدعم كل هذه اللغات Common runtime engine

* الدعم الكامل والكلي للتخاطب والدمج بين اللغات المختلفة ودعم الـ inheritance والـ cross exception handling وغيرها.

* دعم هائل لمطوري البرامج تحت هذه المنصة عن طريق وجود مكتبات هائلة تسهل عليهم أمورهم في كثير من الأمور المعقدة BCL أو FCL

* انتهى عصر اختلاف الـ Data types بين اللغات في وجود الـ COM

* أسلوب سهل وبسيط في عملية الـ deployment فلا داعي لعملية الـ registeration كما كان في الـ COM .. كما يمكنك الأن وضع أكثر من نسخة من Dll معين على نفس الجهاز بدون أدنى مشكلة.

هذه المميزات التي أوردتها هي ليست كل المميزات ولكن أحببت أن ألقي هنا الضوء على نشأة الدوت نت ولماذا تم اختراعه وما هي القضايا التي حاولت ميكروسوفت أن تحلها بعد أن ارتأت أن هذه القضايا تعتبر مشاكل حقيقية لمطوري منصة ويندوز ..

كانت هذه المقدمة ترجمة بسيطة لأحد المقدمات التي قرأتها سابقاً في سلسلة كتب Pro C# لـ Apress .. وقد قرأتها في أكثر من مكان .. وعذراً إن كنت أخطأت في أي شيء وأود لو نبهني أحد في أي أمر أخطأت فيه :) .. جزاكم الله خيراً

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

3

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#17

اخشى ان تكون مقاطعتى مضرة بالموضوع (اذا كانت كذلك نبهنى بذلك)

اظن ان المولف اجحف فى حق السى :) فهى لا تكتب كود Spaghetti والا ما كان كتب بها برامج سطورها بالملايين .

فانا فى بدايتى تعلمى للسى كنت استغرب من عدم وجود OO وكنت اتحير كيف يكتب بها اكواد ضخمة .

السى فى بناء البرامج تحاكى نموذج شبية بالOO

فاذا اعتبرت الكلاس عبارة عن مجموعة من البيانات والدوال التى تجرى بيانات على معلومات الاوبجكت .

فالنطبق هذا النموذج فى السى . انشى ملف header واكتب بة ما اردت من data type (ويستحسن يكون هناك struct تعبر عن معلومات الاوبجكت ويمكنك اعتبارها انها الnon-static كما فى OO ) والمعلومات الخارجة عن الstruct اعتبرها الstatic (كما فى لغات الoo وليس static الخاصة بالسى) واكتب ال functions signature (prototype) . وانشى ال.c واكتب implementation الفانشكنز .

وايضاء اعتبار static keyword كبديل للprivate (سواء فانكشن او متغيرات global (لا تريد تشاركها مع باقى الmodules )

اذهب فى البرنامج الذى تريد استخدام الmodule فية وضيف الهيدر وانشى متغير من struct ولعلك انشئت فانكشن ل initialize تقوم بنداها وتستخدم الفانكشنز (الموجودة فى الموديلو ) للتعديل على بيانات الstruct ودواليك . ومن الطبيعى استخدام modules لانشاء modules (فاغلب الmodules تستخدم modules اخرى) وهناك بنية منظمة للبرنامج .

طبعا هذا النموذج ليس افضل من oo ولكنة يعطى تنظيم ومنطقية .

وهناك اساليب تقدم خدمات شبية ب inheritance فمثلا اذا اردت استخدام مثلا module كlinked list لاقوم بانشاء stack بالقيام ببعض التعديلات على الاولى واضافة عمليات . عند انشاء الmodule الثانية باضاقة هيدر الاولى فى هيدر الثانية وبعض من typedef و اضافة الفانكشنز المرادة وكذلك اصبح لدى module جديدة (بعد التعديل على الاولى) .

وطبعا ما يبقى على السى حتى اليوم هو موازنتها بين التحكم بالlow level و كتابة كود جبد .

السى ليست افضل فى التنظيم (ولا تجارى اللغات ال high-level ولكنها ليست بتلك الفظاعة ) ومعروفة ب portability العالية وهناك ادوات تساعد على ذلك مثلauto tools (وهنا تختلف فمثلا عند تترجم على الماك os x وهناك ملفات خاصة بتلك المنصة فالauto tools يتم تهيتها لتفعل السينورهات المطلوبة فى المواقف المختلفة .

تم تعديل هذه المشاركة بواسطة apex في 29 مايو 2010 في 02:56

2 −1

name : mohamedyosry

#18

جزاك الله خيراً أخي apex .. في البداية أنا قمت بالعمل على السي فترة لبرمجية بعض الـ Embedded Systems .. ولكننا لا نريد الخوض في هذه النقطة كثيراً لأن هذه فقط مقدمة للموضوع الأصلي. :)

كل ما قلته جميل جداً ولكن الـ OO ليست عملية تنظيم الكود. يخطيء الكثيرون عندما يظنون هذا. فنظريات الـ OO يستفاد منها في تطبيق كثير من الأمور البرمجية التي تساعد على تطوير أداء البرنامج.

مثلاً: الـ Encapsulation .. يعتبر من أحد المباديء التي تصب في صالح الـ Security .. وليست المشكلة هنا في التنظيم.

مثلاً: الـ Polymorphism .. يعتبر من أحد المباديء الرائعة التي تصب في صالح الـ Generic nature of code و الـ Extensibility.

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

ولكن مداخلتك طيبة وتستحق الاحترام.

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

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#19
اقتباس
مثلاً: الـ Encapsulation .. يعتبر من أحد المباديء التي تصب في صالح الـ Security .. وليست المشكلة هنا في التنظيم.

مثلاً: الـ Polymorphism .. يعتبر من أحد المباديء الرائعة التي تصب في صالح الـ Generic nature of code و الـ Extensibility.

عذرا تعليق اخير حتى اتركك تكمل موضوعك الاساسى :blush:

اقتباس
مثلاً: الـ Encapsulation .. يعتبر من أحد المباديء التي تصب في صالح الـ Security .. وليست المشكلة هنا في التنظيم.

مثلاً: الـ Polymorphism .. يعتبر من أحد المباديء الرائعة التي تصب في صالح الـ Generic nature of code و الـ Extensibility.

حتى تلك المبادى يمكن تحقيقها فى السى لكن ب implementation اطول بعض الشى . امثلة كثيرا ولكن ما يحضرنى الان blender rna

تفضل باستكمال الموضوع

تم تعديل هذه المشاركة بواسطة apex في 29 مايو 2010 في 10:51

name : mohamedyosry

#20

أخي apex ..

هناك فقط سوء فهم .. نحن نتكلم عن لغة الـ C التي تم إصدارها بالـ Specs الخاصة بها .. أما المحاولات التي تتم لأجل تدعيم هذا في السي فهذا أمر أخر. فكما ذكرت نحن نتكلم عن لغة السي وإمكانيتها ولا نتكلم عن إمكانية ذلك باستخدام مكتبات أو أطر خارجية.

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

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#21
اقتباس
السى فى بناء البرامج تحاكى نموذج شبية بالOO

فاذا اعتبرت الكلاس عبارة عن مجموعة من البيانات والدوال التى تجرى بيانات على معلومات الاوبجكت .

فالنطبق هذا النموذج فى السى . انشى ملف header واكتب بة ما اردت من data type (ويستحسن يكون هناك struct تعبر عن معلومات الاوبجكت ويمكنك اعتبارها انها الnon-static كما فى OO ) والمعلومات الخارجة عن الstruct اعتبرها الstatic (كما فى لغات الoo وليس static الخاصة بالسى) واكتب ال functions signature (prototype) . وانشى ال.c واكتب implementation الفانشكنز .

وايضاء اعتبار static keyword كبديل للprivate (سواء فانكشن او متغيرات global (لا تريد تشاركها مع باقى الmodules )

اذهب فى البرنامج الذى تريد استخدام الmodule فية وضيف الهيدر وانشى متغير من struct ولعلك انشئت فانكشن ل initialize تقوم بنداها وتستخدم الفانكشنز (الموجودة فى الموديلو ) للتعديل على بيانات الstruct ودواليك . ومن الطبيعى استخدام modules لانشاء modules (فاغلب الmodules تستخدم modules اخرى) وهناك بنية منظمة للبرنامج .

بصراحة أخ apex معلومه قيمة جدا (لغير مطوري السي أمثالي على الأقل)

بالنسبه للمؤلف يا أخ أحمد الذي قارن السي و السي++ بالجافا و الدوتنيت

فأنا أعتقد و أؤمن بأن لا مجال للمقارنه هنا,,,,,

فالسي و السي++ لغات أنظمة غير مداه (Non-managed), وبالتالي لا يصح مقارنتها بلغات تطبيقات مدارة (مثل الJava, .NET ). فهي مقارنه غير عادله,,

لأني إذا أردت إنشاء مثلا برنامج إدارة قاعدة بيانات أو لعبة كمبيوتر, فمن الأفضل لي أن أتجه إلى السي و السي++ (أعرف قواعد بيانات منشأه في الجافا, و قد تكون هناك بالدوتنيت)

إذا أردت إنشاء برنامج سطح مكتب أو برنامج ويب جميل و متكامل 100% مع الويندوز, فمن الأفضل طبعا دوتنيت (فأهل مكه أدري بشعابها)

أما إذا أردت إنشاء برنامج مؤسساتي لبنك أو لمؤسسه ماليه أو لبورصه (و غالبا ما تستخدم خوادم يونكس و لينوكس), فمن الأفضل طبعا إستخدام الجافا.

فكل ميسر لما صمم من أجله....

تم تعديل هذه المشاركة بواسطة {هويدي} في 29 مايو 2010 في 11:11

2
#22

نقطة نظام :) وقت مستقطع :D

هنا الكاتب لا يقارن أبداً! ولم يقصد أن الدوت نت أتت لتحل مكان هؤلاء! أو أن الجافا هي البديل! أو أن السي بلس بلس هي البديل للسي والسي الآن منقرضة!

فهمت الآن ما سبب التعليقات في هذه النقطة :) ..

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

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

وأنا أتفق معك يا أخ هويدي في هذا المبدأ ولا شك: فكل ميسر لما صمم من أجله

+1

تم تعديل هذه المشاركة بواسطة أحمد عبد المنعم في 29 مايو 2010 في 11:12

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#23

لننظر الآن إلى الهيكل المعماري للدوت نت ..

الدوت نت من وجهة نظر المبرمج هو عبارة عن بيئة تشغيل runtime engine .. ومجموعة مكتبات تساعده في العمل وهو Base Class Libraries أو BCL.

أما بيئة التشغيل فهي بكل بساطة تسمى Common Language Runtime أو CLR وهي المسئولة عن الكثير من الأشياء التي يقوم بها المبرمجين في اللغات الأقل مستوى Low Level مثل الـ Memory Management وتحميل الأنواع وتعريفها في الذاكرة. حجز أماكن في الذاكرة للتطبيقات. التحكم في الـ Multithreading ... وبعض أمور الأمن والأمان الـ Security.

داخل الـ CLR يمكننا القول أنه يوجد بعض المكونات الأساسية التي لها من الأهمية مكان فيجب ذكرها هنا وهم Common Type System و Common Language Specification.

أما الـ Common Type System أو CLS ... هو عبارة عن وصف كامل لكل الأنواع الممكن التعامل معها من خلال الدوت نت ووصف لكل البنايات البرمجية وغير ذلك من الأمور وأيضاً تعرف كيفية تفاعل هذه الأنواع مع بعضها البعض.

ولكن ليس من الضروري أن تقوم كل اللغات التي تعمل على الدوت نت بتطبيق كل المزايا والأنواع الموجودة في الـ CTS وهنا يأتي دور الـ Common Language Specification أو CLS وهو كما يقولون الأرض المحايدة التي تحتوي على تعريف كل الأنواع المشتركة في كل اللغات. فإذا قمت بتعريف نوع مثلاً وتأكدت من أنه CLS Compliant فتأكد أنه سيعمل بكفاءة على كل اللغات التي تعمل على منصة الدوت نت. ولكن إن لم يكن كذلك فليس من الشرط أن تعمل بكفاءة على كل اللغات.

وهذا الرسم التوضيحي يبين العلاقات بين هذه الأجزاء:

post-53551-12751496425748_thumb.jpg

والأن نتحدث عن الجزء الأخر من وجهة نظر المبرمج وهو الـ Base Class Library .. أو BCL وهي عبارة عن مجموعة مكتبات تدعم المبرمج بالكثير من الأمور الطبيعية كالتعامل مع الملفات والتعامل مع الـ Threads و الـ Graphics Rendering وغير ذلك. بالإضافة إلى هذه الأمور فهي تدعم المبرمج بكثير من الأطر التي ترفع من إنتاجيته مثل أطر الويب والويندوز والكونسول وغير ذلك من الأمور

الشكل السابق يوضح هذه العلاقات مع بعضها البعض.

الرسالة القادمة نتكلم عن موضوعنا الأساسي عن لغة السي شارب وماذا تقدم من جديد في عالم البرمجة .. :)

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

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

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#24

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

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

In bad state

#25

بانتظار وصول النقاش لل Advanced Topics

اين شباب الجافا فى المنتدى

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

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