معهد الصحافه
b]ازيك يابشمهندس (ه)عامل (ه) ايه هتفضل تلف كتير كده يلا ادخل سجل معانا[/b]
لمعرفه النتيجه تابع الموقع ده
http://www.mohe-edus.edu.eg/default.aspx
اداره المنتدى


 
الرئيسيةالبوابةبحـثالتسجيلدخول

شاطر | 
 

 سي بلس بلس المسقبل إلى أين ؟

اذهب الى الأسفل 
كاتب الموضوعرسالة
medo
المدير العام
المدير العام
avatar

ذكر
تاريخ الميلاد : 05/01/1990
تاريخ التسجيل : 15/01/2008
الموقع http://s7afa.ahlamontada.com

مُساهمةموضوع: سي بلس بلس المسقبل إلى أين ؟   السبت أبريل 05, 2008 5:05 pm

سي بلس بلس المسقبل إلى أين ؟

كلنا
يعرف الدوت نت , وأغلب المطورين يعرفون Visual Studio .NET , وكثير منا
سمع عن آخر تحديث للسلسة مصرفات الدوت نت بصدور Visual Studio 2005 نسخة
البيتا 1 في شهر July السابق .

حصة ال VB.NET وحصة ال C#.NET كبيرة في عائلة الدوت نت , لكن لم يكن الحال كذلك بالنسبة للسي++ حتى VS2005.NET الأخير .
فلنتحدث
عن الماضي القريب, المشكلة هي أن مايكروسوفت لم تكن تعرف ماذا تفعل عندما
أصدرت ال MC++ اختصارا ل Manged ++c , وهي أول Visual c++.NET تصدر ,
وصدرت مع مصرف ال Visual Stdio.NET الأول عام 2001 .

وبعدها بدأ الهرج والمرج , وبدأت اصوات الاحتجاج تعلو شيئا فشيئا بسبب تهميش ال C++ جزئيا بين لغات الدوت نت الجديدة ,,


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

المهم في الموضوع أن ماحدث يعود لواحد من سببين :
الأول أن مايكروسوفت لم تكن تعرف ماذا تفعل حقا .

الثاني
أن تكون لعبة لافساح المجال أمام السي# لتنضج أكثر , ولكي تتضح معالم
الدوت نت أكثر , والتأكيد على أنها بيئة تطوير سريعة ومثوقة ومنافسة بشدة
لل J2ME والجافا , وأن السي# هي البديل الأفضل لأهل الجافا ولمستقبل تطوير
البرامج المكتبية والموزعة .
وبعد ماتصدرت السي# قائمة لغات التطوير بدأت مايكروسوفت تصرح عن اللغة القادمة ++/CLI لتضع النقاط على الحروف لمستقبل الدوت نت ,,

كتابة
برامج قواعد بيانات وأنظمة ويندوز مكتبية للمؤسسات أو غيرها وكتابة كود لل
ASP.NET وال Web Services بال VB.NET والسي# مناسب جدا .

و
كتابة أكواد تحتاج للسرعة ويمكن أن تفعل بها كل شيء , حتى كتابة كود لصفحة
انترنت ASP.NET و Web Services اتجاها الى كتابة ألعاب كاملة 3D بال
Manged DirectX ,, وكتابة برامج لل 64 بت أو حتى أنظمة ال simulation اذا
أردت , طبعا بحرية الوصول لدوال ال Win32 API كلها وحتى التي تتوقع تمرير
متغيرات من النوع ** أو غيره "والتي لايمكن فعلها بالسي# أوغيرها " الا
بواجهة تسيير بكتابة كلاس بواسطة ال C++/CLI "وهي طريقة سريعة ومباشرة" أو
بكتابة دالة لملف dll بالسي++ الصرفة .

هذا جزء من الموضوع باختصار ,, ودعونا من الكلام النظري , ولنرى عن كثب ماحل بالسي++ :
كود بسيط ل Hello World بال C++/CLI ,,
<# CODE

using namespace System;
int main()
{
Console::WriteLine("Hello World");
return 0;
}
الكود
قريب جدا من السي++ العادية , لكن تمت اضافة أوامر جديد كليا ودوال وفئات
لمنصة الدوت نت للتعامل مع كل شيء تقريبا في الوندوز .
مثلا الدالة
WriteLine الموجودة داخل الفئة التي اسمها Console بطريقة منطقية تطبع
سطرا في الكونسول , وطريقة استخدامها مباشرة جدا , فقط مرر السلسلة وستتم
طباعتها بشكل مباشر .

لاحظ في الأعلى
using namespace System , وبنفس المفهوم في السي++ العادية وقد كنا نستخدم
هذا التعبير في السي++ العادي اذا أردنا أن ننظر داخل تجمع namespace معين
, وأن نستدعي الفئات والدوال الموجودة داخله بشكل مباشر , دون كتابة
البادئة ::System كل مرة اختصار للمجهود .

خذ عندك الكود التالي لبرنامج يطبع Hello World أيضا لكن بنفس طريقة السي++ العادية .
<# CODE

