09982292579
info@mehraeen.ac.ir
فارسی پرچم
فارسی
یک زبان را انتخاب کنید
فارسی پرچم
فارسی
0
دسته ها
خانه تقویم‌آموزشی مدرس وبلاگ چارت‌‌دروس تماس‌با‌ما درباره‌ما انجمن‌ها
برنامه سازی پیشرفته

جلسه 5 مقدمه اي بر طراحی و برنامه سازي شیءگرا

خلاصه نکات کلیدی: کلاس‌های انتزاعی و واسط‌ها ابزارهایی برای تعریف قراردادها و الگوهای طراحی در سطوح بالاتر هستند. آن‌ها به ایجاد ساختارهای نرم‌افزاری قوی‌تر و انعطاف‌پذیرتر کمک می‌کنند.

مقدمه و مفاهیم پایه


  • تیتر: چرا برنامه‌سازی شیءگرا؟ انقلابی در توسعه نرم‌افزار

  • محتوا:

  • نارسایی‌های رویکردهای رویه‌ای (Procedural Programming).

  • معرفی پارادایم شیءگرا به عنوان راه‌حل.

  • تعریف دنیای واقعی با اشیاء (Objects) و تعاملات آن‌ها.

  • مزایای اصلی OOP: قابلیت استفاده مجدد، نگهداری آسان، مقیاس‌پذیری.

  • مثال: مقایسه ساخت یک برنامه مدیریت کتابخانه با رویکرد رویه‌ای (توابع جداگانه برای کتاب، امانت، بازگرداندن) در مقابل رویکرد شیءگرا (کلاس کتاب با متدهایی مانند امانت_دادن و بازگرداندن).

  • تمرین پایان فصل:

۱. سه مورد از چالش‌های اصلی در پروژه‌های نرم‌افزاری بزرگ که با رویکردهای سنتی (رویه‌ای) به سختی حل می‌شوند را نام ببرید.

۲. چگونه مفهوم “شیء” در دنیای واقعی (مانند یک خودرو) می‌تواند به مدل‌سازی نرم‌افزار کمک کند؟

۳. مزیت اصلی استفاده از OOP در تیم‌های توسعه نرم‌افزار چیست؟


  • خلاصه نکات کلیدی:

  • OOP مشکلات برنامه‌نویسی رویه‌ای را با تمرکز بر داده‌ها و رفتار در قالب اشیاء حل می‌کند.

  • قابلیت استفاده مجدد کد، نگهداری ساده‌تر و توسعه مقیاس‌پذیر از مزایای کلیدی OOP هستند.


بخش ۲: کلاس‌ها و اشیاء (Classes and Objects)


  • تیتر: بلوک‌های سازنده OOP: کلاس‌ها و اشیاء

  • محتوا:

  • تعریف کلاس (Class) به عنوان یک الگو (Blueprint).

  • تعریف شیء (Object) به عنوان نمونه‌ای (Instance) از یک کلاس.

  • ویژگی‌ها (Attributes / Properties) و رفتارها (Methods / Functions) در یک کلاس.

  • سازنده‌ها (Constructors) و نقش آن‌ها در مقداردهی اولیه اشیاء.

  • مفهوم this یا self برای ارجاع به شیء جاری.

  • مثال: تعریف کلاس دانشجو با ویژگی‌های نام، شماره_دانشجویی، معدل و متدهایی مانند ثبت_نام_درس و نمایش_اطلاعات. سپس ایجاد چند شیء از این کلاس (مثلاً دانشجو۱، دانشجو۲).

  • تمرین پایان فصل:

۱. تفاوت بین کلاس و شیء را با یک مثال ساده توضیح دهید.

۲. یک کلاس فرضی برای نمایش یک حساب بانکی طراحی کنید. حداقل ۳ ویژگی (مانند شماره_حساب، موجودی) و ۲ متد (مانند واریز، برداشت) برای آن تعریف کنید.

۳. وظیفه سازنده (Constructor) در یک کلاس چیست؟


  • خلاصه نکات کلیدی:

  • کلاس‌ها الگوهایی هستند که اشیاء از روی آن‌ها ساخته می‌شوند.

  • اشیاء نمونه‌هایی از کلاس‌ها با داده‌ها (ویژگی‌ها) و عملیات (متدها) خاص خود هستند.

  • سازنده‌ها برای مقداردهی اولیه اشیاء هنگام ایجادشان استفاده می‌شوند.


بخش ۳: کپسوله‌سازی (Encapsulation)


  • تیتر: حفاظت از داده‌ها: قدرت کپسوله‌سازی

  • محتوا:

  • مفهوم پنهان‌سازی داده‌ها (Data Hiding).

  • سطوح دسترسی (Access Modifiers): عمومی (Public)، خصوصی (Private)، محافظت‌شده (Protected) - (بسته به زبان برنامه‌نویسی مورد استفاده، این بخش می‌تواند عمیق‌تر یا خلاصه‌تر باشد).

  • نقش متدهای دسترسی (Getters) و تغییردهنده (Setters).

  • مزایای کپسوله‌سازی: امنیت داده، کنترل تغییرات، انعطاف‌پذیری.

  • مثال: در کلاس حساب بانکی، ویژگی موجودی را خصوصی (private) تعریف کرده و از متدهای get_موجودی() و set_موجودی() (که ممکن است منطق اعتبارسنجی داشته باشد) برای دسترسی و تغییر آن استفاده کنیم.

  • تمرین پایان فصل:

۱. کپسوله‌سازی را تعریف کرده و بگویید چرا اهمیت دارد.

۲. چرا بهتر است ویژگی‌های یک کلاس را به صورت خصوصی (private) تعریف کنیم؟

