سیستم‌عامل اندروید (Android)، یکی از محبوب‌ترین سیستم‌عامل‌های تلفن همراه است. برای برنامه‌نویسی برنامه‌های اندرویدی می‌توان از تعداد زیادی از زبان‌های برنامه‌نویسی استفاده کرد. با این حال، گوگل (Google) توسعه‌دهندگان را به استفاده از زبان جاوا تشویق می‌کند. اگرچه، زبان برنامه‌نویسی جاوا مورد بحث در این مقاله، دقیقاً مشابه با زبان جاوا در دیگر پلتفرم‌ها نیست. در اینجا، یک سری تفاوت‌های ظریف و ویژگی‌های متفاوتی وجود دارد که یادگیری آن‌ها برای یک توسعه‌دهنده اندروید بسیار مهم است.

در این مقاله، ما به معرفی اجمالی کاربرد زبان برنامه‌نویسی جاوا در دنیای اندروید و ویژگی‌های آن می‌پردازیم. در راستای مطالب این مقاله، شما با مطالب زیر نیز آشنا خواهید شد:

  • تفاوت‌های موجود بین یک برنامه اندرویدی با یک برنامه جاوا در کامپیوتر
  • نحوه استفاده از برنامه‌نویسی شیءگرا (Object Oriented Programming – OOP) برای اندروید
  • تعریف رابط کاربری جاوا و استفاده از آن برای ارتباط با بخش‌های دیگر یک برنامه
  • تعریف حاشیه‌نگاری و چگونگی عملکرد آن‌ها برای ارائه اطلاعات اضافی در مورد بخش‌های دیگر یک برنامه

فهم مطالب ارائه‌شده در این مقاله، نیاز به آشنایی با حداقل یک زبان برنامه‌نویسی شیءگرا دارد. با این‌که این امر کاملاً ضروری نیست اما موجب درک بهتر مفاهیم بحث شده می‌شود.

جاوا و اندروید

نکته جالب در مورد اندروید این است که این پلتفرم از «جاوای محض» استفاده نمی‌کند. شاید این موضوع کمی عجیب به نظر برسد زیرا اگر شما کدهای یک برنامه قدیمی جاوا را با یک برنامه مشابه اندرویدی مقایسه کنید، پیدا کردن تفاوت‌های بین این دو دشوار خواهد بود. با اینکه کدنویسی و توسعه یک برنامه اندرویدی به نحوی مشابه با توسعه جاوا است، شباهت‌های موجود، در هنگام «کامپایل» (Compile) و اجرای برنامه ناگهان از بین خواهد رفت. از این‌رو، دلیل اصلی مواجه با یک محیط ناشناخته در هنگام کار با اندروید، نحوه مدیریت برنامه‌های اندرویدی در حین فرآیند کامپایل کردن است.

ویژگی جذاب و اصلی جاوا، قابلیت «یک بار کدنویسی کنید، همه‌جا اجرا کنید» در آن است. این زبان برنامه‌نویسی، به عنوان راه‌حلی برای فرآیند هزینه‌بر تبدیل نرم‌افزارهای مختلف از یک پلتفرم به پلتفرم دیگر ارائه شده است. این قابلیت شگفت‌انگیز در مهندسی نرم‌افزار، به لطف نحوه فرآیند کامپایل یک برنامه جاوا امکان‌پذیر شد است.

در حین فرآیند کامپایل در بسیاری از زبان‌های برنامه‌نویسی، کامپایلر (Compiler) به برنامه متصل شده و آن را بهینه می‌کند. سپس، برنامه به کد ماشین تبدیل می‌شود. کد ماشین، به مجموعه‌ای از فرمان‌هایی گفته می‌شود که یک کامپیوتر قادر به فهم و اجرای آن‌ها در هنگام اجرای برنامه است. اجرای کد ماشین سرعت بالایی دارد اما به دلیل مد نظر قرار دادن پلتفرم اجرای برنامه، دارای محدودیت است. اگر تا به حال فکر کرده‌اید که چرا یک برنامه نوشته‌شده برای پلتفرم IOS در سیستم‌عامل ویندوز اجرا نمی‌شود، این امر یکی از دلایل آن است.

در طرف مقابل، جاوا عملکرد متفاوتی دارد. جدای از قابلیت تبدیل یک برنامه به کد ماشین، کامپایلر جاوا، یک برنامه را به حد واسطی به نام «بایت‌کد» (Bytecode) تبدیل می‌کند. این کار باعث ایجاد یک سری فرمان‌های مشابه با کد ماشین می‌شود؛ با این تفاوت که به جای اجرا در یک معماری مشخص، اجرا در یک ماشین مجازی (Virtual Machine) در نظر گرفته می‌شود.

استفاده از ماشین مجازی بدان معناست که تا زمان خوانده شدن و تفسیر فرمان‌های بایت‌کد، برنامه در پلتفرم میزبان خود به درستی اجرا شده و سازگاری با پلتفرم‌های دیگر نیز تضمین می‌شود. به همین دلیل، زمانی که برنامه (Java Runtime Environment) را در کامپیوتر خود نداشته باشید، بسیاری از برنامه‌های جاوا از شما درخواست می‌کنند که آن را دانلود و نصب کنید. JRE، ماشین مجازی پیش‌فرض برای بسیاری از پلتفرم‌ها است.

کدنویسی جاوا برای پلتفرم اندروید متفاوت است

