شیءگرایی (قسمت اول)

اکثر کسایی توی برنامه‌نویسی تازه‌کار هستن، فکر می‌کنن که شیءگرایی چیز خیلی پیچیده‌ای هست. ولی کل مفهوم شیءگرایی رو میشه در یه کلمه خلاصه کرد: «بسته‌بندی»! تعجب نکنید. مفهومش به همین سادگیه.
منظورم فقط بسته‌بندی چیزهایی که می‌خریم نیست. مثلاً همین کیفی که دستمون می‌گیریم یه وسیله‌ای برای بسته‌بندی و دسته‌بندی اشیاء هست. حتی کیسهٔ سطل زباله…
یکم فکر کنید، چرا ما توی زندگی روزمره میایم اشیاء مختلف رو در یک مجموعه‌ای قرار میدیم و دسته‌بندی می‌کنیم؟ برای اینکه جابحجایی و انتقالش از یه مکان به مکان دیگه راحت‌تر بشه. برای اینکه راحت‌تر بتونه بین افراد مختلف دست به دست بشه(مثلاً خرید و فروش بشه). برای اینکه اشیاء داخلش گم و گور نشن یا با اشیاء مشابه خوشون قاتی نشن. و در نهایت برای اینکه راحت‌تر دور انداخته بشه.
در برنامه‌نویسی هم همینطور هست. فلسفهٔ شیءگرایی در برنامه‌نویسی، دسته‌بندی داده‌ها یا به قول بعضی‌ها کپسوله‌سازی داده(Data Encapulization) هست. ببینیم داده‌هایی که ما در برنامه‌نویسی داریم چیا هستن. کوچیکترینشون بیت(bit) هست، بعد از بایت که سنگ‌بنای تمام اجزاء بزرگتر هست. یه مرحله بالاتر متغیرها هستن، با هر نوعی مثل int یا float یا char یا…(در بعضی زبانهای اسکریپتی بعضی اشیاء سطح‌بالاتر هم بعنوان انواع داده‌های درونی تعریف شدن). به موازات متغیرها، توابع رو داریم. یه سطح بالاتر ساختمان‌ها(structure ها) هستن که شامل تعدادی متغیر هستن. و یه سطح بالاتر اشیاء هستن.
هر متغیر شامل تعدادی بایت هست. هر ساختمان شامل تعدادی متغیر هست(که دور هم پیچیده شدن و بسته‌بندی شدن). و هر شیء شامل تعدادی متغیر(یا اصطلاحاً data field) و تعدادی تابع(و اصطلاحاً متد) هست، که البته میشه یک شیء رو متناظر با یک(یا چند) ساختمان و تعدادی تابع(متد) دونست. البته هر کدوم از متغیرهای(data field های) یک شیء، خودش میتونه یه شیء باشه.
اون اوایل که داشتم مفاهیم شیءگرایی رو یاد می‌گرفتم(اون موقع با جاوا یاد می‌گرفتم)، خیلی باهاش مشکل داشتم، چون هیچ جا شیءگرایی رو زیاد ساده و قابل فهم توضیح نمی‌دادن.
مثلاً اولش فرق کلاس رو با شیء نمی‌فهمیدم، بعد از کلی کلنجار رفتم فهمیدم که «یک شیء نمونه‌ای از یه کلاس هست». یه کلاس مجموعه‌ای از متغیرها و متدها(توابع شیءگرا) هست که مجموعه‌ای از اشیاء رو تعریف می‌کنه. و یه شیء یکی از اعضای این مجموعه‌ای از اشیاء هست که توسط یه کلاس تعریف میشه. فرضاً ما «کلاس اتومبیل» داریم، اما «اتومبیل فلانی» یه شیء هست، و یه نمونه از «کلاس اتومبیل».
میشه تقریباً تمام مفاهیم شیءگرایی رو با مفهوم شیء در زندگی روزمره متناظر(و تشبیه) کرد. مثلاً متغیرهای یک شیء(یا همون فیلدهای داده‌ای شیء)، متناظر با خواص و اجزاء مختلف یک شیء مادی هست(در زندگی روزمره). متدهای(توابع) یک شیء هم متاظر با کارهایی هست که میشه با یک شیء مادی انجام داد. مثلاً یه شیء خودکار در نظر بگیرید. یدونه سر داره(یک متغیر)، یه نوک داره(یه متغیر)، یه رنگ براش تعریف شده(یه متغیر). براش نوشتن تعریف شده، یعنی میشه باهاش نوشت(یه متد)، میشه سرش رو برداشت(یه متد)، و میشه سرش رو گذاشت(یه متد) و در نهایت میشه دورش انداخت(یه متد).
بعضی متدها بین تمام اشیاء مشترک هستن(مثل متد سازنده و متد مخرب). بعضی متدها بین طیف وسیعی از اشیاء مشترک هستن، و بعضی هم فقط در اشیاء خاصی تعریف میشن.
تا اینجا رو داشته باشید تاب بعد…

Advertisements

5 Responses to شیءگرایی (قسمت اول)

  1. Overlord می‌گوید:

    دمت گرم 🙂

    ادامه بده

  2. Overlord می‌گوید:

    اگه میشه در مورد متد سازنده هم بویس من هرکاری کردم این قسمت شی‌گرایی رو نفهمیدم.

    راستی متد باتابع چه فرقی داره؟ چون تو جاوا فقط متد هست ولی تو پایتون تابع

  3. سعید می‌گوید:

    متد به تابع شییءگرا میگن. تابعی که توی یه کلاس تعریف میشه و روی یک شیء اعمال میشه(البته توی پایتون میشه داخل یه کلاس تابعی تعریف کرد شیءگرا نباشه یعنی وابشته به شیء نباشه و اصلاً شیء جاری یا همون آرگومان self بهش پاس نشه)
    این اصطلاح متد فکر میکنم از جاوا به زبانهای دیگه اومده باشه. البته خیلی وقت پیش بود که جاوا خوندم و الآن خیلی چیزاش یادم رفته، ولی فکر می‌کنم توی جاوا نمیشه غیر شیءگرا نوشت. حتی یه برنامه Hello World هم که بخوایم بنویسیم باید یه کلاس(با اسم فایل) و یه متد main داخلش تعریف کنیم. شاید(فکر می‌کنم) تابع غیرشیءگرا توی جاوا نمیشه تعریف کرد.
    ولی توی پایتون هم میشه شیءگرا کار کرد هم غیرشیءگرا.
    البته من نمی‌خوام جاوا و پایتون(یا هر دوم زبان دیگه‌ای) رو از لحاظ برتری مقایسه کنم(که کدوم بهتره) چون زیاد با هم قابل مقایسه نیستن(کارکردشون فرق داره). فقط از لحاظ فنی میشه تفاوت‌ها و شباهت‌های دو زبان رو بررسی کرد برای درک بهتر مفاهیم برنامه‌نویسی، نه برای اینکه بگیم کدومشون بهتره. هر کدوم جای خودشون رو دارن.

  4. overlord می‌گوید:

    از پاسختون ممنونم .

  5. سعید می‌گوید:

    خواهش می‌کنم.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: