برنامه‌سازی شی‌گرا (جاوا)

مدرس: مهدی دولتی گواهی: رسمی دوزبانه
ترم: زمستان ۱۴۰۳ پیش‌نیاز: برنامه‌سازی پایتون
زمان ارائه: یک‌شنبه و سه‌شنبه ۱۵:۰۰ تا ۱۶:۳۰ محل برگزاری: کلاس مجازی

هدف کلی

در این درس، مفاهیم برنامه‌نویسی شی‌ءگرا در قالب زبان برنامه‌نویسی جاوا تدریس می‌شود. همچنین ویژگی‌های ذاتی زبان جاوا، امکانات برنامه‌سازی در جاوا، تفاوت رویکرد جاوا با زبان‌های مشابه در موارد مختلف، برنامه‌سازی همروند و کیفیت نرم‌افزار مورد توجه قرار می‌گیرد. فرض بر این است که دانشجویان با یک زبان برنامه‌سازی مانند پایتون آشنا هستند و برخی روش‌های حل مسئله با کمک برنامه‌سازی مانند جستجو، مرتب‌سازی، عملیات ریاضی و نظایر آن را می‌شناسند. تأکید در این درس بر مفاهیم شیءگرا است.

سرفصل‌ها

  • آشنایی با زبان جاوا (۱ جلسه)
    • تاریخچه
    • ویژگی‌های زبان جاوا
    • اولین برنامه در جاوا
  • مفاهیم اولیه برنامه‌سازی در جاوا (۳ جلسه)
    • متغیر، متد، شرط، حلقه
    • داده‌های اولیه (Primitive Data Types)
    • رشته
    • آرایه
  • مقدمه‌ای بر طراحی و برنامه‌سازی شیءگرا (۲ جلسه)
    • تاریخچه تکامل رویکردها تا رویکرد شیءگرایی
    • مفاهیم اولیه شیءگرایی
    • طرز تفکر و طراحی شیءگرا
    • لفاف‌بندی، واسط، رده، بسته، دسترسی
  • برنامه‌سازی شیءگرا در جاوا (۶ جلسه)
    • نحوه تعریف کلاس‌ها
    • اشیاء در حافظه و مدیریت حافظه
    • بارگذاری اولیه و مرگ اشیاء در حافظه
    • زباله‌روب (Garbage Collector)
    • روش‌های ارسال پارامتر در زبان‌های مختلف و جاوا
    • سازنده
    • this
    • اعضای ایستا
    • بسته (package)
    • آشنایی اولیه با نمودار UML Class Diagram
  • وراثت (۲ جلسه)
    • مفهوم وراثت
    • Protected, abstract, super
    • وراثت چندگانه در سایر زبانها
  • چندریختی (۱ جلسه)
    • چندریختی با کمک وراثت
    • مفهوم virtual در زبان جاوا
    • اعضای final
  • واسط (interface) (۱ جلسه)
    • کاربرد واسط
    • وراثت چندگانه با کمک واسط
  • آزمون نرم‌افزار (۱ جلسه)
    • مفهوم تضمین کیفیت نرم‌افزار، اهمیت، جایگاه و مصادیق آن
    • آزمون واحد
    • نوشتن آزمون واحد با استفاده از JUnit
    • چگونگی تست پرتاب استثناء با استفاده از JUnit
    • مفهوم بدل‌سازی (Mocking) و مقدمه ای بر یک کتابخانه بدل‌سازی در جاوا
  • الگوهای طراحی (۱ جلسه)
    • تعریف الگوها در مهندسی نرم‌افزار، جایگاه و اهمیت آن‌ها
    • الگوهای طراحی GoF و دسته‌بندی آن‌ها
    • شرح الگوهای طراحی Singleton، Sate، Strategy، Observer، Fecade
    • شرح الگوی معماری MVC
  • بازآرایی کد (Refactoring) (۲ جلسه)
    • چیستی بازآرایی و اهمیت نوشتن کد تمیز
    • نشانه‌های کد بد
    • الگوهای بازآرایی
      • ساختن متدها
      • انتقال ویژگی‌ها بین اشیاء
      • سازماندهی داده‌ها
      • ساده‌سازی عبارات شرطی
      • ساده‌سازی فراخوانی متدها
  • مدیریت خطا و استثنا (۲ جلسه)
    • مدل سنتی مدیریت خطا
    • چارچوب مدیریت خطا در جاوا
    • مزایای این مدل
    • Finally, Runtime Exception
  • داده‌های عام (Generics) (۱ جلسه)
    • متدها و کلاس‌های عام
    • کاربردها
    • تولید و استفاده از کلاس‌های عام
    • کلاس‌های عام و وراثت
    • ماهیت کلاس‌های عام و تفاوت آن‌ها با Template در زبان C++
  • مجموعه‌ها و ظرف‌ها (Containers) (2 جلسه)
    • ساختمان‌داده‌های موجود در جاوا
    • Colections, ArrayList, LinkedList, Set, Map
    • Iterator
  • فایل، جویبار و شبکه (۲ جلسه)
    • ورودی و خروجی در فایل
    • Serialization
    • برنامه‌سازی تحت شبکه (socket)
  • برنامه‌سازی همروند (۱ جلسه)
    • نیاز به همروندی
    • همروندی در جاوا
    • طول عمر یک thread
    • آشنایی اولیه با مفاهیم Synchronization و critical section
  • Reflection (۱ جلسه)
    • نیاز به RTTI
    • RTTI در جاوا
    • کاربردها
  • مفاهیم پیشرفته و تکمیلی (۱ جلسه)
    • کلاس‌های داخلی و کلاس‌های بی‌نام
    • حاشیه‌گذاری (Annotation)
    • Enumeration

ارزیابی

  • تمرین‌های عملی هفتگی و پروژه : ۵۰٪ نمره
  • آزمون‌ پایانی: ۵۰٪ نمره

منابع

  1. P. Deitel, H. Deitel. Java: How to Program. 11th Edition, Pearson Education, 2017.
  2. B. Eckel. Thinking in Java. 4th Edition, Prentice Hall, 2006.
  3. M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.