مقدمه ای بر آموزش جاوا
قبل از اینکه شروع به آموزش جاوا کنیم، لازم است یک جلسه در مورد اصول شیگرایی در جاوا صحبت کنیم که بین تمامی زبانهای برنامه نویسی (زبانهای شیگرا) مشترک هستند. این جلسه خیلی خلاصه در مورد این ۴ اصل صحبت میکنیم. جلسات آموزشی ما هم بر اساس همین ۴ اصل ادامه پیدا میکند. فقط این جلسه مرور خیلی سریعی بر روی این اصول داریم، بنابراین اگه این جلسه خیلی متوجه نشدین نگران نباشید.
هدف این کلاس این نیست که فقط یاد بگیریم چطور با زبان جاوا برنامه بنویسیم، قرار هست یاد بگیریم چطور به صورت شیگرا فکر کنیم و با زبان جاوا پیادهسازی کنیم.
در کنار اموزش سعی میکنم پایان هر جلسه چند مورد از قواعد نگارشی استاندارد جاوا رو هم بگم که با استاندارد نویسی جاوا هم آشنا بشیم.
این جلسه پس مفاهیم شیگرایی را به صورت مختصر توضیح میدیم و از جلسه بعدی میریم سراغ شروع آموزش جاوا.
بریم سراغ برنامه نویسی شیگرایی یا Object-oriented programming
شی گرایی یا OOP چیست؟
اگه بخواهیم خیلی ساده توضیح بدم، شی گرتیی یک نوع روش برنامه نویسی است که در آن برنامه نویس از اشیا و ایدههای جهان واقعی استفاده میکنه و اصول برنامهنویسی شیگرا هم از جهان واقعی گرفته شدهاند.
نکتهای که هست اینکه به همون اندازه که یک طراحی شیگرای خوب باعث کاهش پیچیدگی و مدل کردن ساده مسئله است، یک طراحی نامناسب با استفاده از OOP یه فاجعه رو به وجود میاره. پس یه طراحی خوب لازم هست.
این نکته رو هم بگم که اصلا دنبال این نیستیم که شیگرایی محض داشته باشیم، ولی هدف اصلی ما این هست که ۴ اصل اساسی شیگرایی رو در کنار هم در پیادهسازی استفاده کنیم.
اما این ۴ اصل شی گرایی عبارتند از:
- تجرید یا انتزاع (Abstraction)
- کپسوله سازی (Encapsulation)
- ارثبری (Inheritance)
- چندریختی (Polymorphism)
شاید در مورد این اصول خیلی شنیده باشید و استفاده هم بکنید ولی گفتنش خالی از لطف نیست.
تجرید یا انتزاعی (Abstraction)
در oop ما سه مفهوم کلاس (class) و موجودیت (Object) و نمونه (instance)
همه موجودیت ها در یک الگو شیگرا باید به صورت انتزاع یا abstract باشه. یعنی اینکه توی دنیای واقعی همچین موجودیتی وجود نداشته باشد و فقط توی ذهن ما باشد.
مثلا انسان، کاربر، کتاب.
در واقع وقتی شما کلمه انسان رو میشنوید یه مدلی توی ذهنتون شکل میگیره که دارای یه سری خصیصه (attribute) و توانایی (method) هست ولی شخص خاصی توی ذهنتون نیست. در واقع شما دارین به صورت انتزاعی فکر میکنید. هدف در شیگرایی این هست که این مفهوم و طرز فکر را پیاده سازی کنیم.
پس تا اینجا موجودیتهای سیستم ما همیشه انتزاعی هستند. هر موجودیت یک کلاس هست ولی هر کلاس یک موجودتی نیست. بعضی از کلاسها برای این ساخته میشوند که ابزاری در اختیار ما بگذارند. مثلا کلاسهای utils یا کلاس math و … .
توی یک سیستم ما میتونیم nتا موجودیت داشته باشیم. ما میتونیم از هرکدوم از این موجودیتها به هر تعداد نمونه داشته باشیم. مثلا از موجودیت انسان میتونیم نمونه محمد، علی و… را داشته باشیم. دقت کنید برعکس موجودیت که انتزاعی بودند نمونهها باید واقعی باشند و بتونیم به یک عامل واقعی نسبت بدیم.
کپسولهسازی(Encapsulation)
این مفهوم خیلی خیلی نزدیک به مفهوم جعبهسیاه (black box) هست. در واقع ما باید موجودیتها یا کلاسها رو به نحوهای پیاده سازی کنیم که فقط ورودی و خروجیها برای اعضای بیرونی قابل نمایش باشند و اعضای داخلی کلاس محافظت شوند.
برای مثال یک اتومبیل رو فرض کنید، همه ما میدونیم این اتومبیل داری فرمان و گاز و … هست و میدونیم در صورت استفاده از اونها چه اتفاقاتی رخ میدهد ولی اینکه این اتفاقات چطوری انجام میشود اطلاع نداریم. مثلا اگه گاز بدهیم میدونیم ماشین جلو میرود ولی اینکه چه اتفاقاتی میافتد تا ماشین جلو برود نمیدانیم و برای ما هم مهم نیست.
در واقع در طراحی موجودیتها و کلاسها هم باید به این نکته توجه کرد که باید چندین لایه از این کپسوله سازی رعایت شود و فقط اجزایی قابل دسترسی از بیرون باشند که نیاز هست و سایر اجزا محدود شوند. که تعریف این سطح دسترسی در جاوا به صورتpublic یا private یا protected و یا محدویدت در سطح یک پکیج ایجاد میکنیم.
کپسوله سازی این کمک رو میکند که بدون متوجه شدن از پیچیدگی های بخشهای مختلف بتونیم از اونها استفاده کنیم. کپسوله سازی میتونه تا چندین لایه انجام شود و هرچه بیشتر شود به اصطلاح گفته میشود ماژولارتر میشود.
ارثبری (Inheritance)
توضیحات این قسمت به موقع خودش کامل گفته میشه فقط این مورد رو در مورد ارثبری باید بدونیم اینکه ارثبری با اهداف زیادی اضافه شده ولی مهمترین اونها به این برمیگرده که قابلیت سلسهمراتب بین موجودیتها را به ما میدهد. مورد بعدی اینکه قابلیتبازنویسی یک موجودیت را به ما میدهد. که کامل این دو مورد و موارد دیگه بحث میشود.
چندریختی (Polymorphism)
این مورد هم شبیه مورد ارثبری در زمان خودش به طور کامل توضیح داده میشه فقط اگه بخواهیم توضیح مختصری بدیم اینکه این قسمت تاکید بر روی این داره که ما به موجودیتها و کلاسها قابلیت بدیم. یعنی اینکه مثلا بگوییم این موجودیت قابلیت A را دارد ولی اینکه چگونه آن را انجام میدهد مد نظر ما نباشد و هر نمونه میتواند به هر نحوهای این قابلیت A را پیادهسازی کند ولی همه این نمونهها قابلیت A را دارا میباشند.
مثلا یک انسان، پرنده و یک خزنده را در نظر بگیرید. همه قابلیت حرکت کردن را دارند ولی نحوه پیادهسازی آنها متفاوت هست. انسان راه میرود، پرنده پرواز میکند.
این مفهوم همان چند ریختهگی هست که یه قابلیت به چند شکل ظاهر میشود. البته این یک نمود از چندریختگی هست که بیشتر در موردش صحبت میشود.
تا اینجا ما چهار اصل شیگرایی رو گفتیم که در همه زبانهای شیگرا یکسان است.
در جلسهای بعدی نحوه پیادهسازی و استفاده از این اصول رو میگیم
امیدوارم که این جلسه که بیشتر توضیح بود و کدنویسی نداشت خسته کننده نبوده باش