کامپایل کردن یک برنامه برای اندروید، مسیری مشابه با تبدیل فایل‌های جاوا به بایت‌کد را دنبال می‌کند. زمانی که برنامه (متشکل از بایت‌کد) بر روی یک دستگاه نصب می‌شود، مرحله دوم کامپایل در حین فرآیند نصب رخ می‌دهد. بایت‌کد برنامه به کد ماشین بهینه‌شده برای دستگاه اندرویدی تبدیل می‌شود و عملکرد زمان اجرای برنامه را بهبود می‌بخشد. این فرایند با عنوان «کامپایل جلوتر از زمان» یا (Ahead of Time – AOT) شناخته و امکان آن توسط «ماشین مجازی اندروید» (Android Runtime) فراهم شده است. مفهوم AOT، در بسیاری از زبان‌های برنامه‌نویسی مورد استفاده قرار می‌گیرد.

کامپایل AOT، تنها در اندروید KitKat (نسخه 4.4) و نسخه‌های بالاتر قابل مشاهده است اما قابلیت سازگاری با نسخه‌های پیشین را نیز ارائه می‌کند. نسخه‌های ابتدایی اندروید از یک ماشین مجازی دیگر با عنوان «Dalvik» استفاده می‌کردند. Dalvik نیز مانند ART، با ایجاد تغییر و تبدیل بایت‌کد جاوا، آن‌ها را به شکل خاصی تبدیل می‌کرد. این تغییرات متعدد بهره‌وری، به منظور بهینه‌سازی برنامه (برنامه‌های دستگاه‌های اندرویدی کم قدرتی که برای Dalvik طراحی شده بودند) صورت می‌گرفت.

اگرچه، Dalvik برخلاف ART، بایت‌کد را تا زمان اجرای برنامه به کد ماشین تبدیل نمی‌کرد. به این منظور، از رویکردی با عنوان «کامپایل درجا» (Just in Time – JIT) استفاده می‌شد. این فرآیند بسیار شبیه به فرآیندی است که محیط‌های مجازی جاوا در یک کامپیوتر استفاده می‌کنند. زمانی که قابلیت پروفایل کردن برنامه در حین اجرای آن، برای مقادیر معمول مورد استفاده از بایت‌کد Dalvik فراهم شد، عملکرد اندروید Froyo (نسخه 2.2) بهبود یافت. سپس این فرمان‌ها توسط Dalvik به طور دائمی به کد ماشین تبدیل شدند تا سرعت برنامه افزایش یابد. توجه داشته باشید که کامپایل مبتنی بر ردیابی (Trace Based) در JIT، تنها مختص به جاوا نیست.

در صورت استفاده از هر یک روش‌های کامپایل برنامه اندروید، تبدیل و تغییر بایت‌کد است که باعث تفاوت کدنویسی اندروید و کدنویسی جاوای محض می‌شود. تغییرات بایت‌کد موجب محدودیت در قابلیت تبدیل و انتقال برنامه می‌شود. در نتیجه، این امر شعار «یک بار کدنویسی کنید، همه جا اجرا کنید» را نفی می‌کند. یکی دیگر از اختلافات بین اندروید و جاوا، دسترسی به کتابخانه‌های استاندارد است. جاوا، قابلیت تبدیل و انتقال بسیار بالایی دارد. دلیل این امر، اتکای جاوا بر مجموعه‌ای از کتابخانه‌های استانداردشده‌ای است که می‌توانند در پلتفرم‌های مختلفی استفاده شوند. به عنوان مثال، می‌توان از کتابخانه‌های شبکه و رابط کاربر «UI» نام برد. در واقع، اندروید زیرمجموعه‌ای از قابلیت‌های جاوا را فراهم می‌کند و هر چیزی که در اندروید فراهم شود، تنها برای اندروید قابل استفاده است.

مقدمه‌ای بر کاربرد زبان جاوا در اندروید

پلتفرم اندروید، استفاده گسترده‌ای از الگوی برنامه‌نویسی شیءگرای جاوا می‌کند. علاوه بر این، اندروید برای حل مسائلی مانند کپسوله‌سازی (Encapsulation)، وراثت (Inheritance) و چندریختی (Polymorphism) طراحی شده است. تمام اشیاء در اندروید، ویژگی‌های خود را به نحوی از کلاس «Object» به ارث می‌برند. به این ترتیب، هر شی‌ء بر مبنای توابع این کلاس، رفتار و ویژگی‌های مخصوص به آن را دریافت می‌کند. اگر نگاهی به اشیاء در رابط برنامه‌نویسی کاربردی اندروید (Android API) بیندازید، متوجه سلسله‌مراتب وراثت در هر شی‌ء خواهید شد؛ ویژگی‌های همه‌ی اشیاء، در انتها به object ختم می‌شوند.

در بخش دوم این مقاله، به توضیح کلاس بسیار مهم «Activity» یا همان کلاس فعالیت و همچنین نحوه مد‌ل‌سازی در اندروید خواهیم پرداخت.

در صورتی که تمایل دارید به سایر بخش‌های این مطلب مراجعه کنید، می‌توانید از لینک‌های زیر استفاده نمایید:

برای یادگیری بیشتر در مورد کدنویسی جاوا و اندروید، می‌توانید به آموزش‌های زیر مراجعه کنید:

#

بر اساس رای ۱۰ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«حسین زبرجدی دانا»، کارشناس ارشد مهندسی استخراج معدن است. فعالیت‌های علمی او در زمینه تحلیل عددی سازه‌های مهندسی بوده و در حال حاضر آموزش‌های مهندسی عمران، معدن و ژئوتکنیک مجله فرادرس را می‌نویسد.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد.

مشاهده بیشتر