Skip to content

Commit 8d68776

Browse files
author
Saeid
committed
l19: start Abstraction
1 parent 2aaf3f3 commit 8d68776

1 file changed

Lines changed: 63 additions & 2 deletions

File tree

lessons/l19.rst

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,14 +228,75 @@
228228

229229

230230

231+
انتزاع (Abstraction)
232+
----------------------------------
231233

234+
انتزاع یا تجرید یا Abstraction در شی گرایی فرآیندی است که طی آن تنها ویژگی‌های اصلی، آن‌هم بدون پیاده‌سازی جزییات ارايه می‌گردد. در واقع **Abstraction** برابر است با **Implementation hiding**. این مفهوم همراه با موجودیت کلاس تعریف می‌شود. کلاس‌های Abstrac، از درس پنجم به یاد داریم که دو نوع کلاس در شی‌گرایی وجود دارد: ۱- کلاس‌های عادی که توانایی نمونه‌سازی دارند و به آن‌ها **”Concrete Class“** گفته می‌شود ۲- کلاس‌هایی که توانایی نمونه‌سازی ندارند و به آن‌ها **”Abstract Class“** گفته می‌شود.
232235

236+
«کلاس Abstract» کلاسی است که شامل یک یا چند «متد Abstract» باشد و «متد Abstract» متدی است که اعلان (Declare) شده ولی بدنه آن ‌تعریف (Define) نشده است. کلاس‌های Abstract قابلیت نمونه‌سازی ندارند و نمی‌توان از آن‌ها شی ایجاد نمود؛ چرا که هدف از توسعه آن‌ها قرار گرفتن در بالاترین سطح (یا چند سطح بالایی) سلسله‌مراتب وراثت، به عنوان کلاس پایه برای ارث‌بری کلاس‌های پایین‌تر می‌باشد. در واقع ایده طراحی کلاس Abstract در تعیین یک نقشه توسعه برای subclassها می‌باشد.
233237

238+
در زبان برنامه‌نویسی پایتون، Abstraction از طریق ماژول ``abc`` ارايه می‌شود [`اسناد پایتون <https://docs.python.org/3/library/abc.html>`__]. این ماژول دو راه برای ایجاد کلاس Abstract فراهم آورده است:
234239

240+
۱- با استفاده از متا کلاس ``ABCMeta`` [`اسناد پایتون <https://docs.python.org/3/library/abc.html#abc.ABCMeta>`__]:
235241

236-
انتزاع (Abstraction)
237-
----------------------------------
242+
.. code-block:: python
243+
:linenos:
244+
245+
from abc import ABCMeta, abstractmethod
246+
247+
class MyABC(metaclass=ABCMeta):
248+
249+
@abstractmethod
250+
def abs_instance_method(self):
251+
pass
252+
253+
@classmethod
254+
@abstractmethod
255+
def abs_class_method(cls):
256+
pass
257+
258+
@staticmethod
259+
@abstractmethod
260+
def abs_static_method():
261+
pass
262+
263+
۲- با استفاده از ارث‌بری کلاس ``ABC`` [`اسناد پایتون <https://docs.python.org/3/library/abc.html#abc.ABC>`__]، ``ABC`` یک کلاس کمکی است که متا کلاس آن ``ABCMeta`` می‌باشد و از نسخه 3.4 به پایتون افزوده شده است:
264+
265+
266+
.. code-block:: python
267+
:linenos:
268+
269+
from abc import ABC, abstractmethod
270+
271+
class MyABC(ABC):
272+
273+
@abstractmethod
274+
def abs_instance_method(self):
275+
pass
276+
277+
@classmethod
278+
@abstractmethod
279+
def abs_class_method(cls):
280+
pass
281+
282+
@staticmethod
283+
@abstractmethod
284+
def abs_static_method():
285+
pass
286+
287+
288+
289+
.. tip::
290+
291+
در زبان برنامه‌نویسی پایتون:
292+
293+
* کلاس‌های Abstract می‌توانند علاوه بر متدهای Abstract، شامل متدهای معمولی که پیش‌تر شرح داده شد نیز باشند.
238294

295+
* نمی‌توان از کلاس‌های Abstract شی ایجاد کرد،‌ این نوع کلاس فاقد عملیات نمونه‌سازی می‌باشد.
296+
297+
* متدهای Abstract با استفاده از دکوراتور ``abstractmethod@`` از ماژول ``abc`` ایجاد می‌گردد.
298+
299+
* متدهای Abstract مانند هر متدی دیگری در پایتون می‌توانند از انواع Instance Method یا Class Method یا Static Method باشند.
239300

240301

241302
|

0 commit comments

Comments
 (0)