۳. چه زمانی از متدهای Getter و Setter استفاده می‌کنیم؟


  • خلاصه نکات کلیدی:

  • کپسوله‌سازی یعنی بسته‌بندی داده‌ها و متدها در یک واحد (کلاس) و کنترل دسترسی به داده‌ها.

  • این کار امنیت داده‌ها را افزایش داده و از تغییرات ناخواسته جلوگیری می‌کند.


بخش ۴: وراثت (Inheritance)


  • تیتر: ارث‌بری: ساختن بر اساس داشته‌ها

  • محتوا:

  • مفهوم وراثت: کلاس والد (Parent/Superclass) و کلاس فرزند (Child/Subclass).

  • ایجاد سلسله مراتب کلاس‌ها (Class Hierarchy).

  • قابلیت استفاده مجدد کد از طریق وراثت.

  • بازنویسی متدها (Method Overriding).

  • مفهوم super برای فراخوانی متدهای کلاس والد.

  • مثال: کلاس والد خودرو با ویژگی سرعت و متد حرکت(). کلاس‌های فرزند سواری و کامیون که از خودرو ارث می‌برند و ممکن است متد حرکت() را بازنویسی کنند یا ویژگی‌های جدیدی مانند ظرفیت_بار (برای کامیون) اضافه کنند.

  • تمرین پایان فصل:

۱. وراثت در OOP چیست و چه فایده‌ای دارد؟

۲. یک کلاس والد به نام شکل تعریف کنید. سپس دو کلاس فرزند به نام‌های دایره و مربع ایجاد کنید که از شکل ارث ببرند. هر کلاس باید متد مربوط به محاسبه مساحت را داشته باشد.

۳. تفاوت بین بازنویسی متد (Method Overriding) و بارگذاری بیش از حد متد (Method Overloading) را توضیح دهید (اگر در سطح درس گنجانده شده است).


  • خلاصه نکات کلیدی:

  • وراثت به کلاس‌های فرزند اجازه می‌دهد ویژگی‌ها و رفتارهای کلاس والد را به ارث ببرند.

  • این قابلیت به کاهش تکرار کد و ایجاد روابط “یک نوع از” (is-a) بین کلاس‌ها کمک می‌کند.


بخش ۵: چندریختی (Polymorphism)


  • تیتر: اشکال چندگانه: قدرت چندریختی

  • محتوا:

  • مفهوم چندریختی: توانایی یک شیء برای داشتن اشکال متعدد.

  • چندریختی در زمان اجرا (Runtime Polymorphism) از طریق وراثت و بازنویسی متدها.

  • چندریختی در زمان کامپایل (Compile-time Polymorphism) از طریق بارگذاری بیش از حد متدها (Method Overloading) (اگر پوشش داده شود).

  • کاربرد چندریختی در افزایش انعطاف‌پذیری و کاهش وابستگی کد.

  • مثال: فرض کنید لیستی از اشیاء شکل (که شامل دایره و مربع است) داریم. می‌توانیم روی این لیست پیمایش کرده و متد رسم() را روی هر شیء فراخوانی کنیم؛ سیستم به طور خودکار نسخه صحیح رسم() را برای دایره یا مربع اجرا خواهد کرد.

  • تمرین پایان فصل:

۱. چندریختی در OOP به چه معناست؟

۲. چگونه وراثت و بازنویسی متدها به ایجاد چندریختی کمک می‌کنند؟ مثالی بزنید.

۳. یک مثال واقعی از کاربرد چندریختی در یک سیستم نرم‌افزاری (مثلاً سیستم پرداخت، پردازش پیام) بیان کنید.


  • خلاصه نکات کلیدی:

  • چندریختی به اشیاء اجازه می‌دهد تا رفتارهای متفاوتی را بسته به نوع خود نشان دهند.

  • این اصل، کد را انعطاف‌پذیرتر و قابل توسعه‌تر می‌کند.


بخش ۶: مفاهیم پیشرفته‌تر (اختیاری/مقدماتی)


  • تیتر: فراتر از اصول: کلاس‌های انتزاعی و واسط‌ها

  • محتوا:

  • کلاس‌های انتزاعی (Abstract Classes): کلاس‌هایی که نمی‌توان از آن‌ها مستقیماً شیء ساخت و معمولاً شامل متدهای انتزاعی هستند.

  • واسط‌ها (Interfaces): قراردادهایی که مشخص می‌کنند یک کلاس چه متدهایی باید پیاده‌سازی کند (بدون ارائه پیاده‌سازی).

  • تفاوت بین کلاس انتزاعی و واسط.

  • نقش این مفاهیم در طراحی سیستم‌های بزرگ و قابل نگهداری.

  • مثال: کلاس انتزاعی حیوان با متد انتزاعی صدا_ایجاد_کن(). کلاس‌های گربه و سگ که از حیوان ارث می‌برند و متد صدا_ایجاد_کن() را پیاده‌سازی می‌کنند (مثلاً “میو” برای گربه، “هاپ هاپ” برای سگ).

  • تمرین پایان فصل:

۱. کلاس انتزاعی چیست و چه زمانی از آن استفاده می‌کنیم؟

۲. واسط (Interface) چه نقشی در برنامه‌نویسی شیءگرا ایفا می‌کند؟

۳. یک مثال بزنید که در آن استفاده از واسط مفیدتر از وراثت باشد.










































  • خلاصه نکات کلیدی:

  • کلاس‌های انتزاعی و واسط‌ها ابزارهایی برای تعریف قراردادها و الگوهای طراحی در سطوح بالاتر هستند.

  • آن‌ها به ایجاد ساختارهای نرم‌افزاری قوی‌تر و انعطاف‌پذیرتر کمک می‌کنند.
درس متنی 5/19
در حال مشاهده
جلسه 5 مقدمه اي بر طراحی و برنامه سازي شیءگرا