جاوا یا زامارین؟

جاوا یا زامارین؟

آموزش xamarin android (بخش هشتم -1)

  • جاوا و زامارین | Java vs xamarin

با سلام خدمت شما دوستان عزیز. ما در بخش هشتم آموزش xamarin android به زبان فارسی، میخواهیم راجع به استفاده توسعه دهندگان جاوا از زامارین صحبت کنیم. ما در این دوره، آموزش xamarin android را فقط با زبان سی شارپ به شما عزیزان یاد خواهیم دادیم. این مقاله برای کسانی تهیه شده است که می خواهند با جاوا در زامارین اندروید کار کنند. آموزش جاوا در زامارین اندروید در دو بخش در اختیار شما عزیزان قرار خواهدگرفت. 

زامارین-یا-جاوا

آموزش صفر تا صد زامارین اندروید (بخش هشتم - 1)

  • Xamarin for Java Developers

با سلام خدمت شما دوستان عزیز. ما در بخش هشتم آموزش زامارین اندروید به زبان فارسی، میخواهیم راجع به استفاده از جاوا در زامارین اندروید صحبت کنیم. ما در این دوره، آموزش زامارین اندروید فارسی را فقط با زبان سی شارپ به شما عزیزان یاد خواهیم دادیم. این مقاله برای کسانی تهیه شده است که می خواهند با جاوا در xamarin اندروید کار کنند. آموزش java در xamarin در دو بخش در اختیار شما عزیزان قرار خواهدگرفت. 

اگر شما یک توسعه دهنده جاوا هستید، شما به خوبی می توانید از مهارت های خود و کد موجود در پلت فرم Xamarin و همچنین از مزایای #C مجددا استفاده می کنید. شما خواهید دید که ساختار زبان برنامه نویسی #C  بسیار شبیه به ساختار زبان برنامه نویسی Java است و هر دو زبان ویژگی های بسیار مشابه را ارائه می دهند. علاوه بر این، شما ویژگی های منحصر به فرد #C  را کشف خواهید کرد که زندگی شما را ساده تر می کند.

یک بررسی کوتاه!
دراین مقاله که مربوط به آموزش جاوا در زامارین است، مقدمه ای برای برنامه نویسی #C برای توسعه دهندگان جاوا فراهم می کند که تمرکز اصلی آن بر ویژگی های زبان #C است که با توسعه برنامه های Xamarin.Android مواجه خواهید شد. همچنین، این مقاله توضیح می دهد که چگونه این ویژگی ها با جاوا متفاوت است و ویژگی های مهم  #C (مربوط به Xamarin.Android) را که در جاوا در دسترس نیست معرفی می کند. 
اگر با Java آشنا هستید، با ساختار زبان برنامه نویسی #C  نیز آشنا خواهید شد. ساختار زبان برنامه نویسی سی شارپ بسیار مشابه ساختار زبان برنامه نویسی Java است - #C  زبان "curly brace" مانند Java، C و ++C است. در بسیاری جهات، ساختار زبان برنامه نویسی #C  به عنوان یک سوپرمارکت از ساختار زبان برنامه نویسی جاوا، اما با چند کلمه کلیدی تغییر نام داده و اضافه شده است.
بسیاری از ویژگی های کلیدی جاوا در #C  یافت می شود:

  •     Class-based object-oriented programming  | برنامه ریزی شی گرا مبتنی بر کلاس

  •    Strong typing | تایپ قدرتمند

  •     Support for interfaces | پشتیبانی از اینترفیس ها

  •     Generics

  •     Garbage collection

  •     Runtime compilation

ویژگی های مشترک جاوا و سی شارپ | #java vs C

  •     هر دو زبان یعنی جاوا و #C  به یک زبان متوسط در یک محیط اجرای مدیریت کامپایل می شوند. 

  •  به طور ایستا تایپ می شوند و هر دو زبان رشته ها را به عنوان متغیرهای غیر قابل تغییر مورد استفاده قرار می دهند. 

  •     از سلسله مراتب کلاس تک ریشه ای استفاده می کنند. 
  •    در هر دو زبان، اشیا یا همان objects  با استفاده از کلید واژه NEW بر روی پشته ایجاد می شوند و هنگامی که دیگر مورد استفاده قرار نمی گیرند، اشیاء جمع آوری می شوند - GC یا Garbage Collector چیست؟
  •     زبان سی شارپ و جاوا، از try/catch پشتیبانی می کنند. 
  •     هر دو پشتیبانی مدیریت موضوع و هماهنگ سازی را ارائه می دهند.

با اینحال تفاوتهای زیادی بین زبان سی شارپ و جاوا وجود دارد:


تفاوت زبان سی شارپ و جاوا | #differences between Java and C

  • جاوا از متغیرهای محلی ضمنی یا همان implicitly-typed local variables  پشتیبانی نمی کند (#C از کلید واژه var استفاده می کند)
  • در جاوا، شما می توانید پارامترها را فقط بر اساس value انتقال دهید. اما در #C شما می توانید از طریق کلمات کلیدی ref و همچنین out پارامترها را انتقال دهید. (#C کلمات کلیدی ref و out را برای عبور پارامترها از طریق reference فراهم می کند که معادل آن در جاوا وجود ندارد).
  • جاوا دستورات پیش پردازنده مانند define# را پشتیبانی نمی کند.
  • جاوا از انواع عدد صحیح نامعلوم پشتیبانی نمی کند، در حالی که #C انواع صحیح نامعلوم مانند ulong، uint، ushort و byte را ارائه می دهد.
  • جاوا از بارگذاری اپراتور پشتیبانی نمی کند؛ در #C شما می توانید operator ها و conversion ها را بیش از حد بارگذاری کنید.
  • در  عبارت switch جاوا، کد می تواند به بخش switch بعدی برود، اما در #C پایان هر بخش switch باید switch را خاتمه دهد (انتهای هر بخش باید با یک دستور break تمام شود).
  • در جاوا، استثنائاتی را توسط یک method با کلمه کلیدی throws مشخص می کنید، اما #C هیچ مفهومی از استثنائات مورد بررسی را ندارد - کلمه کلیدی throws در #C پشتیبانی نمی شوند.
  • #C از (Query Linguistic Integrated (LINQ پشتیبانی می کند، که به شما اجازه می دهد از کلمات رزرو شده مانند from، selectو  where برای نوشتن کوئری ها به شیوه ای شبیه به کوئری های پایگاه داده استفاده کنید.

البته، بین سی شارپ و جاوا تفاوت زیادی وجود دارد که می تواند در این مقاله پوشش داده شود. همچنین، هر دو زبان همچنان درحال تکامل یافتن هستند (به عنوان مثال، جاوا 8، که هنوز در ابزار Android toolchain پشتیبانی نمی کند، اما از عبارت C#-style lambda پشتیبانی می کند) بنابراین این تفاوت ها با گذشت زمان تغییر خواهد کرد. فقط در حال حاضر مهمترین تفاوت های موجود برای اینکه توسعه دهندگان جاوا بتوانند از زامارین اندروید استفاده کنند، در اینجا گفته شد.
در این قسمت از آموزش زامارین برای توسعه دهندگان جاوا، ما به موارد زیر می پردازیم:


Going From Java to C# Development

  •     مقدمه ای برای تفاوت های اساسی بین سی شارپ و جاوا را ارائه می دهد.

بخش های زیر شیوه های ابتدایی "شروع کار" را بین #C و Java مشخص می کند؛ بخش بعد تفاوت های شی گرا بین این زبان ها را توضیح می دهد.
Libraries vs. Assemblies
جاوا معمولا پکیج های مرتبط را در فایل های jar را نگه میدارد. اما در #C و NET. معمولا به عنوان فایل های dll. بسته بندی می شوند. سی شارپ حاوی کد های میانه (IL) است که در زمان اجرا به درستی انجام می شود.
برای اطلاعات بیشتر درمورد assemblies می توانید به این قسمت مراجعه کنید.


Packages vs. Namespaces
سی شارپ از کلید واژه namespace برای گروه بندی انواع مرتبط با هم استفاده می کند. این کلمه کلیدی درجاوا package نام دارد. کد زیر #C فضای نام WeatherApp را برای برنامه گزارش آب و هوا اعلام می کند:


namespace WeatherApp
{
    ...



 


Importing Types
هنگامی که از انواع تعریف شده در فضای نام های خارجی استفاده می کنید، این نوع ها را با یک دستور using می توانید بکارببرید (که خیلی مشابه دستورات import جاوا است). در جاوا، شما می توانید یک نوع را با یک عبارت مانند زیر وارد کنید:



import javax.swing.JButton

 


شما ممکن است یک بسته کامل جاوا را با کدی مانند زیر وارد کنید:


import javax.swing.*


 


دستور using در سی شارپ از روش بسیار مشابه استفاده می کند، اما اجازه می دهد تا یک بسته کامل را بدون تعیین یک علامت وارد کنید. مانند زیر:



using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.Net;
using System.IO;
using System.Json;
using System.Threading.Tasks;

 


Object-Oriented Programming Features 

  •    مهمترین ویژگی های متمایز شی گرا بین دو زبان را مشخص می کند.

جاوا و #C از اشیاء بسیار مشابه برنامه نویسی شی گرا استفاده می کنند:


ویژگی های مشترک برنامه نویسی شئ گرا جاوا و سی شارپ

 

  •     همه کلاسها در نهایت از یک ریشه واحد استخراج می شوند - تمام اشیاء جاوا از java.lang.Object حاصل می شوند، در حالی که همه اشیاء سی شارپ از System.Object حاصل می شوند.
  •   نمونه هایی از کلاس ها reference هستند.
  •    برای دسترسی به properties و methods از "." استفاده می کنید. 
  •   تمام نمونه های کلاس از طریق اپراتور new بر روی پشته ایجاد می شود.
  •     از آنجا که هر دو زبان از garbage collection (بالاتر این مورد را توضیح دادیم) استفاده می کنند، هیچ راهی برای انتشار صریح اشیاء استفاده نشده وجود ندارد (به عنوان مثال در C++ یک کلمه کلیدی delete وجود ندارد).
  •  شما می توانید کلاس ها را از طریق وراثت گسترش دهید و هر دو زبان فقط یک کلاس پایه را به هر نوع اجازه می دهند.
  •   می توانید رابط ها را تعریف کنید و یک کلاس می تواند از چندین رابط استفاده کند.

با اینحال تفاوت های مهمی نیز وجود دارد:


تفاوت برنامه نویسی شئ گرا جاوا و سی شارپ 

 

  •   جاوا دو ویژگی قدرتمند نسبت به سی شارپ دارد: anonymous classes (کلاس های ناشناس) و inner classes (کلاس های درونی)
  •    #C از ساختار C-style نوع (struct) پشتیبانی می کند. در حالی که جاوا انجام نمی دهد.
  •     در #C، شما می توانید کلاس ها را در فایل های منبع جداگانه با استفاده از کلمه کلیدی partial تعریف کنید.
  •    C# interfaces نمی تواند فیلدها را شناسایی کند.

Class Inheritance
برای گسترش کلاس در جاوا، از کلمه کلیدی extension استفاده کنید. برای گسترش یک کلاس در #C، از کولون (:) برای نشان دادن مشتق استفاده کنید. به عنوان مثال، در برنامه های Xamarin.android، اغلب کلاس های مشتق شده را می بینید که شبیه قطعه کد زیر هستند:



public class MainActivity : Activity
{
    ...

 


در این مثال، MainActivity از کلاس Activity به ارث می برد.
برای اعلام پشتیبانی برای یک رابط در جاوا، از کلمه کلیدی implements استفاده کنید. با این حال، در سی شارپ، شما به سادگی لیست نام های رابط را به لیست کلاس های به ارث برده می توانید اضاف کنید. همانطور که در این کد نشان داده شده است:



public class SensorsActivity : Activity, ISensorEventListener
{
    ...

 


در این مثال، SensorsActivity از فعالی Activity ت به ارث می برد و عملکردهای اعلام شده در رابط ISensorEventListener را اجرا می کند. توجه داشته باشید که لیست اینترفیسها باید بعد از کلاس پایه باشد. با هماهنگی، نام های رابط سی شارپ با یک حروف بزرگ «I» وارد می شوند؛ این امر می تواند بدون نیاز به کلید واژه پیاده سازی تعیین کند که کدام کلاس ها رابط هستند.
برای تماس با یک سازنده کلاس پایه در #C، شما باید از یک کولون (:) همراه با کلمه کلیدی base و یک لیست اولیه استفاده کنید؛ این سازنده base بلافاصله بعد از لیست پارامترهای سازنده مشتق شده قرار می گیرد. قطعه کد زیر یک سازنده پایه ای را که از یک سازنده مشتق شده در یک برنامه Xamarin.Android صدا زده می شود، نشان می دهد:




public class PictureLayout : ViewGroup
{
    ...
    public class PictureLayout (Context context)
           : base (context)
    {
        ...
    }
    ...
}

 


در این مثال، کلاس PictureLayout از کلاس ViewGroup مشتق شده است. سازنده PictureLayout در این مثال نشان داده شده است که یک آرگومان متنی را می پذیرد و از طریق فراخوانی پایه (context) آن را به سازنده ViewGroup منتقل می کند.
برای فراخوانی یک کلاس پایه در سی شارپ از کلید واژه base استفاده کنید. به عنوان مثال، برنامه های Xamarin.Android اغلب متدهای پایه ای به صورت زیر نشان می دهد:



public class MainActivity : Activity
{
    ...
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);


 


Access Modifiers
Java و #C هر دو از دسترسی های private، public و protected پشتیبانی می کنند. با این حال، سی شارپ از دو دسترسی اضافی دیگر نیز پشتیبانی می کند:
Internal: عضوهای کلاس تنها در مجمع فعلی قابل دسترسی است.
protected internal: عضوهای کلاس در defining class، defining assembly و کلاس های مشتق شده قابل دسترسی است (کلاس های مشتق شده در داخل و خارج از مجمع دسترسی دارند).
برای اطلاعات بیشتر درمورد Access Modifiers در سی شارپ می توانید به این قسمت مراجعه کنید.


Virtual and Override Methods


ویژگی های مشترک جاوا و سی شارپ در Virtual and Override Methods

 

  •   هر دو زبان از polymorphism پشتیبانی می کنند، توانایی پردازش اشیای مرتبط به همان شیوه.
  •    (Polymorphism به معنای یک چیز در بسیاری از فرم است. اساسا Polymorphism قابلیت یک شی برای رفتار در چندین متد است. به عنوان مثال: نقش انسان در خانه، کالج و خارج از خانه تغییر می کند)

  •    در هر دو زبان، می توانید از یک مرجع کلاس base برای اشاره به یک شیء کلاس مشتق شده استفاده کنید و متد های یک کلاس مشتق شده می تواند متد های کلاس های پایه آن را نادیده بگیرد. 

  •    در هر دو زبان مفهوم virtual method، یک متد در یک کلاس پایه است که طراحی شده است که با یک متد در یک کلاس مشتق شده جایگزین شود. 

با این حال، برخی از تفاوت های میان جاوا و سی شارپ در نحوه اعمال Virtual and Override Methods آن ها وجود دارد:

 

  • در سی شارپ، متدها به طور پیش فرض غیر مجازی است. کلاسهای Parent باید صریحا از کلید واژه virtual استفاده کنند. در مقابل، تمام متد ها در جاوا، به طور پیش فرض، متد مجازی هستند.

  • برای جلوگیری از لغو متد در سی شارپ، شما به سادگی کلمه کلیدی virtual را برمی دارید. در مقابل، جاوا از کلید واژه final استفاده می کند. 

کلاسهای مشتق شده از سی شارپ باید از کلیدواژه override استفاده کنند تا به صراحت نشان دهند که یک متد کلاس مجازی پایه لغو شده است.

 

برای یادگیری زامارین حتما بخش های قبل را بخوانید

"تهیه شده در مجموعه ABLY"


 

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس