معرفی نسخه های دلفی

نسخه های دلفی

دلفی 1 (1995) : 16 بیتی بود . تحت ویندوز 3.1 . دارای کتابخانه VCL 16 بیتی .
دلفی 2 (1996) : اولین نسخه 32 بیتی . تحت ویندوز 95 .
دلفی 3 (1997) : 32 بیتی .
دلفی 4 (1998) : 32 بیتی .
دلفی 5 (1999) : 32 بیتی . این نسخه یکی از بهترین نسخه های دلفی از آب درآمد . این نسخه از دلفی دارای کامپاننت های Indy نبود .
دلفی 6 (2000) : 32 بیتی .
دلفی 7 (2001) : میشه گفت از نظر اکثر دلفی کار ها بهترین نسخه دلفی بود ( البته دلفی 2007 میتونه بهتر باشه ) . سازگاری با Windows XP . دارای یک آپدیت پکی با نام Delphi 7.1 . در این نسخه یک پیش نمایش برای نسخه دلفی تحت دات نت وجود داشت که به طور پیش فرض در محیط دلفی نصب نمی شد .
دلفی 8 (2003) : بدترین نسخه دلفی . این اولین نسخه دلفی تحت دات نت یا همان Delphi.NET بود که به دلیل عدم حمایت از Win32 (پلات فرم های نسخه های قدیم) اصلا راضی کننده نبود و طرفداری نداشت .
دلفی 2005 (2004) : در این نسخه شماره های دلفی از اعداد به سال تغییر کرد (مثلا به جای دلفی 9 دلفی 2005 بود) . این نسخه از IDE (به طور بسیار خلاصه محیط برنامه نویسی) دلفی یک محیط با سه زبان برنامه نویسی بود : 1 – سی شارپ 1.1 2 – دلفی 32 3- دلفی برای دات نت ( تحت دات نت 1.1 ) . نام اصلی این نسخه Borland Developer Studio 2.0 یا به اختصار BDS2.0 بود .
IDE این نسخه از دلفی پر از اشکال , کند بود و اصلا خوش دست و راحت نبود به همین دلیل مورد استقبال قرار نگرفت .
دلفی 2006 – BDS3.0 (2005) : سرعت بارگذاری (Load) IDE بهتر شده بود .
علاوه بر دلفی و سی شارپ برای اولین بار سی بیلدر 7.0 (C++Builder 2006) نیز به این اضافه شده بود . بسیاری از اشکالات ورژن قبلی رفع شده بود ولی هنوز IDE مناسب برای کار نبود و اشکالات بسیاری به چشم می خورد .
دلفی 2007 برای وین 32 (2007) : در این نسخه توسعه دلفی از قسمت اصلی شرکت بورلند جدا شد و به صورت بخشی مستقل در آمد که فقط روی توسعه زبان های برنامه نویسی و IDE ها کار می کنند به نام from Borland CodeGear . IDE بسیار بهتر از قبل شده است و حالا قابل سرمایه گذاری است . این نسخه از دلفی از ویندوز ویستا نیز پشتیبانی می کند . این دلفی به صورت پک های مختلف عرضه شد که از قرار زیر است :
Delphi 2007 for Win32 : فقط شامل دلفی 2007 تحت وین 32 است .
CodeGear RAD Studio 2007 : شامل دلفی 2007 تحت وین 32 و C++Builder 2007 است .

  
نویسنده : مهرنوش نوبخت ; ساعت ٩:٢٥ ‎ق.ظ روز چهارشنبه ۱٥ دی ،۱۳۸٩
تگ ها :

محدود کردن اندازه فرم در دلفی

با سلام

گاهی اوقات نیاز است فرم ما از نظر اندازه پیرو یک الگو باشد و کاربر نتواند خارج از محدوده این فرم را تغییر اندازه دهد، راهی که پیشنهاد می شود، استفاده از Windows Messages، تابع WM_GetMinMaxInfo میباشد.

unit MinMax;

 

interface

 

uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

  Forms, Dialogs;

 

type

  TForm1 = class(TForm)

  private

    { Private declarations }

    procedure WMGetMinMaxInfo(var MSG: Tmessage); message WM_GetMinMaxInfo;

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.WMGetMinMaxInfo(var MSG: Tmessage);

Begin

  inherited;

  with PMinMaxInfo(MSG.lparam)^ do

  begin

    with ptMinTrackSize do

    begin

      X := 300;

      Y := 150;

    end;

    with ptMaxTrackSize do

    begin

      X := 350;

      Y := 250;

    end;

  end;

end;

 

end.

خدانگهدار   
نویسنده : مهرنوش نوبخت ; ساعت ٤:۱٦ ‎ب.ظ روز سه‌شنبه ٢٠ امرداد ،۱۳۸۳

محدود کردن اندازه فرم در دلفی

با سلام

گاهی اوقات نیاز است فرم ما از نظر اندازه پیرو یک الگو باشد و کاربر نتواند خارج از محدوده این فرم را تغییر اندازه دهد، راهی که پیشنهاد می شود، استفاده از Windows Messages، تابع WM_GetMinMaxInfo میباشد.

unit MinMax;

 

interface

 

uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

  Forms, Dialogs;

 

type

  TForm1 = class(TForm)

  private

    { Private declarations }

    procedure WMGetMinMaxInfo(var MSG: Tmessage); message WM_GetMinMaxInfo;

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.WMGetMinMaxInfo(var MSG: Tmessage);

Begin

  inherited;

  with PMinMaxInfo(MSG.lparam)^ do

  begin

    with ptMinTrackSize do

    begin

      X := 300;

      Y := 150;

    end;

    with ptMaxTrackSize do

    begin

      X := 350;

      Y := 250;

    end;

  end;

end;

 

end.

خدانگهدار   
نویسنده : مهرنوش نوبخت ; ساعت ٤:۱۱ ‎ب.ظ روز سه‌شنبه ٢٠ امرداد ،۱۳۸۳

 

چگونه تمامي رويدادهاي يك شيء را در زمان اجرا به Nil تنظيم ‌كنيم؟

باسلام
در اين درس مقاله روشي را جهت اينكه تمامي رويدادهاي يك شيء تعريف شده در دلفي را در زمان اجرا به Nil تنظيم كنيد براي شما بازگو مي‌كنيم. شما مي‌توانيد از RTTIها جهت رسيدن به اهداف خود استفاده كنيد اما فقط براي زمان طراحي و اجرا و اين امكان براي رويدادها وجود ندارد. استفاده از RTTI، تا حدودي پيچيده است بنابراين من رويه‌اي را براي نسبت دادن Nil به يك شيء موجود در زمان اجراي يك برنامه در دلفي آورده‌ام كه نحوه انجام اين كار را به شما نشان مي‌دهد.

unit uNilEvent;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

uses
Typlnfo;

procedure NilEvents(lnstance: TObject);
var
Typelnfo: PTypelnfo;
I, Count: Integer;
PropList: PPropList;
Proplnfo: PProplnfo;
Method: TMethod;
begin
Typelnfo := Instance.Classlnfo;
Method.Code := nil;
Method.Data := nil;
Count := GetPropList(Typelnfo, [tkMethod], nil);
GetMem(PropList, Count * SizeOf(Pointer));
try
GetPropList(Typelnfo, [tkMethod], PropList);
for I := 0 to Count -1 do
begin
Proplnfo := PropList^[I];
SetMethodProp(lnstance, Proplnfo, Method);
end;
finally
FreeMem(PropList);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
sText = 'The 2nd time you click Button1 the event will not fire';
begin
NilEvents(Button1);
ShowMessage(sText);
end;

end.

چگونه رويداد مربوط به تمامي اجزاء درون برنامه خود را تغيير دهيم؟

گاهي لازم مي‌شود تا ما فراميني را براي يكي از رويدادهاي برنامه خود به تمامي اشياء استفاده شده در برنامه نسبت دهيم اينكار مي‌تواند با استفاده از RTTI دلفي صورت گيرد شما مثالي را مي‌بينيد كه اين كار را شبيه‌سازي كرده است.




uses
Typlnfo;

procedure TFrmRTTIOnChange.Button1Click(Sender: TObject);
var
proplnfo: PProplnfo;
thisEvent: TNotifyEvent;
begin
proplnfo := GetProplnfo(Memo1.Classlnfo, 'OnChange');
if proplnfo <> nil then
begin
thisEvent := Memo1AltChange;
SetOrdProp(Memo1, Proplnfo, integer(@thisEvent));
end;
end;

procedure TFrmRTTIOnChange.Memo1Change(Sender: TObject);
begin
Caption := 'Normal On Change';
end;

procedure TFrmRTTIOnChange.Memo1AltChange(Sender: TObject);
begin
Caption := 'Alternate On Change';
end;


  
نویسنده : مهرنوش نوبخت ; ساعت ۱۱:٥٧ ‎ب.ظ روز پنجشنبه ۱۸ تیر ،۱۳۸۳

 

درست كردن ماكرو متني:
اين امكان بسيار مفيد است و مي توانيد بسياري از كارهاي نوشتاري را كاهش دهد با اينكار شما ميتوانيد يك سري از كارهاي تكراري كه روي متون انجام مي دهيد را بصورت ماكرو در آورده و از آنها به راحتي استفاده كنيد. براي شروع به ضبط ماكرو كليدهاي ctrl+shift+r را بفشاريد و آن سري كارهايي را كه مي خواهيد را انجام دهيد و سپس براي اينكه به كار ضبط ماكرو پايان دهيد كليدهاي ctrl+shift+r را دوباره بزنيد. حال براي استفاده از ماكرو كافيست در هر جا كه لازم بود كليدهاي Ctrl+Shift+P را بفشاريد.

انتخاب متن بصورت مربعي:
اگر شما از كهنه كارهاي كامپيوتر باشيد حتما از زمان داس يادتون هست كه برنامه اي بود به نام PE2 كه يكي از امكانات بسيار جالبش اين بود كه يك مربع از متن رو ميتوانستين انتخاب
كنيد و آنرا كپي يا حذف كنيد. بله درست متوجه شديد در محيط دلفي هم شما اينكار را ميتوانيد انجام دهيد اما نه به مشكلي PE2 بلكه اينكار را ميتوانيد فقط با گرفتن كليد Alt و كشيدن
موس روي متن انجام دهيد.

گذاشتن علامت روي متن:
اين كار كه به BookMark معروف است بسيار مفيد و كارا مي باشد. در هنگامي كه شما روي قسمتي از متن برنامه كار ميكنيد و مي خواهيد به يك قسمت ديگر برويد ممكن است براي برگشتن به مكان اول خود كمي مشكل پيدا كنيد. ولي شما ميتوانيد با زدن چند دكمه به محل مورد نظرتون باز گرديد. براي اينكار در خطي كه قصد داريد علامت بگذاريد كليدهاي Ctrl+Shift+0..9 را بفشاريد. منظور اينست كه كليدهاي ctrl+Shift را نگه داريد و يكي از اعداد 0 تا 9 را وارد كنيد تا آن خط به همان شماره علامت گذاري شود و سپس هر جا كه خواستيد برويد و سپس هر بار كه كليد Ctrl را نگه داريد و شماره مورد نظر را وارد كنيد به همان خط باز خواهيد گشت. البته توجه داشته باشيد كه فقط مي توانيد 10 خط را با اين روش علامت گذاري بكنيد و براي برداشتن علامت ها كافيست روي همان خط دوباره كليد Ctrl+shift و شماره‌اي كه براي آن خط وارد كرده ايد را بفشاريد با اينكار علامت آن خط برداشته مي شود.

 

  
نویسنده : مهرنوش نوبخت ; ساعت ۱٠:۱٠ ‎ب.ظ روز شنبه ۱٦ اسفند ،۱۳۸٢

شی گرايی

با سلام

دوستان گرامی اين درس را به شی گرايی و مباحثی که در اين زمينه مطرح می شود می پردازيم . چون دوستان زيادی برايم ميل فرستاده بودند و خواسته بودند که مطالبی از اين قبيل را بازتر کنم . اميدوارم که مطالب مفيد واقع شوند .

  • شي گرايي: در نظر بگيريد براي رانندگي مجبور بوديد از تمام نكات فني و همه اتفاقاتي كه در موتور و پيستونها اتفاق مي افتد با خبر بوديد واقعاً گيج كننده مي شد، اينطور نيست! در واقع برنامه نويسي ابتدا بدين صورت بود و فقط افراد خاصي مي توانستند اين كار را انجام دهند ولي با ظهور شي گرايي همه چيز عوض شد. حالا ببينيم يك شي دقيقاً چكار ميكند. اول اينكه يك شي طوري طراحي شده كه برنامه نويسي همانند دنياي اطراف ما بنظر برسد. يك شي همه چيزهاي مربوط را دور هم جمع ميكند مثلا توابع ، زيرروالها، متغييرها و حتي پايگاه داده مربوط همه و همه در يك جا و به صورت يك موجوديت. كار ديگر شي اين است كه جزئيات را از ديد شما پنهان مي كند به طوري كه شما بدون آن كه از ماهيت دروني آنها آگاه باشيد مي توانيد به راحتي از آنها استفاده كنيد. همانطور كه بدون آنكه از جزئيات دروني و مدارهاي يك تلوزيون باخبر باشيد با آن كار ميكنيد و اين به يكي از آرزروهاي ديرينه برنامه نويسان يعني سادگي و عدم پيچيدگي پاسخ داد. حال بياييد ببينيم يك شي چگونه اين كارها را انجام مي دهد.

           شي هاي يك زبان مانند دلفي همانند اشياي دنياي واقعي مثل ماشين و متورسيكلت اهرمهايي براي كنترل نياز دارند كه اين وظيفه را Method ها به عهده مي گيرند. متدها نقش زيرروالها را در زبانهاي قديمي ايفا مي كنند. شي ها براي حفظ حالت جاري از Properties استفاده ميكنند مثلاً شما با ديدن كيلومتر ماشين به سرعت آن پي مي بريد و در اشيا با خواندن يك Properties همان كار را انجام مي دهيد. در واقع Properties يا خاصيتها نقش متغييرها و به طور كلي ساختمان دادهها را در زبانهاي قديمي ايفا مي كنند البته تفاوتهايي بين يك متغيير و Properties وجود دارد كه شما به تدريج به آن پي مي بريد. حالا به مفاهيم مشكل تر شي گرايي مي رسيم.

          اشيا قابليتي بنام ارث بري دارند در واقع هر شي مي تواند خصوصيات خود را به فرزند خود منقل كند و يا به عكس مي تواند از والد خود خصوصياتي را به ارث ببرد. حالا سعي ميكنم با مثالي اين را تشريح كنم. فرض كنيم شما مي خواهيد شي اي ايجاد كنيد مثل قناري شما ابتدا مي توانيد شي به نام پرنده بوجود آورده و همه خصوصيات پرنده را در آن ايجاد كنيد. سپس شي بنام قناري ايجاد مي كنيد كه خصوصيات مربوط به پرندگان را مي تواند از شي پرنده به ارث ببرد و بقيه خصوصيات را براي آن مشخص كنيد و اگر بعداً خواستيد پرنده ديگري مثل گنجشك را معرفي كنيد هنوز هم مي توانيد از شي پرنده استفاده كنيد و اين يعني راحت تر شدن كد نويسي. قانون مهمي كه بايد بخاطر داشته باشيد و به سادگي از آن رد نشويد اين است كه هر شي مي تواند بجاي والد خود بكار گرفته شود چون همه خصوصيات آن را دارد ولي يك والد نمي تواند بجاي فرزند خود بكار رود اين مثل اين است كه دوست شما ، شما را به يك ميهماني دعوت كند و بگويد ميتوانيد پرنده خود را بياوريد و شما مي توانيد قناري را با خود ببريد ولي در صورتي كه مي گفت فقط مي توانيد گنجشك با خود بياوريد شما نمي توانستيد هر پرنده ديگري را با خود ببريد. اين نكته مهم در آنجا كاربرد دارد كه در صورتي كه پارامتر يك زيرروال از نوع يك شي باشد همه فرزندان آن شي مي توانند به آن زيروال ارسال شوند. براي فهم اين موضوع عجله نكنيد و فقط قانون را بياد داشته باشيد. مطلب ديگري كه راجع به شي گرايي بايد بدانيد Class و instance مي باشد . در واقع اشيا فقط يك قالب مي باشند كه نمي توانند به تنهايي مورد استفاده قرار گيرند. براي مثال وقتي شما مي گوييد قناري منظورتان قناري خاصي نيست. ولي وقتي يك قناري را با اسمي كه براي آن گذاشته ايد صدا مي زنيد يك قناري خاص را در نظر داريد. در واقع قناري به طور كلي وجود خارجي ندارد بلكه يك قناري خاص كه مثلاً اسم آن تويتي است وجود خارجي دارد در واقع Class مانند قناري و Instance مانند تويتي است و اين به معني اين است كه ما همواره ابتدا كلاسها را تعريف كرده و سپس براي استفاده يك نمونه يا Instance از آن را بوجود مي آوريم.

رويداد گرايي: در زبانهاي قديمي دستورات خط به خط انجام مي شد تا برنامه به پايان برسد و اين يك روند قابل پيشبيني را ايجاد ميكرد ولي با به وجود آمدن روشهاي رويدادگرا برنامه منتظر يك اتفاق مي ماند تا عكس العمل نشان دهد. در اشياي روزمره هم همين طور است مثلاً يك ماشين حساب تازماني كه شما دكمه اي را فشار ندهيد عمل نمي كند. در اينجور زبانها بايد برنامه را طوري طراحي كنيد كه كدهايتان براي عكس العمل نشان دادن به كار كاربر نوشته شده باشد. اين خلاصه اي از شي گرايي و رويداد گرايي بود.

موفق باشيد

خدانگهدار .

  
نویسنده : مهرنوش نوبخت ; ساعت ٩:٠٦ ‎ب.ظ روز جمعه ۱٥ اسفند ،۱۳۸٢

شی گرايی

با سلام

دوستان گرامی اين درس را به شی گرايی و مباحثی که در اين زمينه مطرح می شود می پردازيم . چون دوستان زيادی برايم ميل فرستاده بودند و خواسته بودند که مطالبی از اين قبيل را بازتر کنم . اميدوارم که مطالب مفيد واقع شوند .

  • شي گرايي: در نظر بگيريد براي رانندگي مجبور بوديد از تمام نكات فني و همه اتفاقاتي كه در موتور و پيستونها اتفاق مي افتد با خبر بوديد واقعاً گيج كننده مي شد، اينطور نيست! در واقع برنامه نويسي ابتدا بدين صورت بود و فقط افراد خاصي مي توانستند اين كار را انجام دهند ولي با ظهور شي گرايي همه چيز عوض شد. حالا ببينيم يك شي دقيقاً چكار ميكند. اول اينكه يك شي طوري طراحي شده كه برنامه نويسي همانند دنياي اطراف ما بنظر برسد. يك شي همه چيزهاي مربوط را دور هم جمع ميكند مثلا توابع ، زيرروالها، متغييرها و حتي پايگاه داده مربوط همه و همه در يك جا و به صورت يك موجوديت. كار ديگر شي اين است كه جزئيات را از ديد شما پنهان مي كند به طوري كه شما بدون آن كه از ماهيت دروني آنها آگاه باشيد مي توانيد به راحتي از آنها استفاده كنيد. همانطور كه بدون آنكه از جزئيات دروني و مدارهاي يك تلوزيون باخبر باشيد با آن كار ميكنيد و اين به يكي از آرزروهاي ديرينه برنامه نويسان يعني سادگي و عدم پيچيدگي پاسخ داد. حال بياييد ببينيم يك شي چگونه اين كارها را انجام مي دهد.

           شي هاي يك زبان مانند دلفي همانند اشياي دنياي واقعي مثل ماشين و متورسيكلت اهرمهايي براي كنترل نياز دارند كه اين وظيفه را Method ها به عهده مي گيرند. متدها نقش زيرروالها را در زبانهاي قديمي ايفا مي كنند. شي ها براي حفظ حالت جاري از Properties استفاده ميكنند مثلاً شما با ديدن كيلومتر ماشين به سرعت آن پي مي بريد و در اشيا با خواندن يك Properties همان كار را انجام مي دهيد. در واقع Properties يا خاصيتها نقش متغييرها و به طور كلي ساختمان دادهها را در زبانهاي قديمي ايفا مي كنند البته تفاوتهايي بين يك متغيير و Properties وجود دارد كه شما به تدريج به آن پي مي بريد. حالا به مفاهيم مشكل تر شي گرايي مي رسيم.

          اشيا قابليتي بنام ارث بري دارند در واقع هر شي مي تواند خصوصيات خود را به فرزند خود منقل كند و يا به عكس مي تواند از والد خود خصوصياتي را به ارث ببرد. حالا سعي ميكنم با مثالي اين را تشريح كنم. فرض كنيم شما مي خواهيد شي اي ايجاد كنيد مثل قناري شما ابتدا مي توانيد شي به نام پرنده بوجود آورده و همه خصوصيات پرنده را در آن ايجاد كنيد. سپس شي بنام قناري ايجاد مي كنيد كه خصوصيات مربوط به پرندگان را مي تواند از شي پرنده به ارث ببرد و بقيه خصوصيات را براي آن مشخص كنيد و اگر بعداً خواستيد پرنده ديگري مثل گنجشك را معرفي كنيد هنوز هم مي توانيد از شي پرنده استفاده كنيد و اين يعني راحت تر شدن كد نويسي. قانون مهمي كه بايد بخاطر داشته باشيد و به سادگي از آن رد نشويد اين است كه هر شي مي تواند بجاي والد خود بكار گرفته شود چون همه خصوصيات آن را دارد ولي يك والد نمي تواند بجاي فرزند خود بكار رود اين مثل اين است كه دوست شما ، شما را به يك ميهماني دعوت كند و بگويد ميتوانيد پرنده خود را بياوريد و شما مي توانيد قناري را با خود ببريد ولي در صورتي كه مي گفت فقط مي توانيد گنجشك با خود بياوريد شما نمي توانستيد هر پرنده ديگري را با خود ببريد. اين نكته مهم در آنجا كاربرد دارد كه در صورتي كه پارامتر يك زيرروال از نوع يك شي باشد همه فرزندان آن شي مي توانند به آن زيروال ارسال شوند. براي فهم اين موضوع عجله نكنيد و فقط قانون را بياد داشته باشيد. مطلب ديگري كه راجع به شي گرايي بايد بدانيد Class و instance مي باشد . در واقع اشيا فقط يك قالب مي باشند كه نمي توانند به تنهايي مورد استفاده قرار گيرند. براي مثال وقتي شما مي گوييد قناري منظورتان قناري خاصي نيست. ولي وقتي يك قناري را با اسمي كه براي آن گذاشته ايد صدا مي زنيد يك قناري خاص را در نظر داريد. در واقع قناري به طور كلي وجود خارجي ندارد بلكه يك قناري خاص كه مثلاً اسم آن تويتي است وجود خارجي دارد در واقع Class مانند قناري و Instance مانند تويتي است و اين به معني اين است كه ما همواره ابتدا كلاسها را تعريف كرده و سپس براي استفاده يك نمونه يا Instance از آن را بوجود مي آوريم.

رويداد گرايي: در زبانهاي قديمي دستورات خط به خط انجام مي شد تا برنامه به پايان برسد و اين يك روند قابل پيشبيني را ايجاد ميكرد ولي با به وجود آمدن روشهاي رويدادگرا برنامه منتظر يك اتفاق مي ماند تا عكس العمل نشان دهد. در اشياي روزمره هم همين طور است مثلاً يك ماشين حساب تازماني كه شما دكمه اي را فشار ندهيد عمل نمي كند. در اينجور زبانها بايد برنامه را طوري طراحي كنيد كه كدهايتان براي عكس العمل نشان دادن به كار كاربر نوشته شده باشد. اين خلاصه اي از شي گرايي و رويداد گرايي بود.

موفق باشيد

خدانگهدار .

  
نویسنده : مهرنوش نوبخت ; ساعت ٩:٠٦ ‎ب.ظ روز جمعه ۱٥ اسفند ،۱۳۸٢

شی گرايی

با سلام

دوستان گرامی اين درس را به شی گرايی و مباحثی که در اين زمينه مطرح می شود می پردازيم . چون دوستان زيادی برايم ميل فرستاده بودند و خواسته بودند که مطالبی از اين قبيل را بازتر کنم . اميدوارم که مطالب مفيد واقع شوند .

  • شي گرايي: در نظر بگيريد براي رانندگي مجبور بوديد از تمام نكات فني و همه اتفاقاتي كه در موتور و پيستونها اتفاق مي افتد با خبر بوديد واقعاً گيج كننده مي شد، اينطور نيست! در واقع برنامه نويسي ابتدا بدين صورت بود و فقط افراد خاصي مي توانستند اين كار را انجام دهند ولي با ظهور شي گرايي همه چيز عوض شد. حالا ببينيم يك شي دقيقاً چكار ميكند. اول اينكه يك شي طوري طراحي شده كه برنامه نويسي همانند دنياي اطراف ما بنظر برسد. يك شي همه چيزهاي مربوط را دور هم جمع ميكند مثلا توابع ، زيرروالها، متغييرها و حتي پايگاه داده مربوط همه و همه در يك جا و به صورت يك موجوديت. كار ديگر شي اين است كه جزئيات را از ديد شما پنهان مي كند به طوري كه شما بدون آن كه از ماهيت دروني آنها آگاه باشيد مي توانيد به راحتي از آنها استفاده كنيد. همانطور كه بدون آنكه از جزئيات دروني و مدارهاي يك تلوزيون باخبر باشيد با آن كار ميكنيد و اين به يكي از آرزروهاي ديرينه برنامه نويسان يعني سادگي و عدم پيچيدگي پاسخ داد. حال بياييد ببينيم يك شي چگونه اين كارها را انجام مي دهد.

           شي هاي يك زبان مانند دلفي همانند اشياي دنياي واقعي مثل ماشين و متورسيكلت اهرمهايي براي كنترل نياز دارند كه اين وظيفه را Method ها به عهده مي گيرند. متدها نقش زيرروالها را در زبانهاي قديمي ايفا مي كنند. شي ها براي حفظ حالت جاري از Properties استفاده ميكنند مثلاً شما با ديدن كيلومتر ماشين به سرعت آن پي مي بريد و در اشيا با خواندن يك Properties همان كار را انجام مي دهيد. در واقع Properties يا خاصيتها نقش متغييرها و به طور كلي ساختمان دادهها را در زبانهاي قديمي ايفا مي كنند البته تفاوتهايي بين يك متغيير و Properties وجود دارد كه شما به تدريج به آن پي مي بريد. حالا به مفاهيم مشكل تر شي گرايي مي رسيم.

          اشيا قابليتي بنام ارث بري دارند در واقع هر شي مي تواند خصوصيات خود را به فرزند خود منقل كند و يا به عكس مي تواند از والد خود خصوصياتي را به ارث ببرد. حالا سعي ميكنم با مثالي اين را تشريح كنم. فرض كنيم شما مي خواهيد شي اي ايجاد كنيد مثل قناري شما ابتدا مي توانيد شي به نام پرنده بوجود آورده و همه خصوصيات پرنده را در آن ايجاد كنيد. سپس شي بنام قناري ايجاد مي كنيد كه خصوصيات مربوط به پرندگان را مي تواند از شي پرنده به ارث ببرد و بقيه خصوصيات را براي آن مشخص كنيد و اگر بعداً خواستيد پرنده ديگري مثل گنجشك را معرفي كنيد هنوز هم مي توانيد از شي پرنده استفاده كنيد و اين يعني راحت تر شدن كد نويسي. قانون مهمي كه بايد بخاطر داشته باشيد و به سادگي از آن رد نشويد اين است كه هر شي مي تواند بجاي والد خود بكار گرفته شود چون همه خصوصيات آن را دارد ولي يك والد نمي تواند بجاي فرزند خود بكار رود اين مثل اين است كه دوست شما ، شما را به يك ميهماني دعوت كند و بگويد ميتوانيد پرنده خود را بياوريد و شما مي توانيد قناري را با خود ببريد ولي در صورتي كه مي گفت فقط مي توانيد گنجشك با خود بياوريد شما نمي توانستيد هر پرنده ديگري را با خود ببريد. اين نكته مهم در آنجا كاربرد دارد كه در صورتي كه پارامتر يك زيرروال از نوع يك شي باشد همه فرزندان آن شي مي توانند به آن زيروال ارسال شوند. براي فهم اين موضوع عجله نكنيد و فقط قانون را بياد داشته باشيد. مطلب ديگري كه راجع به شي گرايي بايد بدانيد Class و instance مي باشد . در واقع اشيا فقط يك قالب مي باشند كه نمي توانند به تنهايي مورد استفاده قرار گيرند. براي مثال وقتي شما مي گوييد قناري منظورتان قناري خاصي نيست. ولي وقتي يك قناري را با اسمي كه براي آن گذاشته ايد صدا مي زنيد يك قناري خاص را در نظر داريد. در واقع قناري به طور كلي وجود خارجي ندارد بلكه يك قناري خاص كه مثلاً اسم آن تويتي است وجود خارجي دارد در واقع Class مانند قناري و Instance مانند تويتي است و اين به معني اين است كه ما همواره ابتدا كلاسها را تعريف كرده و سپس براي استفاده يك نمونه يا Instance از آن را بوجود مي آوريم.