#include
using namespace std;
int main()
{
cout << "Hello World";
return 0;
لاحظ
أننا استخدمنا المكتبة القياسية iostream عوضا عن iostream.h , السبب أن
iostream.h غير موجودة بكل بساطة , وال iostream القياسية تقدم دخل وخرج
أفضل من الذي في ال iostream.h .
طبعا يجب استخدام ال namespace std لنستطيع استدعاء مافي ال iostream .

لكن
لاينبغي استعمال دخل خرج ال سي++ كال cout وال cin , لأنه توجد أنواع
جديدة في الدوت نت لاتستطيع التعامل معها , خذ عندك كمثال ال Object وال
Array .

الان فالندخل قليلا ولنرى ماحدث فعلا , خذ الكود طويل قليلا لكن تأمل فيه ستعرف بعض الأمور التي استجدت :
<# CODE


// This is the main project file for VC++ application project
// generated using an Application Wizard.
#include "stdafx.h"
#include
using namespace std;
using namespace System;

class Native
{
protected:
int Q;
static const int h=0;
public:
Native():Q(10){}
void Print(int *z)
{
Q=*z;
Console::WriteLine(Q);
}
};
class Derive_Native : public Native
{
public:
Derive_Native():Native(){}
};
/////////////////////////////////////////////////////////////

ref class REF_CLASS
{
private:
int* R;
int ^ Z;
public:
REF_CLASS()
{
R = new int;
Z = gcnew int;
*R=*Z=10;

Console::WriteLine("Constructor Of GC HEAP Begines !");
}

//Despose() Function .. In IDisposable Interface
//!REF_CLASS(){} <---ERROR Now .. But Will be Include in next Updates
//Finalizer Not Constructor ...
//There Is no Constructor in "ref class" Type
~REF_CLASS()
{
Console::WriteLine("Tremenate Object");
}
};
value class VALUE_CLASS
{
private:
int Q;
public:
//VALUE_CLASS(){} <-- ERROR ! Still Dont Know Whay !
};
int main()
{
// TODO: Please replace the sample code below with your own.
Console::WriteLine(L"Hello World");

REF_CLASS ^ ref_ = gcnew REF_CLASS;
//REF_CLASS % ref; <-- ERROR
Native * _native = new Native;
Native native;
Derive_Native d_native;
Derive_Native *_d_Native = new Derive_Native;
VALUE_CLASS ^ value_ = gcnew VALUE_CLASS;
VALUE_CLASS * _value = new VALUE_CLASS;
VALUE_CLASS %value =*_value;
VALUE_CLASS %value__ =*value_;
VALUE_CLASS &_value_ =*_value;

//Native ^ native= gcnew Native; <--- ERROR
//REF_CLASS * f; <--- ERROR
//REF_CLASS f; <--- ERROR
//int q;
//cout << q; <--- OK
//cout << ref; <--- ERROR
//Console::WriteLine(ref_); <--- OK

//Stop Screen
Console::ReadKey();
//return 0;
}
من الكود أعلاه ستجد بعض الرموز الجديدة التي أضيفت للغة وبشكل سريع :
1)
السي++ القديمة كودها سيعمل بدون أي مشاكل مع كود ال C++/CLI بشرط تشغيل
مفتاح التصريف أو ال Option وهو clr/ , وهو يخبر المصرف بأن الكود الموجود
مخلوط بين كود native وكود CLR .
2) إضافات جديدة على السي++ وهي بمواصفات CLI .
3)
أنواع فئات جديدة بالبدائة ref أو البادئة value , والأولى من النوع
المرجعي والثانية من النوع القيمي وهي بنفس مفهوم الأنواع القيمية
والمرجعية في C# .
4) رموز جديدة لتسهيل فهم الكود وللتعامل المرن مع الذاكرة المدارة في CLR وهي كما في المثالين :
<# CODE


VALUE_CLASS ^ value_ = gcnew VALUE_CLASS;


وأيضا :
<# CODE


VALUE_CLASS %value =*_value;
5) مفاتيح تصريف متعددة وهي :
clr/ : وتستخدم لتصريف كود مخلوط mixed بين ال Native Code و Manged Code .
clr:pure/
: وتستخدم في حال كان الكود كاملا كود مدار في CLR وميزتها أنها تسرع
تنفيذ الكود نظرا لأن صورة الملف التنفيذي الناتجة ستحوي فقط معلومات MSIL
وهي MSIL instructions .
clr:oldsyntax :وتستخدم لتشغيل وتصريف كود
MC++ وهي كما قلنا السي++ التي صدرت مع بداية ظهور VS.NET من 2001 وحتى
مصرف VS2003 , لكنها إستبدلت نهائيا بمواصفات C++/CLI , وللتوافقية في
تطوير التطبيقات أتيحت الفرصة لتشغيل أكواد MC++ .
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
سي بلس بلس المسقبل إلى أين ؟
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
معهد الصحافه :: الكليه التكنولوجيه بالصحافه :: شعبه تك معلومات :: البرمجه وقواعد البيانات-
انتقل الى: