# Native Code > برنامه نویسی در Delphi >  شی گرایی(OOP)

## shayan_delphi

بنام خدا
سلام به همه دوستان  
من هرجا ebook یا مطلبی از سایتهای خارجی راجع به دلفی خواندم بدون استثنا از OOP یا همون شی گرایی صحبت شده بود حتی موضوع Net.  هم با OOP به عنوان یک سیستم قدرتمند مطرح شده ولی در سایتهای فارسی و بین برنامه نویسها مخصوصا دلفی کارها خیلی کم و یا اصلا هیچ اطلاعاتی در مورد شی گرایی نیست.  :ناراحت:   :ناراحت:   :ناراحت:  
من خودم سعی می کنم اول از مزایای اون بنویسم بعدش هم روشهایی که یاد می گیرم.
از دوستانی که به این نوع برنامه نویسی هم وارد هستند می خواهم که اطلاعاتشون را برای دیگران بنویسند.
خودم هم اطلاعاتم کم هست ولی سعی می کنم هرچی یاد می گیرم بنویسم.
با تشکر

----------


## MiRHaDi

سلام
عزیزم شیء گرایی برای یک دلفی کار یک چیز جا افتاده است ، اگر زیاد کسی در بارش صحبت نمیکنه برای اینه که ما زیاد در مورد روش پا کردن کفشمون صحبت نمیکنیم
برای کامپاننت نویسی و ... همش باید از مفاهیم شیء گرایی استفاده بشه و حتی برای استفادش هم .
فکر کنم تو قسمت پاسکال در این مورد صحبت شده ولی خوب استفاده از تجربیات و علم شما هم خالی از لطف برای ما و دوستان نیست
ممنون میشیم حاصل زحماتتون رو در اختیار دوستان بگذارید
یا علی

----------


## Naficy

اصلا موافق این حرف نیستم که شی گرایی برای دلفی کارها یک چیز جا افتاده ست. خود من الآن دلفی نویسهای زیادی رو می شناسم که بلد نیستن کفش پاشون کنن!!! در واقع باید بگم حقیقت شی گرایی چیزی و آنچه در دلفی «نیاز» می شود چیز دیگری است...

----------


## Kamyar.Kimiyabeigi

> اصلا موافق این حرف نیستم که شی گرایی برای دلفی کارها یک چیز جا افتاده ست. خود من الآن دلفی نویسهای زیادی رو می شناسم که بلد نیستن کفش پاشون کنن!!!


کاملا موافقم 
البته همه بزرگان و اساتید این موضوع رو بهتر از من میدونن ولی خوب برای یادآوری میگم که اصلا دلفی پایش OOP هست یعنی به نظر من اگه کسی OOP ندونه و با دلفی کار کنه مثله اینه که بدون هیچ امکاناتی بخواد با یک قاشق چایی خوری یک تونل مترو حفر کنه   :چشمک:

----------


## babak869

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

----------


## محمد میرمصطفی

یه دانستنی آتشین:
هیچ می‏دونین OOP پایش Pascal هست؟
قول می‏دم الان همه می‏گن: نخیر زبان مورد استفاده من بنیانگذار OOP هست.
من ادله مستند دارم که OOP با Pascal معرفی شده. خوب اینو دیگه همه می‏دونن که مادر دلفی پاسکاله.

----------


## Naficy

> البته همه بزرگان و اساتید این موضوع رو بهتر از من میدونن ولی خوب برای یادآوری میگم که اصلا دلفی پایش OOP هست یعنی به نظر من اگه کسی OOP ندونه و با دلفی کار کنه مثله اینه که بدون هیچ امکاناتی بخواد با یک قاشق چایی خوری یک تونل مترو حفر کنه


اگه منظور از بلد بودن OOP، روی فرمها کامپوننت قرار دادن، بلد بودن چگونگی تعریف کردن یک کلاس یا حتی نوشتن چارتا کامپوننت جدید باشه، بله هر دلفی کاری همه اینها (یا حداقل همون اولیه رو) بلده!
اما شی گرایی مفهومی بالاتر از تعریف چارتا کلاس و شئ ه. اونچیزی که اهمیت داره اینه که بلد باشین "تحلیل شی گرا" انجام بدین. بلد باشین چطوری برنامه تون رو "شی گرا" بنویسین. (که البته شی گرایی برنامه هیچ ربطی هم به کارهایی مثل طراحی ظاهر فرم نداره) درک کرده باشین چگونه مساله رو به کلاسها و اشیا مختلف بشکنین و چه قواعدی رو باید در این راه رعایت کنین. داشتن یه همچین دیدی کار ساده ای نیست. و تعداد برنامه نویسهایی (یا به عبارت بهتر تعداد "کسایی که خودشون رو برنامه نویس می دونن") که واقعا این دید رو داشته باشن خیلی کمه. (معمولا هر کدوم از یه طرفی از پشت بوم افتادن!!!)





> من ادله مستند دارم که OOP با Pascal معرفی شده. خوب اینو دیگه همه می‏دونن که مادر دلفی پاسکاله.


خییییییلی مشتاقم بشنوم!!

----------


## shayan_delphi

بنام خدا 
سلام به همه دوستان
جناب میرهادی نسبت به موضوع شی گرایی کم لطفی کردند و چیزی که خود من دریافتم خلاف این نظر هست.اطلاعات برنامه نویسها خیلی کم،نامفهوم،دست و پا شکسته و تازه این یه کم اطلاعات در ذهن برنامه نویسهای وارد حبس شده!!و سینه به سینه منتقل میشه اونم با چه سختی؟!!  :ناراحت:  
به هر حال سعی می کنیم با کمک دوستان (از جمله آقای میر هادی) در زمینه شی گرایی به یه جایی برسیم.
برنامه نویسی شی گرایی سطحی بالاتر از برنامه نویسی ساخت یافته هست،اکثر برنامه نویسان ویژوالی ما بطور ضمنی از شی گرایی استفاده می کنند ولی از اصول آن بی اطلاعند. (به قول دوستان همین گذاشتن کامپوننت روی فرم یا اصلا همین فرمی که می بینیم شی گرایی است )
خود من هم اطلاعات کلی و گنگی درباره بعضی اصطلاحات داشتم و الان مدتی این موضوع را دنبال میکنم و اطلاعات خیلی خوبی بدست آوردم و حتی (به تنهایی) در حال انجام یه پروژه کاملا بر مبنای شی گرایی هستم.خیلی مواقع با مشکلاتی مواجه می شوم ولی یافته ها در این زمینه واقعا فوق العاده هستند و بدون اغراق عرض کنم این نوع برنامه نویسی فوق العاده جالب  می باشد.
 (حتی توابع و پروسیجرهای شخصی بانک SQL را هم بصورت کامپوننت(شی) استفاده می کنم آنقدر لذت بخش که دهان همه آب می افتد!)
اطلاعات من از وب،eBook ها، کتابها ،برنامه نویسهای دیگه و یافته های عملی خودم هست ، پس اگر دوستان  اشکالی هم دیدند برای اصلاح آن حتما اقدام کنند.

----------


## shayan_delphi

دوستان  یافته های خودتون رو به دیگران منتقل کنید و جا برای اطلاعات و دانش تازه در ذهن خود باز کنید.

----------


## Kamyar.Kimiyabeigi

> دوستان  یافته های خودتون رو به دیگران منتقل کنید و جا برای اطلاعات و دانش تازه در ذهن خود باز کنید.


منم کاملا موافقم .... جای بحث راجع به OOP بیایید اطلاعاتمونو به دیگران منتقل کنیم

----------


## MNosouhi

> عزیزم شیء گرایی برای یک دلفی کار یک چیز جا افتاده است ، اگر زیاد کسی در بارش صحبت نمیکنه برای اینه که ما زیاد در مورد روش پا کردن کفشمون صحبت نمیکنیم


من هم با صحبت های آقای میرهادی موافقم ، با این توضیح که منظور آقای میرهادی برنامه نویسان واقعی هستش ، وگرنه عمه من هم می تونه یه دیتابیس بسازه و با دلفی بهش کانکت کنه و بگه من هم ذلفی بلدم.
به هر حال از مباحثی که باعث پیشرفت علم دوستان بشه استقبال می کنم.

----------


## shayan_delphi

سلام
دلفی بر خلاف زبانهای شی گرای خالص مانند SMALLTALK  ( که در آن به هر چیز در برنامه به دید یک شی نگاه می شود و شی گرایی اجباری و لازمه برنامه است) یک زبان شی گرای دورگه است که از زبان موجود پاسکال شی گرا بوجود آمده و در آن برنامه نویس به دلخواه از شی گرایی استفاده می کند.
سیستم کدنویسی ساده --- > برنامه نویسی ساخت یافته(کلاس،توابع،پروسیجر و...)
                --- >شی گرایی--- >.NET              
نکته مهم در  برنامه نویسی شی گرایی اینه که لازم نیست همه چیز را در ابتدای  انجام پروژه بدانید،
با پیشرفت در پروژه مفاهیم و پاسخها را (که در ابتدا ترسناک بودند) راحت پیدا می کنید.
 برخی موضوعاتی که در شی گرایی زیاد به گوشتان می خورد و امیدوارم دوستانی که آشنایی بیشتری دارند از آموزش آنها دریغ  نفرمایند:
 پایه گذاری شی گرایی بر سه اصل اساسی و مهم :
1- نهان سازی یا کپسوله سازی(Encapsulation)  با مکانیزمهای دستیابی Public,Protect,Private,Published و متدهای Constructor و Destructor   و ..
2- وراثت (Inheritance)
3- پلی مورفیزم،چند ریختی یا مقید سازی دیر هنگام(Polymorphism or Late Binding).

کلاسها و اشیا و کلمات کلیدی Overlode,Override,Abstract,Virtual در تعریف کلاسها 
و ....
شاید از بعضی این موارد استفاده کرده باشید ولی اصل استفاده آنها در شی گرایی است با توجه به اینکه شما بطور ضمنی از شی گرایی استفاده کرده اید.

----------


## Naficy

راه خوبیه شروع کردین.

یک نکته اینه که نمی شه Published رو جزء نهان سازی (و همینطور جزء مطالب آموزش شی گرایی) حساب کرد. Published فقط برای عملیات ویژوال در دلفی در نظر گرفته شده و ربطی به اصول شی گرایی نداره.

----------


## MiRHaDi

سلام
من همینجا از همه معذرت خواهی میکنم
درست میگید. من فکر کردم کامپاننت رو رو فورم بذارم یعنی شیءگرایی شرمنده
از شما ممنونم که مرا متوجه نمودید :)
فکر کنم یک ایبوک فارسی در این مورد دیدم ! یه سرچی تو بکنیم خوبه
بای

----------


## shayan_delphi

بنام خدا 
یک موضوع مهم در برنامه نویسی استفاده مجدد از کد می باشد.(کاری که در برنامه نویسی ساخت یافته  مانند پاسکال،C،VB و غیره با استفاده از رویه ها، توابع و کلاسها انجام می شود نوشتن یکبار--- > فراخوانی چندین بار ) خوبه ولی در اون روش انعطاف پذیری در استفاده و توزیع خیلی کم هست.
حالا در شی گرایی استفاده مجدد از کد یعنی استفاده مجدد از نوع،ایجاد آبجکت و کنترل و توزیع به هر صورت دلخواه.
اگر آبجکت کار شما را راه می اندازه که چه بهتر وگرنه بدون دست زدن به دستورات پایه، موارد مورد نیاز را کم و زیاد می کنیم.این کار همونطور که قبلا اشاره کردم با استفاده یکی از جذابترین مفاهیم شی گرایی یعنی وراثت انجام می شود.این قسمت خیلی جالبه چون خیلی از نیازهای برنامه نویس با همین مورد به سادگی برطرف می شه و در قدرت برنامه،مدیریت برنامه و صرفه جویی در زمان خیلی موثره.(دوستانی که نوشتن برنامه هایی با چندین فرم را تجربه کردند بهتر به اهمیت اون پی می برند)
به عنوان نمونه عرض کنم شما پروژه ای با انواع فرم دارید ،فرمهایی برای دریافت اطلاعات کاربر،
نمایش اطلاعات،گزارشات،تایید کاربر،حتی پیغامهای خطا و.... به علاوه از اشیایی استفاده می کنید که مشخصات خاصی دارند مثلا Edit Box برای تاریخ،برای اعداد اعشاری گرد شده،DBGrid های رنگی،و اشیای سفارشی چندکاره و .....
 در حالت عادی برای انجام پروژه چه کار می کنید؟کارهای تکراری،مقدار دهی تک تک و همه جا به صورت تکراری
برای اعمال تغییرات یا اعمال یک عملیات کلی بر روی همه فرمها چه کار می کنید؟چند باره کاری؟
با خطاهای فراوان،مدیریت دشوار،سردر گمی و خیلی مشکلات دیگر(اینم داشته باشید: پشتیبانی وحشتناک)
برای این که موضوع را بهتر درک کنید بهتره یه مثال عملی را با هم انجام بدیم.چطوره؟

----------


## saeednayari

لطفا این ebookها یا کتابها یا سایتها را معرفی کنید.من که تا الان هر چی کتاب خوندم به جایی نرسیدم 
(یا من نمیکشم یا اونا بد توضیح میدن)

----------


## Sadbar7

یه توصیه میکنم به شما دوست عزیز
کلا به سمت کتابها و ebook های فارسی نرو و برو به سمت خارجی ها ! واقعا خوب و جامع توضیح دادن

----------


## armita_171

سلام دوستان 
من میخواستم بپرسم در C++‎‎ برای ایجاد کلاس دانشجو در قسمت private برای بیان خصوصیات (شماره-نام-فامیل-سن-معدل و...) باید struct تعریف کرد؟
خودم که فکر میکنم کلاس خودش یه نوع struct . ولی میخوام مطمئن شم . چون سوال امتحانمون بوده و استاد گفته باید struct تعریف میکردیم.
لطفا تا نمره ها نیومده راهنماایم کنین
با تشکر.

----------


## Simorgh_94

> سلام دوستان 
> من میخواستم بپرسم در C++‎‎‎ برای ایجاد کلاس دانشجو در قسمت private برای بیان خصوصیات (شماره-نام-فامیل-سن-معدل و...) باید struct تعریف کرد؟
> خودم که فکر میکنم کلاس خودش یه نوع struct . ولی میخوام مطمئن شم . چون سوال امتحانمون بوده و استاد گفته باید struct تعریف میکردیم.
> لطفا تا نمره ها نیومده راهنماایم کنین
> با تشکر.


به طور کلی استراکت و کلاس مشابه هم هستند !!!!!!!
با این تفاوت که قدرت کلاس خیلی بشتر از استراکت هستش و برای کارای معمولی مانند نگهداری خصوصیات دانشجو بهتره از استراکت استفاده کرد
ولی اگه علاوه بر نگه داری مشخصات دانشجو می خواهید توابعی مربوط به دانشجو را ایجاد کنید مانند بدست اوردن معدل کل دروس و... بهتره از کلاس استفاده کنید زیرا قدرت بیشتری دارد.(البته از نظر من)

----------

