آشنایی با مفاهیم برنامه نویسی شی گرایی در اندروید

برنامه ­نویسی شی­ گرایی در اندروید، تغییر بزرگی در توسعه اپلیکیشن ­ها و برنامه­ نویسی ایجاد کرده ­است. در یک برنامه شی ­گرا با استفاده از نرم ­افزار نوشته­ شده، می­‌توانید از ویژگی­ هایی که از قبل تعبیه شده ­اند، استفاده کنید یا ویژگی­ های جدیدی را اضافه کنید. از مزایای برنامه نویسی شی گرا این است که در صورت ایجاد تغییرات، همه چیز واضح و مرتب می­ ماند. همچنین بدون اینکه در منطق داخلی کدها دست ببریم، نظم همه چیز حفظ می­شود. بنابراین خود را برای آشنایی بیشتر با برنامه­ نویسی شی­ گرایی در اندروید، آماده کنید.برنامه نویسی شی گرا چیست؟احتمالا شنیده ­اید که جاوا زبان اصلی برای ایجاد برنامه­ های اندروید است. یعنی برای اعمال شی­ گرایی در اندروید، از جاوا استفاده می­‌شود.­قبل از برنامه ­نویسی شی­ گرایی در اندرویدقبل از برنامه­ نویسی شی ­گرا (OOP)، برنامه ­های به روشی دستوری، اساسا بصورت لیست طولانی از دستور­العمل­ ها نوشته می­شدند. در این مدل برنامه­ نویسی، شما کدها را همانطور که می­خواهید مقاله­ ای بنویسید، از بالا به پایین می­نویسید.مشکلی که در این نوع برنامه­ نویسی وجود دارد این است که با گسترده ­شدن کد، بررسی کردن آن می­تواند به طرز باورنکردنی پیچیده و دشوار شود. اگر برنامه ­ای ساخته ­اید که دارای میلیون­ ها خط دستوری است، پیگیری یا یافتن خطاها در آن تقریبا غیرممکن است. به همین دلیل برخی آن را کد اسپاگتی (spaghetti code) می­نامند.برای راه ­حل این وضعیت، زبان­ های برنامه­ نویسی جدیدی ابداع شدند که سعی داشتند کد را به صورت مدولار و ساختار یافته ­تر کنند. این زبان­های رویه ­ای جدید، کد GOTO را با ساختارهای کنترلی تو­در­تو همراه با فراخوانی رویه­ ها ارتقا داده ­اند. رویه یا تابع، یک واحد منطقی است که وظیفه ­ای را انجام داده و ورودی خاصی را می­گیرد.بعد از برنام­نویسی رویه ­ای و ساختاری، برنامه­ نویسی شی­ گرا به میدان آمد.ایده پشت برنامه ­نویسی شی­ گرایی در اندرویدشاید بهتر باشد که OOP را به عنوان یک فلسفه طراحی در نظر بگیریم. در زبان­ های رویه­ ای، هیچ ارتباطی بین داده­ های مورد­استفاده و رویه ­هایی که از آنها استفاده کرده ­اند، وجود نداشت. با OOP، رویه ­ها اکنون متد نامیده می­شوند و داده ­ها ذاتا به یکدیگر گره خورده ­اند.یک مزیت عالی در برنامه­ نویسی شی­گرا این است که به اشتراک گذاشتن کد با سایر افراد و ساختن برنامه­های مفصل را آسان کرده­است. برنامه ­نویسی شی­ گرا برای همکاری ایده ­آل است و نگرش منبع باز بودن را تسهیل می­‌کند. اگرچه درک آن کمی پیچیده است اما ظرافت خاصی در برنامه­ نویسی شی­ گرا وجود دارد.شی گرایی در اندرویداساسا شی در شی­ گرایی در اندروید به چه معناست؟روش کار داده ­ها و متدها بر روی دیتاها، از طریق جمع ­شدن در یک شی انجام می­شود. یک شی شامل داده­ها، دستورات و رفتارها است. برای تعریف شی، داده ­ها و متدهای آن، از یک کلاس استفاده می­کنیم.بیایید تصور کنیم شما می­‌خواهید یک کلاس برای نشان ­دادن یک حساب بانکی ایجاد کنید. نام کلاس را BankAccount می­نامیم و دارای برخی از داده ­ها مانند نام دارنده حساب، شماره حساب و موجودی است. متدها هم چیزی شبیه زیر هستند:getAccountHolderName()deductFromAccount()به طور پیش ­فرض فقط متدهایی که متعلق به کلاس BankAccount هستند، حق کار­کردن روی داده­ های مرتبط با کلاس را دارند. با محدود­کردن دسترسی به داده ­ها، یک کلاس می­‌تواند مطمئن باشد که هیچ قسمت دیگری از برنامه، داده ­های آن را دستکاری نکرده ­است. همچنین این موضوع به این معناست که یک شی می‌تواند ساختارهای داده داخلی خود را از سایر شی­ های دیگر، پنهان کند.هنگامیکه یک کلاس به درستی طراحی شده ­باشد، می­تواند بدون تأثیرگذاری بر سایر قسمت­های برنامه، دوباره کدگذاری و توسعه یابد، البته تا زمانی که رابط کاربری عمومی (API) و عملکرد به همان صورت باقی بمانند.نحوه عملکرد SDK اندروید تقریبا اینطور است. Google به طور مکرر نسخه­های جدید SDK را منتشر می­کند، با این وجود برنامه ­های Android همچنان مانند گذشته ساخته و کار می­‌کنند، زیرا Google رفتاری را تغییر نداده ­است.بررسی یک مثالبرای نشان­ دادن چگونگی عملکرد همه این موارد، بیایید ببینیم که چگونه می‌­توانیم کد مثال مدیریت بانک را بنویسیم. این کد را بدون درنظر گرفتن توضیحات ( توضیحات، هر چیزی است که قبل از آن "//" آمده­ باشد، به این معنی که بخشی از کد نیست.) مشاهده می‌­کنید:امیدوارم که این مثال به شما کمک کرده ­باشد تا متوجه شوید چگونه می­‌توانید در عمل از اشیا و کلاس­ها استفاده کنید.بررسی یک مثال دیگرهنگامی که شما یک برنامه شی ­گرا می‌­نویسید، با در­نظر گرفتن داده­ ها کار را شروع می‌­کنید.به عنوان مثالی دیگر، یک کارمند شخصی با نام و عنوان شغلی را در نظر بگیرید، مطمئنا کارمندان ویژگی­ های دیگری نیز دارند، اما فعلا به اصول اولیه پایبند باشید.مسلما هر شرکتی دارای انواع مختلفی کارمند است. به عنوان مثال، شرکت شما ممکن است کارمندانی تمام وقت و نیمه وقت داشته باشد. هر کارمند تمام وقت یک حقوق سالانه دارد:در این مثال، کلمه extends Employee به جاوا می­‌گوید که کلاس جدید (کلاس FullTimeEmployee)، دارای تمام خصوصیاتی است که هر کارمند دارد و احتمالا دارای ویژگی­ های بیشتری نیز است. به عبارت دیگر، هر شی FullTimeEmployee، یک شی Employee است (شاید کارمندی از یک نوع خاص).مانند هر Employee، یک FullTimeEmployee دارای نام و عنوان شغلی است، اما یک FullTimeEmployee یک حقوق هم دارد. این همان چیزی است که کلمات extends Employee، برای شما انجام می­دهند.یک کارمند نیمه­ وقت حقوق سالیانه مشخصی ندارد. در عوض، هر کارمند نیمه­ وقت دارای نرخی مربوط به حقوق ساعتی و تعداد مشخصی از ساعت­ های کاری در هفته است:تاکنون یک PartTimeEmployee دارای چهار ویژگی است: نام، عنوان شغلی، پرداخت ساعتی و تعداد ساعات کاری. حالا نوبت مدیران است. هر مدیر یک کارمند تمام­ وقت است. اما علاوه بر دریافت حقوق معمولی، هر مدیر اجرایی پاداش نیز دریافت می­کند:کلمه کلیدی extends جاوا، بسیار جذاب است زیرا با گسترش یک کلاس، همه کدهای پیچیده موجود در کلاس دیگر را، به ارث می­برید. کلاسی که گسترش می­دهید می­تواند کلاسی باشد که شما قبلا آن را نوشته‌­اید. به هر ترتیب، شما می­‌توانید از کد موجود استفاده مجدد کرده و مواد را اضافه نمایید.در مثالی دیگر، سازندگان اندروید کلاس Activity را با 5000 خط کد نوشتند. شما می­‌توانید با تایپ کردن ساده extends Activity، از همه آن خطوط کد به صورت رایگان استفاده کنید:با دو کلمه extends Activity، کلاس MainActivity جدید شما می‌­تواند تمام کارهایی را که یک فعالیت معمول اندروید انجام می­‌دهد را، عملی ­کند. مانند یافتن موارد در فهرست res اپلیکیشن، نمایش کادر گفتگو، پاسخ دادن به شرایطی که دچار کمی حافظه می­‌شود، شروع کردن یک فعالیت دیگر، پاسخ دادن به یک فعالیت، شروع یا خاتمه اجرا و موارد دیگر.اگر می­خواهید درک بهتری از کدگذاری در یک زبان برنامه ­نویسی شی­ گرا داشته باشید، توصیه می‌­کنیم با پایتون آشنا باشید. Python یک زبان برنامه ­نویسی کاملا ساده است که اتفاقا فقط از اشیا و کلاس­ها استفاده می‌کند. اما جاوا برای یک تازه ­وارد می­تواند بسیار سخت­ باشد.مفاهیم برنامه ­نویسی شی ­گرایی در اندرویدتا الان می­‌دانیم که یک شی مجموعه ­ای از رفتارها، دستورات و داده­ ها است که برای عملکرد کد مفید است. مزایای بیشتری برای OOP وجود دارد. به عنوان مثال، یک شی می‌­تواند از شی دیگری مشتق شود. وقتی یک کلاس از کلاسی دیگر مشتق شود، عنوان ارث را به خود می­‌گیرد. از نظر فنی کلاس پایه superclass و کلاس مشتق شده، subclass نامیده می­‌شود.برنامه­ نویسی شی­ گرایی، به کاربران اجازه می‌­دهد تا برنامه­ های جاوا را ایجاد و سازماندهی کنند و می­‌دانیم که نوشتن برنامه ­های شی­ گرا شامل ایجاد کلاس­ها، اشیا و برنامه ­هایی است که از آن اشیا استفاده می­کنند.اکنون چند جنبه از توسعه شی­ گرایی در اندروید، می­تواند به شما کمک کند تا از پروژه­ های اندروید خود به بهترین شکل استفاده کنید.اشیا و کلاس­هاکلاس، نقش ه­ایی است که از اشیا ایجاد می­‌شود. کلاس یک موجودیت منطقی است که شامل فیلدها، متدها، بلوک­ها، کلاس تو­در­تو و رابط است.شی، یک نمونه از کلاس است و همچنین یک موجودیت رفتاری، فیزیکی و منطقی دارد. در حالی که کلاس، فقط یک موجودیت منطقی است.وراثتهنگامی که یک شی، تمام خصوصیات و رفتارهای شی والد را کسب کند، به عنوان وراثت از آن یاد می­شود. این قابلیت استفاده مجدد از کدها را فراهم کرده و برای دستیابی به چندریختی یا پلی­مورفیسم زمان اجرا، استفاده می­شود.کلمه کلیدی extends نشان می­دهد که شما در حال ساخت یک کلاس جدید هستید، که از یک کلاس موجود نشأت می­گیرد.رابط­‌هاچندین وراثت از طریق رابط به دست می­‌آید. رابط، مجموعه­ای از متدهای انتزاعی است. کلاس، یک رابط را پیاده ­سازی می­کند، در نتیجه متد انتزاعی رابط، به ارث می­رسد. رابط کاربری هیچ سازنده ای ندارد.کلمه کلیدی interface، برای اعلان یک رابط استفاده می­شود.کپسوله­ سازیکپسوله­ سازی، به معنای کد و داده بسته ­بندی شده، در یک واحد مستقل است، که باعث می­شود کدها از درست به­ کار نرفتن، حفظ شوند. البته در صورتیکه متغیرهای یک کلاس را به صورت private، اعلان کنید.انتزاعانتزاع فرآیند پنهان­ کردن جزئیات پیاده­سازی و فقط نمایش دادن عملکرد است.چندریختیچندریختی یا پلی­مورفیسم، توانایی یک شی، به گرفتن فرم­های مختلف است. جاوا از نظر Method Overloading و Method Overriding، بهترین پشتیبانی را از چندریختی، دارد.Method Overloading:کلاسی که چندین متد با نام یکسان دارد، اما پارامتر متفاوت که با نام Method Overloading شناخته می‌شود.Method Overriding:هنگامی که یک متد در یک subclass دارای نام یکسان و الگوی امضا به عنوان یک متد در superclass باشد، آنگاه این متد به عنوان روش overridden شناخته می­شود و به آن چندریختی زمان اجرا نیز گفته می­شود.مزایای برنامه­ نویسی شی ­گرایی در اندرویداشیا ایجاد شده برای برنامه­های شی­گرا براحتی می­توانند در برنامه­های دیگر، مجددا مورد استفاده قرار گیرند.برای تعریف و اعلان انواع داده­های انتزاعی خوب است.نگهداری و اصلاح کدهای موجود، آسان است زیرا اشیا جدید با تفاوت­های کوچک نسبت به موارد موجود، ایجاد می­شوند.سیستم­های شی­ گرا را می­توان به راحتی از سیستم کوچک به سیستم بزرگ ارتقا داد.افزونگی داده­هانگهداری و اصلاح کدهای موجود با در­نظر گرفتن تغییرات جدیدحفظ امنیت با استفاده از مکانیسم انتزاعبهره وری بهترعیب ­یابی آسانسخن آخربا وجود اینکه احتمالا بارها اسم برنامه ­نویسی شی­ گرایی را شنیده ­اید و کم و بیش با معنای آن آشنا بودید، سعی داشتیم اطلاعات روشن ­تری در این باره به شما ارائه دهیم.در این مقاله در کنار مفهوم شی­ گرایی، به مفاهیم مربوط به آن از جمله برنامه ­نویسی شی­ گرایی در اندروید، کلاس، شی، رابط­ها، کپسوله ­سازی، چندریختی، انتزاع، وراثت و مزایای برنامه­ نویسی شی ­گرایی پرداختیم. علاوه بر آن برای درک بهتر، چند کد را برای شما ارائه نمودیم. البته ممکن است در ابتدا کمی درک این مفاهیم سخت باشد اما همیشه با ممارست به نتایج خوبی خواهید رسید.امیدواریم مطلب پیش رو، برای شما مفید واقع شده­ باشد و جای بسی خرسندی است که با ارسال نظرات سازنده خود، ما را از آن آگاه سازید.در ادامه می توانید لیستی از آموزش های فارسی برای برنامه نویسی اندروید را مشاهده کنید. ضمنا کاربران ویرگول می توانند با تخفیف ویژه ازین آموزش ها بهره مند شوند.