From 9594c01344d513a4a730abf9ccfdf5170f4e2e61 Mon Sep 17 00:00:00 2001 From: Moeein Aali Date: Mon, 21 Jul 2025 12:04:53 +0330 Subject: [PATCH 1/2] fix: typo in SOLID --- educational-resources/SOLID/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/educational-resources/SOLID/README.md b/educational-resources/SOLID/README.md index c68ed2f..0f0e0e2 100644 --- a/educational-resources/SOLID/README.md +++ b/educational-resources/SOLID/README.md @@ -1,5 +1,5 @@ # اصول شی گرایی -شی گرایی یا +شی‌گرایی یا Object Oriented صرفا یک روش برنامه نویسی نیست؛ بلکه نوعی روش نگاه است به قلمروی مسئله؛ پشتیبانی زبان های برنامه نویسی متعدد از این رویکرد، به ما کمک می‌کند که آن چه را در قلمروی مسئله و با این رویکرد توصیف کرده ایم، در قلمروی جواب نیز پیاده سازی کنیم. طراحی سیستم‌ها با رویکرد شی گرایی نیازمند رعایت اصولی است که باعث می‌شود که تغییر دادن سیستم در مواقع لزوم و نیز مراقبت و نگهداری از آن، با حداقل نیاز تغییرات در اجزای متعدد سیستم مقدور باشد. @@ -16,10 +16,10 @@ PLK این اصل بیام می‌دارد که کلاس شما بایستی یک دلیل برای تغییر داشته باشد؛ در غیر این صورت این اصل نقض شده است. مثال : فرض کنید که یک کلاس User در سیستم مدیریت امور آموزشی دارید که وظیفه رسیدگی به اطلاعات کاربری در آن تعریف شده است؛ حال فرض کنید که در این کلاس، توابعی وجود داشته باشد که کارهایی از مدیریت دروس را انجام می‌دهد (حال آن که این توابع در خصوص مدیریت کاربران چندان معنا ندارد). با توجه به وجود توابعی که چندان به این کلاس مرتبط نیست، اصل SRP با مشکل مواجه می‌شود. ### اصل باز بسته یا Open-Close Principle (OCP) -ن اصل بیان می‌دارد که باید به گونه‌ای سیستم را طراحی کنید که در صورت نیاز به افزودن قابلیت (کلاس‌های) جدید به آن، لازم نباشد که بخش مهمی از کلاس‌های موجود را تغییر دهید. این رویکرد باعث کاهش وابستگی (Coupling) +این اصل بیان می‌دارد که باید به گونه‌ای سیستم را طراحی کنید که در صورت نیاز به افزودن قابلیت (کلاس‌های) جدید به آن، لازم نباشد که بخش مهمی از کلاس‌های موجود را تغییر دهید. این رویکرد باعث کاهش وابستگی (Coupling) در بین کلاس‌های شما و در سطح سیستم می‌شود. برای آن که بتوانید این اصل را رعایت کنید، لازم است اصل DIP را نیز رعایت کنید. ### اصل Liskov Substitution Principle (LSP) -این اصل بیان می‌کند که که زیرکلاس های یک کلاس باید بتوانند به جای کلاس والدشان جایگزین شوند؛ این یعنی باید بتوان از قابلیت Polymorfism به درستی استفاده کرد و برای این منظور، بایستی کلاس‌های فرزند با کلاس والدشان رابطه is-a داشته باشد. جهت اطلاع بیشتر، به +این اصل بیان می‌کند که زیرکلاس های یک کلاس باید بتوانند به جای کلاس والدشان جایگزین شوند؛ این یعنی باید بتوان از قابلیت Polymorfism به درستی استفاده کرد و برای این منظور، بایستی کلاس‌های فرزند با کلاس والدشان رابطه is-a داشته باشد. جهت اطلاع بیشتر، به [این مثال ساده](https://github.com/ssc-public/Software-Engineering-Lab/blob/main/resources/SOLID/%D8%B9%D9%86%DA%A9%D8%A8%D9%88%D8%AA%20%D9%8A%DA%A9%20%D8%A7%D8%B3%D8%A8%20%D9%86%D9%8A%D8%B3%D8%AA.pdf) توجه کنید. ### اصل جداسازی واسط‌ها یا Interface segregation Principle (ISP) From 38ccb0877baef944b60b6cea8eaa30f593fb1849 Mon Sep 17 00:00:00 2001 From: Moeein Aali Date: Mon, 21 Jul 2025 12:15:06 +0330 Subject: [PATCH 2/2] fix: wrong links in SOLID --- educational-resources/SOLID/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/educational-resources/SOLID/README.md b/educational-resources/SOLID/README.md index 0f0e0e2..c8b432a 100644 --- a/educational-resources/SOLID/README.md +++ b/educational-resources/SOLID/README.md @@ -20,11 +20,11 @@ PLK در بین کلاس‌های شما و در سطح سیستم می‌شود. برای آن که بتوانید این اصل را رعایت کنید، لازم است اصل DIP را نیز رعایت کنید. ### اصل Liskov Substitution Principle (LSP) این اصل بیان می‌کند که زیرکلاس های یک کلاس باید بتوانند به جای کلاس والدشان جایگزین شوند؛ این یعنی باید بتوان از قابلیت Polymorfism به درستی استفاده کرد و برای این منظور، بایستی کلاس‌های فرزند با کلاس والدشان رابطه is-a داشته باشد. جهت اطلاع بیشتر، به -[این مثال ساده](https://github.com/ssc-public/Software-Engineering-Lab/blob/main/resources/SOLID/%D8%B9%D9%86%DA%A9%D8%A8%D9%88%D8%AA%20%D9%8A%DA%A9%20%D8%A7%D8%B3%D8%A8%20%D9%86%D9%8A%D8%B3%D8%AA.pdf) +[این مثال ساده](https://github.com/ssc-public/Software-Engineering-Lab/blob/main/educational-resources/SOLID/%D8%B9%D9%86%DA%A9%D8%A8%D9%88%D8%AA%20%D9%8A%DA%A9%20%D8%A7%D8%B3%D8%A8%20%D9%86%D9%8A%D8%B3%D8%AA.pdf) توجه کنید. ### اصل جداسازی واسط‌ها یا Interface segregation Principle (ISP) این اصل بیان می‌دارد که به جای آن که برای گروهی از زیرکلاس‌هایتان یک واسط بزرگ بسازید، از واسط‌های کوچک تر و منسجم تر استفاده کنید تا مجبور نشوید برای برخی از زیرکلاس‌ها، برخی از توابع را با بدنه خالی پیاده سازی کنید و دچار Refused Bequest نشوید. -[دیدن این مثال می‌تواند به درک بهتر این دو اصل کمک کند](https://github.com/ssc-public/Software-Engineering-Lab/blob/main/resources/SOLID/%D8%B9%D9%86%DA%A9%D8%A8%D9%88%D8%AA%20%D9%8A%DA%A9%20%D8%A7%D8%B3%D8%A8%20%D9%86%D9%8A%D8%B3%D8%AA.pdf) +[دیدن این مثال می‌تواند به درک بهتر این دو اصل کمک کند](https://github.com/ssc-public/Software-Engineering-Lab/blob/main/educational-resources/SOLID/%D8%B9%D9%86%DA%A9%D8%A8%D9%88%D8%AA%20%D9%8A%DA%A9%20%D8%A7%D8%B3%D8%A8%20%D9%86%D9%8A%D8%B3%D8%AA.pdf) ### اصل Dependency Inversion Principle یا DIP این اصل بیان می‌دارد که بهتر است وابستگی بین اجزای سیستم در سطح کلاس های انتزاعی و یا واسط ها باشد. در این صورت، تغییر در زیرکلاس‌ها باعث تغییر در بخش‌های دیگر سیستم نمی‌شود؛ در نتیجه بهتر است که زیرکلاس‌های Concreete را به صورت مستقیم به یک دیگر مرتبط نکنیم. با رعایت این اصل ، می‌توان به تحقق اصل OCP نیز کمک کرد. @@ -39,6 +39,6 @@ PLK - [توضیحاتی در مورد Cohesion](https://pages.cpsc.ucalgary.ca/~eberly/Courses/CPSC333/Lectures/Design/cohesion.html) - یکی دیگر از ویژگی‌هایی که باید در برنامه شما برقرار باشد، همبند بودن توابع و رفتارهای داخل هر کلاس است. اصول SOLID به برقراری این وِیژگی کمک می‌کنند. - اصول شئ‌گرایی: [بخش ۱ (بیست دقیقه پایانی)](https://ocw.sharif.edu/course/385/session/id/8776) | [بخش ۲ (کل جلسه به‌غیر از GRASP)](https://ocw.sharif.edu/course/385/session/id/8777) | [بخش ۳ (نیم‌ساعت اول)](https://ocw.sharif.edu/course/385/session/id/8778) -- [توضیح مثال اسب و عنکبوت](https://github.com/ssc-public/Software-Engineering-Lab/blob/main/resources/SOLID/%D8%B9%D9%86%DA%A9%D8%A8%D9%88%D8%AA%20%D9%8A%DA%A9%20%D8%A7%D8%B3%D8%A8%20%D9%86%D9%8A%D8%B3%D8%AA.pdf) +- [توضیح مثال اسب و عنکبوت](https://github.com/ssc-public/Software-Engineering-Lab/blob/main/educational-resources/SOLID/%D8%B9%D9%86%DA%A9%D8%A8%D9%88%D8%AA%20%D9%8A%DA%A9%20%D8%A7%D8%B3%D8%A8%20%D9%86%D9%8A%D8%B3%D8%AA.pdf)