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

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

معرفی درس

برنامه‌سازی شیءگرا با جاوا؛ از مفاهیم پایه تا طراحی و توسعه نرم‌افزار باکیفیت

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

در این درس، ضمن آشنایی با زبان جاوا و مفاهیم اولیه برنامه‌سازی در آن، بر اصول برنامه‌نویسی شیءگرا و نحوه به‌کارگیری آن‌ها در طراحی و پیاده‌سازی نرم‌افزار تمرکز می‌شود. مفاهیمی مانند کلاس و شیء، لفاف‌بندی، وراثت، چندریختی و واسط‌ها، در کنار مدیریت حافظه، مجموعه‌ها، داده‌های عام و مدیریت خطا و استثنا بررسی خواهند شد. همچنین با نمودارهای کلاس UML و تفاوت‌های جاوا با برخی زبان‌های برنامه‌نویسی دیگر آشنا می‌شوید.

بخش مهمی از توسعه نرم‌افزار، فراتر از نوشتن کدی است که صرفاً کار می‌کند. به همین دلیل، در این درس موضوعاتی مانند آزمون واحد با JUnit، الگوهای طراحی، بازآرایی کد و اصول نوشتن کد تمیز نیز مورد توجه قرار می‌گیرند. در ادامه، امکاناتی مانند ورودی و خروجی فایل، برنامه‌سازی تحت شبکه، برنامه‌سازی همروند، بازتاب (Reflection) و سایر قابلیت‌های زبان جاوا معرفی می‌شوند تا دید جامع‌تری از امکانات این زبان به دست آورید.

در پایان این درس چه توانایی‌هایی کسب می‌کنید؟

با گذراندن این درس، انتظار می‌رود بتوانید:

  • برنامه‌های جاوا را با استفاده از متغیرها، متدها، شرط‌ها، حلقه‌ها، رشته‌ها و آرایه‌ها بنویسید.
  • مفاهیم اصلی برنامه‌نویسی شیءگرا، از جمله کلاس، شیء، لفاف‌بندی، وراثت، چندریختی و واسط را درک کرده و در طراحی برنامه به کار ببرید.
  • کلاس‌ها و اشیاء را طراحی کنید و با سازنده‌ها، اعضای ایستا، بسته‌ها و مفاهیم مرتبط با مدیریت حافظه در جاوا آشنا شوید.
  • از امکاناتی مانند استثناها، داده‌های عام و مجموعه‌های استاندارد جاوا برای سازمان‌دهی و مدیریت داده‌ها استفاده کنید.
  • با اصول تضمین کیفیت نرم‌افزار، آزمون واحد و ابزار JUnit آشنا شوید.
  • نقش الگوهای طراحی را در طراحی نرم‌افزار درک کنید و با الگوهای پرکاربردی مانند Singleton، Strategy، Observer و MVC آشنا شوید.
  • کدهای موجود را از نظر خوانایی و ساختار بررسی کنید و با روش‌های بازآرایی و بهبود کیفیت کد آشنا شوید.
  • از امکانات جاوا برای کار با فایل‌ها، جویبارهای ورودی و خروجی، ارتباطات شبکه‌ای و برنامه‌سازی همروند استفاده کنید.
  • با قابلیت‌های تکمیلی جاوا، از جمله Reflection، کلاس‌های داخلی، حاشیه‌گذاری‌ها و نوع‌های شمارشی آشنا شوید.

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

پیش‌نیاز

آشنایی مقدماتی با برنامه‌نویسی و تجربه کار با دست‌کم یک زبان برنامه‌نویسی، مانند پایتون، پیش‌نیاز این درس است. انتظار می‌رود دانش‌پذیر با مفاهیم پایه‌ای مانند متغیر، شرط، حلقه، تابع یا متد و آرایه آشنا باشد. آشنایی مقدماتی با روش‌های حل مسئله و الگوریتم‌هایی مانند جست‌وجو و مرتب‌سازی نیز مفید است. آشنایی قبلی با زبان جاوا یا برنامه‌نویسی شیءگرا الزامی نیست؛ مفاهیم اصلی این رویکرد در طول درس معرفی می‌شوند.

سرفصل‌ها

  • آشنایی با زبان جاوا (۱ جلسه)
    • تاریخچه
    • ویژگی‌های زبان جاوا
    • اولین برنامه در جاوا
  • مفاهیم اولیه برنامه‌سازی در جاوا (۳ جلسه)
    • متغیر، متد، شرط، حلقه
    • داده‌های اولیه (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.