در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
اما مفهوم شیءگرایی چیست؟
بهطور خلاصه و فنی، برنامهنویسی شیءگرا همانند برنامه نویسی ساخت یافته از ساختمانهای داده و توابع مرتبط با آنها تشکیل شده است که با فعالیت در کنار هم برنامه کاربردی را میسازند. شیءگرایی مفاهیم جدیدی از جمله دادههای انتزاعی، ارثبری، کپسوله کردن و چندریختی است.
مشخص است که این مفهوم برای کسانی که با برنامهنویسی شیءگرا کار نکرده باشند، کاملا گنگ و پیچیده است، بنابراین مفاهیم اولیه شیءگرایی را بهزبان ساده بیان میکنیم:
کلاس
کلاسها در شیءگرایی همه چیز هستند و همه چیز در مفهوم کلاس خلاصه میشود، بنابراین بهتر است کلاس را خوب بشناسیم. کلاسها در شیءگرایی همانند مفاهیمی هستند که در ذهن ما بهصورت انتزاعی شکل میگیرد.
بهعنوان مثال، یک دایره را در ذهن خود تصور کنید، هر کسی در ذهن خود یک تصویر از دایره دارد. یکی دایره سهبعدی میبیند، یکی دایره دوبعدی کوچک زرد و دیگری بزرگ قرمز! تصویر موجود در ذهن شما با دیگری فرق دارد، اما همه دایره را تصور کردهایم. این دایرههای تصویر شده در ذهن، اشیایی هستند که ما از مفهوم دایره ایجاد کردهایم.
در واقع، دایره الگوی اصلی است و هیچ ماهیت وجودی ندارد، اما دایره کوچک زرد، دو ماهیت دارد، نخست اینکه اندازهاش کوچک است و دوم اینکه زرد است. این دو مولفه، یعنی اندازه (مختصات مرکز و شعاع) و رنگ آن، اعضای دادهای این کلاس بهشمار میآیند. از طرفی، محیط و مساحت دایره که توابع محاسباتی هستند، نتیجهای متفاوت از یک دایره به دایره دیگر دارند و نتیجه آنها مستقیما به اعضای دادهای هر دایره وابسته است.
بنابراین از کنار هم گذاشتن مولفههای یک موضوع انتزاعی و عملکردهای آن، میتوان به یک کلاس دست یافت، که با مقداردهی به اعضای دادهای آن، میتوان بهتعداد نامحدود دایرههای رنگی و با اندازههای مختلف ساخت که بهآنها شیء گفته میشود.
ارثبری
مفهوم ارثبری در شیءگرایی، درست مشابه دنیای واقعی است. هر کلاسی، میتواند از یک کلاس دیگر، خصوصیات و عملکردهای آن را بهارث بگیرد و عملکردهای جدیدی به آن اضافه کند.
بهعنوان مثال، در تعریف ریاضیاتی، خط تشکیل شده است از بینهایت نقطه در یک راستا. بنابراین خط میتواند یک فرزند در زنجیره ارثبری نقطه باشد. ارثبری در نقاطی استفاده میشود که نیاز به اشیا مختلف با قابلیتهای مختلف داشته باشیم، در این صورت میتوان کلاسهای جدیدتری درست کرد که تکامل یافته باشند.
چندریختی
گاهی اوقات پیش میآید که عملکردهای اشیا در مقابل ورودیهای مختلف متفاوت است. در واقع، مساله همان تفاوت معروف بفرما و بشین است.
در هر دو حالت، امر نشستن بهکار میرود، در واقع تابع نشستن شما را صدا میکنند، اما در مورد اول، ورودی عبارت «بفرما» است. و در مورد دوم، عبارت کمتر مودبانه «بشین».
بنابراین پاسخ شما در مقابل این دستور (فراخوانی تابع) درست متناسب با شخصیت شما (کلاسی که از آن ارث گرفته شدهاید و اعضای دادهای متعلق به خود) خواهد بود و میتواند نسبت به هر ورودی واکنشهای متفاوتی نشان بدهد.
پنهانسازی اطلاعات
گری بوچ، مولف کتاب طراحی سیستمهای شیءگرا میگوید: «پنهانسازی اطلاعات روندی است که در آن عناصر و عملیات موجود در یک مفهوم پنهان میشود و تنها رابط کاربری مناسب آن نشان داده میشود. » بیایید اینطور فرض کنیم که شما یک بشقاب غذای بسیار خوشمزه دارید که خودتان درست کردهاید، با مفهوم شیءگرایی و همچنین بحث پنهانسازی اطلاعات، اگر آن بشقاب غذا در یخچال باشد و کلید آن را فقط خودتان داشته باشید، پس این بشقاب، یک حالت Private دارد.
اگر این بشقاب برای اعضای خانواده در دسترس باشد، (یعنی در زنجیره ارثبری باشند)، حالت Protected دارد و اگر برای دسترس همگان آزاد بگذارید که از خیابان بیایند و بشقاب غذای شما را بردارند، این حالت Public دارد و امنیت پایینی
خواهد داشت.
اگر دادهها بهطور مناسب پنهانسازی شوند و برای هرتغییری در سیستم، از تابعی خاص و با دسترسی خاص استفاده شود، در این صورت با بزرگ شدن برنامه، زمان رفع ایراد آن بیشتر نمیشود و در صورتی که یک مورد منطقی در برنامه رخ داد، اصلا مجبور نیستید از خط اول تا خط آخر برنامه را بخوانید. کلاسهایی که به آن داده دسترسی دارند مشخص است، تنها توابعی که میتوانند آن داده را تغییر دهند مشخص است و گاهی اوقات حتی نیاز نیست کد بیرون کلاس خود را هم نگاهی بیندازید.
امیربهاءالدین سبطالشیخ
در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
گزارش «جامجم» درباره دستاوردهای زبان فارسی در گفتوگو با برخی از چهرههای ادب معاصر
معاون وزیر بهداشت: