Skip to content

Commit 270b93c

Browse files
author
Saeid Darvish
committed
edited l06
1 parent f83b559 commit 270b93c

File tree

6 files changed

+149
-89
lines changed

6 files changed

+149
-89
lines changed

source/_static/sitemap-index.xml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,28 @@
1515
<priority>0.80</priority>
1616
</url>
1717
<url>
18-
<loc>https://python.coderz.ir/lessons/l01.html</loc>
19-
<lastmod>2021-03-17T17:10:25+00:00</lastmod>
18+
<loc>https://python.coderz.ir/lessons/l01-introduction-to-python.html</loc>
19+
<lastmod>2023-03-17T17:10:25+00:00</lastmod>
2020
<priority>0.80</priority>
2121
</url>
2222
<url>
23-
<loc>https://python.coderz.ir/lessons/l02.html</loc>
24-
<lastmod>2021-03-17T17:10:25+00:00</lastmod>
23+
<loc>https://python.coderz.ir/lessons/l02-setup-python.html</loc>
24+
<lastmod>2023-03-17T17:10:25+00:00</lastmod>
2525
<priority>0.80</priority>
2626
</url>
2727
<url>
28-
<loc>https://python.coderz.ir/lessons/l03.html</loc>
29-
<lastmod>2021-03-17T17:10:25+00:00</lastmod>
28+
<loc>https://python.coderz.ir/lessons/l03-create-and-run-a-python-project.html</loc>
29+
<lastmod>2023-03-17T17:10:25+00:00</lastmod>
3030
<priority>0.80</priority>
3131
</url>
3232
<url>
33-
<loc>https://python.coderz.ir/lessons/l04.html</loc>
34-
<lastmod>2021-03-17T17:10:25+00:00</lastmod>
33+
<loc>https://python.coderz.ir/lessons/l04-python-interactive-mode.html</loc>
34+
<lastmod>2023-03-17T17:10:25+00:00</lastmod>
3535
<priority>0.80</priority>
3636
</url>
3737
<url>
38-
<loc>https://python.coderz.ir/lessons/l05.html</loc>
39-
<lastmod>2021-03-17T17:10:25+00:00</lastmod>
38+
<loc>https://python.coderz.ir/lessons/l05-object-oriented-programming.html</loc>
39+
<lastmod>2023-03-17T17:10:25+00:00</lastmod>
4040
<priority>0.80</priority>
4141
</url>
4242
<url>

source/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
:scale: 60 %
6868
:alt: بروز شده با نسخه 3.11
6969

70-
**شروع:** فروردین ۱۳۹۴ **و** **آخرین بروزرسانی:** آذر ۱۴۰۰ [`گزارش توسعه <log.html>`__] - **بروز شده با نسخه ۳.۱۱ پایتون**
70+
**شروع:** فروردین ۱۳۹۴ **و** **آخرین بروزرسانی:** فروردین ۱۴۰۲ [`گزارش توسعه <log.html>`__] - **در حال بروزرسانی با نسخه ۳.۱۱ پایتون**
7171

7272

7373

source/lessons/l05-object-oriented-programming.rst

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@
5151

5252
تا به اینجا با مفاهیم «کلاس»، «صفت»، «متد» و «شی» آشنا شده‌ایم؛ در ادامه به توضیح مفاهیم اصلی از برنامه‌نویسی شی‌گرا خواهیم پرداخت.
5353

54-
.. rubric:: نمونه‌سازی:
54+
55+
.. _python-oop-instantiation:
56+
57+
نمونه‌سازی
58+
~~~~~~~~~~~~~~~~~~~
5559

5660
به هر شی از یک کلاس، یک نمونه (Instance) از آن کلاس گفته می‌شود و به عمل ایجاد شی از کلاس در شی‌گرایی «**نمونه‌سازی**» (Instantiation) گفته می‌شود. در این مفهموم، هدف نهایی از تعریف کلاس‌ها در برنامه، تنها تولید شی نیست. گاهی نیز وجود یک کلاس تنها برای درج تعاریف مشترک بین چند کلاس دیگر کاربرد پیدا می‌کند. بر همین اساس دو نوع کلاس در شی‌گرایی وجود دارد: ۱- کلاس‌های عادی که توانایی نمونه‌سازی دارند و به آن‌ها **”Concrete Class“** گفته می‌شود ۲- کلاس‌هایی که توانایی نمونه‌سازی ندارند و به آن‌ها **”Abstract Class“** گفته می‌شود.
5761

@@ -66,13 +70,23 @@
6670
.. image:: /_static/l05-car-class-object-sample.jpg
6771
:align: center
6872

69-
.. rubric:: کپسوله‌سازی:
73+
74+
.. _python-oop-encapsulation:
75+
76+
کپسوله‌سازی
77+
~~~~~~~~~~~~~~~~~~~
78+
7079

7180
یک مفهوم دیگر در برنامه‌نویسی شی‌گرا، «**کپسوله‌سازی**» (Encapsulation) است. کپسوله‌سازی به معنی پنهان‌سازی داده‌ها یا عملیات‌های درون یک شی است که با محدودسازی دسترسی به آن‌ها به دست می‌آید. در این شرایط اشیا باید بدون آگاهی از ساختار درونی و چگونگی انجام عملیات یکدیگر به تعامل بپردازند. این امر از پیچیدگی برنامه جلوگیری و تغییر را ساده‌تر می‌کند.
7281

73-
.. rubric:: وراثت:
7482

75-
وراثت یکی از شکل‌های «قابلیت استفاده مجدد» کد بوده که برنامه‌نویس را قادر می‌سازد تا با ارث‌بری صفات و متدهای یک یا چند کلاس موجود، کلاس‌های جدیدی را ایجاد نماید.
83+
.. _python-oop-inheritance:
84+
85+
وراثت
86+
~~~~~~~~~~~~~~~~~~~
87+
88+
89+
وراثت (Inheritance) یکی از شکل‌های «قابلیت استفاده مجدد» کد بوده که برنامه‌نویس را قادر می‌سازد تا با ارث‌بری صفات و متدهای یک یا چند کلاس موجود، کلاس‌های جدیدی را ایجاد نماید.
7690

7791

7892
برای نمونه فرض کنیم طراح کلاس خودروی پیش، قصد طراحی یک مدل خودرو جدید با رویکرد باربری دارد؛ بنابراین می‌بایست کلاسی جدید برای تولید آن تهیه نماید. ولی کلاس جدید علاوه‌بر صفات (ظرفیت بارگیری و..) و متدهای (انجام بارگیری، تخلیه بار و...) خاص خودش به صفات (رنگ بدنه، ظرفیت باک و...) و متدهای (راندن، سوخت گیری، توقف و...) مشابه در کلاس قبل هم نیاز دارد؛ در این حالت نیازی به تعریف مجدد آن‌ها نیست و می‌توان صفات و متدهای کلاس پیش را در کلاس جدید به ارث برد یا یک Abstract Class برای درج تعاریف مشترک هر دو کلاس ایجاد کرد که این دو مدل خورد می‌توانند آن را به ارث ببرند.
@@ -86,18 +100,30 @@
86100
.. image:: /_static/l05-Inheritance-Hierarchy-Sample.png
87101
:align: center
88102

89-
.. rubric:: ترکیب:
103+
104+
.. _python-oop-composition:
105+
106+
ترکیب
107+
~~~~~~~~~~~~~~~~~~~
108+
90109

91110
در برنامه‌نویسی شی‌گرا نسبت دیگری نیز با عنوان «نسبت **دارد-یک**» (HAS-A Relationship) وجود دارد که بیانگر مفهومی به نام «**ترکیب**» (Composition) است که شکل دیگری از قابلیت استفاده مجدد کد می‌باشد ولی مفهومی متفاوت با وراثت دارد. این نسبت زمانی بیان می‌شود که درون یک کلاس (مانند: C) از کلاس دیگری (مانند: D) نمونه‌سازی شده باشد؛ یعنی شی کلاس C درون خودش شی‌ای از کلاس D را داشته باشد؛ در این حالت می‌گوییم: C has a D. به یاد دارید خواندیم کلاس کارخانه خودروسازی با هماهنگ کردن اشیای واحدهای کوچکتر، عملیات خود را تعریف می‌کند. مثلا کلاس موتور - یعنی درون این کلاس یک شی از کلاس موتور ایجاد شده است، اکنون می‌توانیم بگوییم: «خودرو» یک «موتور» دارد.
92111

93112
.. image:: /_static/l05-has-a-Sample.png
94113
:align: center
95114

96-
.. rubric:: چندریختی:
115+
116+
.. _python-oop-polymorphism:
117+
118+
چندریختی
119+
~~~~~~~~~~~~~~~~~~~
97120

98121
مفهوم چندریختی (Polymorphism) بیانگر توانایی کلاس فرزند در بازتعریف متدهایی است که در کلاس پایه موجود می‌باشند. برای نمونه دو کلاس «ماهی» و «گربه» را که هر دو آن‌ها از کلاسی به نام «حیوان» ارث‌بری دارند را در نظر بگیرید؛ در کلاس حیوان متدی با عنوان «غذا خوردن» که عملی مشترک در میان تمام حیوانات است وجود دارد ولی از آنجا که چگونگی انجام آن در ماهی و گربه متفاوت است، بنابراین هر دو این کلاس‌ها نیاز دارند تا متد «غذا خوردن» مخصوص خود را داشته باشند - در این جاست که این متد در کلاس‌های فرزند بازتعریف می‌شود، به این عمل **”Method Overriding“** گفته می‌شود. با Override کردن یک متد، متد کلاس پایه زیر سایه متد مشابه در کلاس فرزند قرار می‌گیرد و از نظر اشیا کلاس فرزند پنهان می‌شود.
99122

100-
.. rubric:: تجرید:
123+
.. _python-oop-abstraction:
124+
125+
تجرید
126+
~~~~~~~~~~~~~~~~~~~
101127

102128
تجرید (Abstraction) در برنامه‌نویسی شی‌گرا به همراه چندریختی می‌آید و توسط دو مفهوم «**کلاس‌های مجرد**» (Abstract Classes) و «**متدهای مجرد**» (Abstract Methods) ارایه می‌گردد.
103129

0 commit comments

Comments
 (0)