رويداد گرايي: در زبانهاي قديمي دستورات خط به خط انجام مي شد تا برنامه به پايان برسد و اين يك روند قابل پيشبيني را ايجاد ميكرد ولي با به وجود آمدن روشهاي رويدادگرا برنامه منتظر يك اتفاق مي ماند تا عكس العمل نشان دهد. در اشياي روزمره هم همين طور است مثلاً يك ماشين حساب تازماني كه شما دكمه اي را فشار ندهيد عمل نمي كند. در اينجور زبانها بايد برنامه را طوري طراحي كنيد كه كدهايتان براي عكس العمل نشان دادن به كار كاربر نوشته شده باشد. اين خلاصه اي از شي گرايي و رويداد گرايي بود.

موفق باشيد

خدانگهدار .

  
نویسنده : مهرنوش نوبخت ; ساعت ٩:٠٦ ‎ب.ظ روز جمعه ۱٥ اسفند ،۱۳۸٢

 

با سلام

دوستان گرامی اين درس را به شی گرايی و مباحثی که در اين زمينه مطرح می شود می پردازيم . چون دوستان زيادی برايم ميل فرستاده بودند و خواسته بودند که مطالبی از اين قبيل را بازتر کنم . اميدوارم که مطالب مفيد واقع شوند .

  • شي گرايي: در نظر بگيريد براي رانندگي مجبور بوديد از تمام نكات فني و همه اتفاقاتي كه در موتور و پيستونها اتفاق مي افتد با خبر بوديد واقعاً گيج كننده مي شد، اينطور نيست! در واقع برنامه نويسي ابتدا بدين صورت بود و فقط افراد خاصي مي توانستند اين كار را انجام دهند ولي با ظهور شي گرايي همه چيز عوض شد. حالا ببينيم يك شي دقيقاً چكار ميكند. اول اينكه يك شي طوري طراحي شده كه برنامه نويسي همانند دنياي اطراف ما بنظر برسد. يك شي همه چيزهاي مربوط را دور هم جمع ميكند مثلا توابع ، زيرروالها، متغييرها و حتي پايگاه داده مربوط همه و همه در يك جا و به صورت يك موجوديت. كار ديگر شي اين است كه جزئيات را از ديد شما پنهان مي كند به طوري كه شما بدون آن كه از ماهيت دروني آنها آگاه باشيد مي توانيد به راحتي از آنها استفاده كنيد. همانطور كه بدون آنكه از جزئيات دروني و مدارهاي يك تلوزيون باخبر باشيد با آن كار ميكنيد و اين به يكي از آرزروهاي ديرينه برنامه نويسان يعني سادگي و عدم پيچيدگي پاسخ داد. حال بياييد ببينيم يك شي چگونه اين كارها را انجام مي دهد.

           شي هاي يك زبان مانند دلفي همانند اشياي دنياي واقعي مثل ماشين و متورسيكلت اهرمهايي براي كنترل نياز دارند كه اين وظيفه را Method ها به عهده مي گيرند. متدها نقش زيرروالها را در زبانهاي قديمي ايفا مي كنند. شي ها براي حفظ حالت جاري از Properties استفاده ميكنند مثلاً شما با ديدن كيلومتر ماشين به سرعت آن پي مي بريد و در اشيا با خواندن يك Properties همان كار را انجام مي دهيد. در واقع Properties يا خاصيتها نقش متغييرها و به طور كلي ساختمان دادهها را در زبانهاي قديمي ايفا مي كنند البته تفاوتهايي بين يك متغيير و Properties وجود دارد كه شما به تدريج به آن پي مي بريد. حالا به مفاهيم مشكل تر شي گرايي مي رسيم.

          اشيا قابليتي بنام ارث بري دارند در واقع هر شي مي تواند خصوصيات خود را به فرزند خود منقل كند و يا به عكس مي تواند از والد خود خصوصياتي را به ارث ببرد. حالا سعي ميكنم با مثالي اين را تشريح كنم. فرض كنيم شما مي خواهيد شي اي ايجاد كنيد مثل قناري شما ابتدا مي توانيد شي به نام پرنده بوجود آورده و همه خصوصيات پرنده را در آن ايجاد كنيد. سپس شي بنام قناري ايجاد مي كنيد كه خصوصيات مربوط به پرندگان را مي تواند از شي پرنده به ارث ببرد و بقيه خصوصيات را براي آن مشخص كنيد و اگر بعداً خواستيد پرنده ديگري مثل گنجشك را معرفي كنيد هنوز هم مي توانيد از شي پرنده استفاده كنيد و اين يعني راحت تر شدن كد نويسي. قانون مهمي كه بايد بخاطر داشته باشيد و به سادگي از آن رد نشويد اين است كه هر شي مي تواند بجاي والد خود بكار گرفته شود چون همه خصوصيات آن را دارد ولي يك والد نمي تواند بجاي فرزند خود بكار رود اين مثل اين است كه دوست شما ، شما را به يك ميهماني دعوت كند و بگويد ميتوانيد پرنده خود را بياوريد و شما مي توانيد قناري را با خود ببريد ولي در صورتي كه مي گفت فقط مي توانيد گنجشك با خود بياوريد شما نمي توانستيد هر پرنده ديگري را با خود ببريد. اين نكته مهم در آنجا كاربرد دارد كه در صورتي كه پارامتر يك زيرروال از نوع يك شي باشد همه فرزندان آن شي مي توانند به آن زيروال ارسال شوند. براي فهم اين موضوع عجله نكنيد و فقط قانون را بياد داشته باشيد. مطلب ديگري كه راجع به شي گرايي بايد بدانيد Class و instance مي باشد . در واقع اشيا فقط يك قالب مي باشند كه نمي توانند به تنهايي مورد استفاده قرار گيرند. براي مثال وقتي شما مي گوييد قناري منظورتان قناري خاصي نيست. ولي وقتي يك قناري را با اسمي كه براي آن گذاشته ايد صدا مي زنيد يك قناري خاص را در نظر داريد. در واقع قناري به طور كلي وجود خارجي ندارد بلكه يك قناري خاص كه مثلاً اسم آن تويتي است وجود خارجي دارد در واقع Class مانند قناري و Instance مانند تويتي است و اين به معني اين است كه ما همواره ابتدا كلاسها را تعريف كرده و سپس براي استفاده يك نمونه يا Instance از آن را بوجود مي آوريم.

رويداد گرايي: در زبانهاي قديمي دستورات خط به خط انجام مي شد تا برنامه به پايان برسد و اين يك روند قابل پيشبيني را ايجاد ميكرد ولي با به وجود آمدن روشهاي رويدادگرا برنامه منتظر يك اتفاق مي ماند تا عكس العمل نشان دهد. در اشياي روزمره هم همين طور است مثلاً يك ماشين حساب تازماني كه شما دكمه اي را فشار ندهيد عمل نمي كند. در اينجور زبانها بايد برنامه را طوري طراحي كنيد كه كدهايتان براي عكس العمل نشان دادن به كار كاربر نوشته شده باشد. اين خلاصه اي از شي گرايي و رويداد گرايي بود.

موفق باشيد

خدانگهدار .

  
نویسنده : مهرنوش نوبخت ; ساعت ٩:٠۱ ‎ب.ظ روز جمعه ۱٥ اسفند ،۱۳۸٢

 

با سلام

دوستان گرامی اين درس را به شی گرايی و مباحثی که در اين زمينه مطرح می شود می پردازيم . چون دوستان زيادی برايم ميل فرستاده بودند و خواسته بودند که مطالبی از اين قبيل را بازتر کنم . اميدوارم که مطالب مفيد واقع شوند .

  • شي گرايي: در نظر بگيريد براي رانندگي مجبور بوديد از تمام نكات فني و همه اتفاقاتي كه در موتور و پيستونها اتفاق مي افتد با خبر بوديد واقعاً گيج كننده مي شد، اينطور نيست! در واقع برنامه نويسي ابتدا بدين صورت بود و فقط افراد خاصي مي توانستند اين كار را انجام دهند ولي با ظهور شي گرايي همه چيز عوض شد. حالا ببينيم يك شي دقيقاً چكار ميكند. اول اينكه يك شي طوري طراحي شده كه برنامه نويسي همانند دنياي اطراف ما بنظر برسد. يك شي همه چيزهاي مربوط را دور هم جمع ميكند مثلا توابع ، زيرروالها، متغييرها و حتي پايگاه داده مربوط همه و همه در يك جا و به صورت يك موجوديت. كار ديگر شي اين است كه جزئيات را از ديد شما پنهان مي كند به طوري كه شما بدون آن كه از ماهيت دروني آنها آگاه باشيد مي توانيد به راحتي از آنها استفاده كنيد. همانطور كه بدون آنكه از جزئيات دروني و مدارهاي يك تلوزيون باخبر باشيد با آن كار ميكنيد و اين به يكي از آرزروهاي ديرينه برنامه نويسان يعني سادگي و عدم پيچيدگي پاسخ داد. حال بياييد ببينيم يك شي چگونه اين كارها را انجام مي دهد.

           شي هاي يك زبان مانند دلفي همانند اشياي دنياي واقعي مثل ماشين و متورسيكلت اهرمهايي براي كنترل نياز دارند كه اين وظيفه را Method ها به عهده مي گيرند. متدها نقش زيرروالها را در زبانهاي قديمي ايفا مي كنند. شي ها براي حفظ حالت جاري از Properties استفاده ميكنند مثلاً شما با ديدن كيلومتر ماشين به سرعت آن پي مي بريد و در اشيا با خواندن يك Properties همان كار را انجام مي دهيد. در واقع Properties يا خاصيتها نقش متغييرها و به طور كلي ساختمان دادهها را در زبانهاي قديمي ايفا مي كنند البته تفاوتهايي بين يك متغيير و Properties وجود دارد كه شما به تدريج به آن پي مي بريد. حالا به مفاهيم مشكل تر شي گرايي مي رسيم.

          اشيا قابليتي بنام ارث بري دارند در واقع هر شي مي تواند خصوصيات خود را به فرزند خود منقل كند و يا به عكس مي تواند از والد خود خصوصياتي را به ارث ببرد. حالا سعي ميكنم با مثالي اين را تشريح كنم. فرض كنيم شما مي خواهيد شي اي ايجاد كنيد مثل قناري شما ابتدا مي توانيد شي به نام پرنده بوجود آورده و همه خصوصيات پرنده را در آن ايجاد كنيد. سپس شي بنام قناري ايجاد مي كنيد كه خصوصيات مربوط به پرندگان را مي تواند از شي پرنده به ارث ببرد و بقيه خصوصيات را براي آن مشخص كنيد و اگر بعداً خواستيد پرنده ديگري مثل گنجشك را معرفي كنيد هنوز هم مي توانيد از شي پرنده استفاده كنيد و اين يعني راحت تر شدن كد نويسي. قانون مهمي كه بايد بخاطر داشته باشيد و به سادگي از آن رد نشويد اين است كه هر شي مي تواند بجاي والد خود بكار گرفته شود چون همه خصوصيات آن را دارد ولي يك والد نمي تواند بجاي فرزند خود بكار رود اين مثل اين است كه دوست شما ، شما را به يك ميهماني دعوت كند و بگويد ميتوانيد پرنده خود را بياوريد و شما مي توانيد قناري را با خود ببريد ولي در صورتي كه مي گفت فقط مي توانيد گنجشك با خود بياوريد شما نمي توانستيد هر پرنده ديگري را با خود ببريد. اين نكته مهم در آنجا كاربرد دارد كه در صورتي كه پارامتر يك زيرروال از نوع يك شي باشد همه فرزندان آن شي مي توانند به آن زيروال ارسال شوند. براي فهم اين موضوع عجله نكنيد و فقط قانون را بياد داشته باشيد. مطلب ديگري كه راجع به شي گرايي بايد بدانيد Class و instance مي باشد . در واقع اشيا فقط يك قالب مي باشند كه نمي توانند به تنهايي مورد استفاده قرار گيرند. براي مثال وقتي شما مي گوييد قناري منظورتان قناري خاصي نيست. ولي وقتي يك قناري را با اسمي كه براي آن گذاشته ايد صدا مي زنيد يك قناري خاص را در نظر داريد. در واقع قناري به طور كلي وجود خارجي ندارد بلكه يك قناري خاص كه مثلاً اسم آن تويتي است وجود خارجي دارد در واقع Class مانند قناري و Instance مانند تويتي است و اين به معني اين است كه ما همواره ابتدا كلاسها را تعريف كرده و سپس براي استفاده يك نمونه يا Instance از آن را بوجود مي آوريم.

رويداد گرايي: در زبانهاي قديمي دستورات خط به خط انجام مي شد تا برنامه به پايان برسد و اين يك روند قابل پيشبيني را ايجاد ميكرد ولي با به وجود آمدن روشهاي رويدادگرا برنامه منتظر يك اتفاق مي ماند تا عكس العمل نشان دهد. در اشياي روزمره هم همين طور است مثلاً يك ماشين حساب تازماني كه شما دكمه اي را فشار ندهيد عمل نمي كند. در اينجور زبانها بايد برنامه را طوري طراحي كنيد كه كدهايتان براي عكس العمل نشان دادن به كار كاربر نوشته شده باشد. اين خلاصه اي از شي گرايي و رويداد گرايي بود.

موفق باشيد

خدانگهدار .

  
نویسنده : مهرنوش نوبخت ; ساعت ۸:٥٦ ‎ب.ظ روز جمعه ۱٥ اسفند ،۱۳۸٢

← صفحه بعد