۱۱/۲۰/۱۳۸۸

برنامه نویسی شیء گرا - قسمت اول



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

class Point(object):
    x=None
    y=None
فعلا نقطه رو فقط با دو ویژگی تعریف کردیم. حالا با این تعریف دو تا نقطه میسازیم

>>> p1=Point()
>>> p2=Point()
>>> p1.x=3
>>> p1.y=5
>>> print p1.x, p1.y
3 5
>>> p2.y=6
>>> p2.x=1
>>> p2.x+p2.y
7
>>> 

تو خط اول گفتیم پی 1 یه نقطس و تو خط های سوم و چهارم ویژگیهاشو مشخص کردیم. بعد تو خط پنجم اومدیم به ترتیب اونارو پرینت کردیم
میشه همزمان با تعریف کردن  پی 1 ، ویژگیهاشم مشخص کرد. در ضمن مثل موقعی که یه متغیر رو پرینت میکنیم و مقدارش چاپ میشه ، یه نمونه از یه کلاس رو هم میتونیم مستقیم پرینت کنیم و تعیین کنیم چیش چاپ شه! دقت کنید

class Point(object):
   
    def __init__(self,x,y):
        self.x=x
        self.y=y

    def __str__(self):
        return str(self.x)+' '+str(self.y)

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

>>> p3=Point(4,12)
>>> print p3
4 12
>>> str(p3)
'4 12'
>>>  
 
دقت کنید در تمامی توابع یه کلاس به جای اولین ورودی،  اون نمونه ای از کلاس که تابع رو صدا میزنه قرار میگیره. مثلا تو مثال بالا تو خط اول، پی3 به جای اولین آرگومان قرار گرفت و 4 و 12 به ترتیب دومین و سومین ورودیهای تابع سازنده میشن

به سه دستور زیر دقت کنید. اینا معادلن


>>> str(p3) ; p3.__str__() ; Point.__str__(p3)
'4 12'
'4 12'
'4 12'
>>> 

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

class Point(object):
    '''represents a point on a 2D screen'''
   
    def __init__(self,x,y):
        '''
        x is the coordinate along x-axis
        y is the coordinate along y-axis
        '''
        self.x=x
        self.y=y

    def __str__(self):
        '''

        point's coordinates in string seperated
        by a white space
        ''' 
        return str(self.x)+' '+str(self.y)

    def distance_from(self,aPoint):
        '''
        calculates distance of aPoint

        from this point.
        (returns a floating point number)
        '''
        #we need sqrt
in our calculation
        from math import sqrt
        #using Pythagorean theorem
        dx=self.x-aPoint.x
        dy=self.y-aPoint.y
        return sqrt(dx**2+dy**2)

حالا متود جدیدو امتحان میکنیم

>>> p=Point(3,5)
>>> o=Point(0,0)
>>> p.distance_from(o)
5.8309518948453007
>>> 

به این نوشته هایی که با رنگ سبز مشخص شدن "داک استرینگ" میگن. دقت کنید که "داک استرینگ" ها باید از اولین خط بعد از تعریف کلاس یا تابع نوشته شن

>>> print p.distance_from.__doc__

        calculates distance of aPoint from this point
        (returns a floating point number)
       
>>> print Point.__doc__
represents a point on a 2D screen
>>>  

فک کنم برای قسمت اول کافی باشه☺

۴ نظر:

  1. یک نگاه به آرشیو نشریه سمپادیا بنداز، یه مقاله دو قسمتی برای "شی گرایی" نوشته بودم.
    ای کاش اول توضیح می دادی که شی گرایی کلا چیه، بعد به زبان برنامه نویسی وصلش می کردی.
    در ضمن برای راحت خونده شدن متن، رسمی بنویس..
    مطالبت رو حتما دنبال می کنم، تا یاد بگیرم..

    پاسخحذف
  2. مرسی سعید جان به خاطر پیشنهادات. فک کنم ویکیپدیا خوب مفهوم شیءگرایی رو توضیح داده باشه من پیوندشو اضافه کردم. من ایجا سعی میکنم فقط این چیزارو با پایتون یاد بدم.
    راستش زیاد با رسمی نوشتن راحت نیستم :دی
    سعیمو میکنم.

    پاسخحذف
  3. سلام
    دو تا سوال دارم
    اول چرا این وبلاگ با حال فیلتر شده
    دوم چرا من وبلاگت رو با رنگ زمینه سفید میبینم(از تور و فایرفاکس و لینوکس مینت استفاده میکنم)

    پاسخحذف
  4. سلام،
    اینکه سفیده بخاطره اینکه من ی عکس این پشت گذاشته بودم و خودم هاستش نکرده بودم. ظاهرا دیگه موجود نیست.
    فک کنم کلا بلاگر فیلتره، که خب اینجام استثنا نیست.
    و نکته ی آخر و جالبی که الان فهمیدم اینه که نمیتونم این بلاگو تو حساب بلاگرم ببینم :دی فک کنم ی تغییراتی تو بلاگر افتاده که سبب شده اینجا با یوزر MM.Brian لینک بشه و یوزر من الان mm هست ولی جفتشونم با یه حساب گوگل دارم. خودمم گیج شدم. فقط مطمئنم اینجا رو با همین حساب گوگلم ساختم ولی تو پیج بلاگرم نمیبینمش :(

    پاسخحذف