آموزش برنامه نویسی

در این مجموعه آموزش با جاوا آشنا خواهید شد، زبان برنامه نویسی که برای توسعه اپلیکیشن‌های مختص سیستم ‌عامل اندروید مورد استفاده قرار می گیرد، در نظر داریم افرادی را که در حال حاضر با یکی از زبان های برنامه نویسی مانند PHP یا Object-c آشنا هستند، برای راحت تر کارکردن با زبان برنامه نویسی جاوا و جهش به‌سوی توسعه برنامه های اندروید آماده کنیم. در این آموزش یک مقدمه کوتاه راجع‌ به اصول جاوا از جمله برنامه نویسی شی گرا، وراثت و غیره مطالعه می کنید. اگر در جاوا تازه کار هستید یا به دنبال مرور جزئیات هستید این مجموعه آموزشی برای شما مناسب است.
شروع کار:
تا اینجا پیش نیازها را برای رفتن به سمت جلو گفتیم ما فرض می‌کنیم که شما یک درکی از چگونگی برنامه نویسی دارید (شاید در PHP ، VB یا C++) اما با ویژگی های برنامه نویسی در جاوا آشنا نیستید، ما قصد نداریم به شما آموزش کامل برنامه نویسی جاوا را بدهیم، بلکه قصد داریم شما را با مثال های روشنی از ساختارهای زبان جاوا و قاعده کلی آن که بطور معمول استفاده می شود آشنا کنیم، در حالی که به برخی از راهنمایی ها و ترفندهای خاص اندروید اشاره می‌کنیم .
آنچه که شما نیاز دارید:
از لحاظ فنی شما به هیچ ابزاری برای تکمیل این آموزش نیاز ندارید اما قطعا به برنامه هایی که اندروید را توسعه می دهند نیاز خواهید داشت.
به منظور توسعه برنامه های اندروید ( یا هر برنامه کاربردی جاوا برای این موضوع ) شما به یک محیط توسعه برای نوشتن و ساختن(Build) برنامه هایتان نیاز دارید، Eclipse یک محیط توسعه (IDE) برای جاوا است و IDE مقدمی است برای توسعه برنامه های اندرویدکه به صورت رایگان برای سیستم عامل های ویندوز، مک و لینوکس در دسترس است.
دستورالعمل کامل در مورد چگونگی نصب Eclipse ( از جمله نسخه هایی که پشتیبانی شده اند) و اندروید SDK ، وب سایت توسعه اندروید را ببینید: http://developer.android.com/sdk/index.html
(مترجم: پیشنهاد بنده برای برنامه‌نویسی اندروید استفاده از محیط android studio است که به تازگی توسط شرکت گوگل معرفی شده و کاملاً پشتیبانی می‌شود. برای نصب و اطلاعات بیشتر به سایت http://developer.android.com مراجعه نمایید)

جاوا چیست؟
برنامه های اندروید با استفاده از زبان جاوا برنامه نویسی شده اند که هم اکنون تنها گزینه واقعی برای برنامه های
بومی(Native) است و جاوا یک زبان برنامه نویسی بسیار محبوب است که توسط شرکت Sunmicrosystems
که در حال حاضر متعلق به اوراکل است طراحی شده و پس از C و C++ توسعه زیادی یافته است. جاوا ترکیب شده از بسیاری ویژگی های قدرتمند این زبان های قدرتمند (C و C++) در حالی که برخی از اشکال های آنها را هم رفع کرده است. با این حال زبان های برنامه نویسی هستند که تنها به این علت قدرتمندند که از کتابخانه های جاوا استفاده کرده اند، این کتابخانه ها برای این که به برنامه نویسان کمک کنند که بتوانند برنامه هایشان را ایجاد کنند، به وجود آمده‌اند.
برخی از ویژگی های زبان جاوا به شرح ذیل است:
• برای یادگیری و فهمیدن آسان است.
• طوری طراحی شده که مستقل از پلت فرم و امن است که این کا را با استفاده از ماشین مجازیش انجام می دهد.
• شی گرا است.
اندروید به شدت به این اصول جاوا متکی است بطوری که اندروید SDK شامل بسیاری از کتابخانه های استاندارد جاوا است.
(کتابخانه ساختمان داده، کتابخانه ریاضی، کتابخانه گرافیک، کتابخانه شبکه و هر چیز دیگری که شما می خواهید) و همچنین کتابخانه تخصصی اندروید که به شما کمک خواهد کرد برنامه های کاربردی خوبی برای اندروید بنویسید.
چرا جاوا برای یادگیری آسان است؟
یادگیری جاوا به دلایل مختلف آسان است چون هیچ کمبودی برای منابع کمکی در یادگیری زبان جاوا وجود ندارد و شما برای یادگیری آن می توانید از وب سایت ها ، آموزش ها ، کتاب ها و کلاس ها استفاده نمائید.
جاوا یکی از زبان های برنامه نویسی است که بطور گسترده مورد بحث قرار گرفته و تدریس شده است، و از آن برای بسیاری از انواع مختلف پروژه های برنامه نویسی بدون توجه به اندازه آن استفاده می شود، از جمله برنامه های وب ، برنامه های دسکتاپ و برنامه های موبایل.
اگر شما از پس زمینه های سنتی مانند C یا C++ می‌آیید، خواهید دید که دستورات جاوا کاملا برای شما آشناست و اگر اینجوری نیست نگران نباشید چون به راحتی آن را درک خواهیدکرد و بدانید که یکی از ساده ترین زبان های برنامه نویسی را برای یادگیری انتخاب کرده اید و می توانید در کمترین زمان ممکن در این زبان راه بیفتید.

در نهایت جاوا یکی از زبان هایی است که بیشترین تعداد دانش‌آموخته را در سرتاسر جهان دارد، و هر کسی که در مورد برنامه نویسی دانشی دارد، اغلب می تواند برخی از کدهای جاوا یا حداقل آنچه که دارد انجام می شود را بفهمد مثال زیر را در نظر بگیرید:


char character = 'a';
if(character=='a')
{
doSomething();
} else {
doSomethingElse();
}

 اگر شما به سادگی این کد را با صدای بلند بخوانید، تقریباً می‌توانید بگویید که این قطعه کد چه کاری انجام می دهد، یک متغیر تک حرفی به نام Character وجود دارد که اگر این متغیر مساوی با حرف ‘a’ بود سپس ما کاری را انجام می دهیم ( فراخوانی متد doSomething()) در غیر این صورت کار دیگری را انجام می دهیم (از طریق فراخوانی متد doSomethingElse()).
چرا پلت فرم مستقل مهم است:
برای بسیاری از زبان های برنامه نویسی نیاز دارید که یک کامپایلر برای تبدیل کدتان به زبان ماشین، که یک زبان سطح پایین است استفاده کنید، که برای سخت افزارها قابل فهم باشد. هرچند این کار خیلی خوب است، دستگاه های مختلف از زبان های ماشین مختلف استفاده می کنند، و این بدان معنی است که ممکن است برای هر دستگاه مختلف با زبان ماشین مخصوص به خودش نیاز به کامپایل برنامه های خودتان داشته باشید، یا به عبارت دیگر کدتان قابل حمل نیست. این مورد برای جاوا نمی باشد، چون کامپایلر های جاوا کدتان را از فایل های منبع جاوا که قابل خواندن توسط انسان است به چیزی به نام “bytecode” در جهان جاوا تبدیل می کنند و این ها توسط ماشین مجازی جاوا تفسیر می شوند. که در عمل بسیار شبیه به پردازنده(CPU) که در کد ماشین این عملیات را انجام می‌دهد هستند. در واقع کد کامپایل شده را اجرا می کند، هر چند این ممکن است ناکارآمد به نظر برسد ولی تلاش زیادی شده که این پردازش بسیار سریع و کارآمد انجام شود و این تلاش ها باعث شده که کارآیی جاوا بطور معمول در مقایسه با کارآیی زبان های مشترک C و C++ در رتبه دوم باشد.
برنامه های اندروید در یک ماشین مجازی مخصوص به نام Delvik VM اجرا می شوند در حالی که جزئیات این VM برای برنامه نویسان معمولی بی اهمیت است، این امر می تواند برای فهمیدن Delvik VM به عنوان یک حباب در برنامه های اندرویدی که شما اجرا می کنید، مفید باشد و اجازه می دهد که در مورد اینکه آیا دستگاه Motorola Driod، یک HTC Evo یا آخرین توستر در حال اجرا اندروید است نگرانی نداشته باشید. در واقع تا زمانی که دستگاه تان با یک Delvik VM کار می کند، اهمیتی به این چیزها نمی دهید و انجام این کارها برای تولید کنندگان دستگاه هاست نه برنامه‌‌نویس.
چرا جاوا امن است؟
بیایید کمی بیشتر راجب این ایده حباب صحبت کنیم، از آنجایی که برنامه های جاوا در حبابی است که یک ماشین مجازی آن را اجرا می کند، آنها از سخت افزار دستگاهایی که در لایه زیرین قرار دارند جدا می شوند. بنابراین یک ماشین مجازی می تواند محافظت و محدود شده باشد و اجرای کد را در شیوه های امن در مقایسه با زبان هایی که این کار را بطور مستقیم در کد ماشین انجام می دهند، مدیریت کند. در پلتفرم اندروید این کار یک گام بیشتر طول می کشد و هر برنامه اندروید بر روی سیستم عامل (مبتنی بر لینوکس) که از یک حساب کاربری مختلف و در نمونه خود از Delvik VM استفاده می کند، اجرا می شود و برنامه های کاربردی اندروید از نزدیک توسط سیستم عامل تحت نظر گرفته می شوند. و اگر با آنها خوب کار نکنید بسته می شوند (برای مثال استفاده بیش از حد از قدرت پردازش، بی مسئولیت بودن، مصرف کردن بیهوده منابع و غیره) بنابراین این موضوع برای توسعه برنامه هایی که با ثبات و واکنش گرا هستند مهم است و همچنین برنامه های کاربردی می توانند با استفاده از پروتکل هایی که به خوبی تعریف شده اند با آن ارتباط برقرار کنند.

کامپایل کردن کدتان:
مانند بسیاری از زبان ها، جاوا هنوز هم یک زبان کامپایل شده است و اگر کامپایل نکند راهی برای تبدیل به کد ماشین وجود ندارد، این بدین معنی است که شما نیاز دارید که پروژه های اندرویدتان را کامپایل کنید و آنها را برای مستقر کردن بر روی دستگاه هایی که دارید پکیج کنید.
محیط توسعه Eclipse ( با استفاده از پلاگین در توسعه اندروید ) باعث می شود این کارها تا حدی بدون دردسر انجام شود، در Eclipse کامپایل به صورت خودکار است که اغلب به صورت پیش فرض فعال است به این معنی که هر بار که شما یک فایل پروژه را ذخیره می کنید Eclipse دوباره تغییرات را برای پکیج برنامه هایتان کامپایل می کند و شما بلافاصله خطاهای کامپایل را می بینید.
Eclipse همچنین جاوا را به عنوان نوع شما تفسیر می کند و کد دستی رنگی و قالب بندی شده ارائه می دهد. همچنین انواع بسیاری از خطاها را به شما نشان خواهد داد و اغلب شما می توانید بر روی خطاها کلیک کنید و Eclipse بطور خودکار خطای تایپی را رفع و یا یک دستور ورودی را اضافه می کند، و یا یک متد جم وجور به شما ارائه می دهد که باعث صرفه جویی بسیار زیادی در تایپ کردن می شود.
شما هنوز هم اگر تمایل داشته باشید می توانید کدتان را به صورت دستی کامپایل نمائید، در Eclipse تنظیمات ساختن (Build) را زیر منوی پروژه پیدا می کنید.
اگر شما Build Automatically (ساختن به صورت خودکار) را فعال کرده باشید هنوز هم می توانید گزینه “clean” را انتخاب کنید، که به شما اجازه می دهد بطور کامل تمام فایل ها را دوباره بسازید(Rebuild) و اگر Build Automatically (ساختن به صورت خودکار) غیر فعال بود از منوی Option و بعد “Build project” و “Build All” را بزنید، Build All به معنای ساختن تمام پروژه ها در یک فضای کاری است و شما می توانید پروژه های بسیاری را در یک فضای کاری Eclipse داشته باشید.
روند ساختن (Build) برای پروژهای جاوا بطور منظم است و نتایج در یک فایل با پسوند JAR (Java Archive) قرار می گیرد و برنامه های کاربردی اندروید فایل های JAR را دریافت کرده و آنها را برای استقرار در دستگاه ها به عنوان فایل های پکیج اندروید با پسوند apk پکیج می کنند.
این فرمت نه تنها شامل کد جاوا کامپایل شده خودتان است بلکه شامل هرگونه منابع دیگر مانند رشته ها، تصاویر و یا فایل‌های صوتی است که برنامه برای اجرا احتیاج دارد و همچنین به عنوان فایل Manifest برنامه که Androidmanifest.XML است، فایل Manifest اندروید یک فایل مورد نیاز برای تمام برنامه های اندرویدی است که برای تعریف جزئیات پیکربندی در مورد برنامه تان استفاده می کنید.
زبان برنامه نویسی شی گرا چیست؟
بسیار خوب زمان آن فرا رسیده است که یک آموزش مختصر و مفید برای برنامه نویسی شی گرا داشته باشیم(OOP).
OOP یک سبک برنامه نویسی یا تکنیکی است که متکی بر تعریف ساختار داده به نام اشیاء است.
برای کسانی که در برنامه نویسی شی گرا تازه‌کارند یک شی را می توان این چنین تصور کرد که بسیار شبیه به یک نوع داده سفارشی است. برای مثال شما ممکن است یک شی سگ (Dog ) داشته باشید که نشان دهنده یک طرح اولیه برای یک نوع سگ با نام، نژاد و جنسیت است سپس می توانید نمونه های مختلفی از شی Dog به نمایندگی از سگ های خاص ایجاد کنید. هر شی Dog باید توسط فراخوانی کردن سازنده‌اش ( یک متدی که همان نام را دارد و به عنوان شی خودش است و یا ممکن است پارامترهایی برای تنظیم مقادیر اولیه نداشته باشد) ایجاد گردد. برای مثال اشیاء Dog زیر از یک سازنده با سه پارامتر ( name, breed, gender) استفاده می کنند:


Dog dog1 = new Dog("Lassie", collie, female);
Dog dog2 = new Dog("Fifi", poodle, female);
Dog dog3 = new Dog("Asta", foxterrier, male);

با این تفاسیر پس شی سگ کجا تعریف شده است؟ خوب در اینجا نیاز داریم برخی از ساختن بلوک‌های پایه‌ای از زبان برنامه‌نویسی جاوا را تعریف کنیم.
یک کلاس تعریفی برای یک شی را ارائه می دهد بنا براین یک کلاس Dog در جای دیگری توسط شما تعریف شده است یا در برخی از کتابخانه ها که در جای دیگری قرار دارند. بطور کلی یک کلاس در فایل خودش تعریف شده است، با فایلی که نام آن با نام کلاس مطابقت دارد ( برای مثال Dog.Java) و استثناهایی هم برای این قاعده وجود دارد؛ مانند کلاس هایی که درون کلاس های دیگر تعریف شده اند ( وقتی یک کلاس درون کلاس دیگر اعلان شده است، آن کلاس بطور کلی برای استفاده درونی کلاس والد تعریف شده است، که تنها به عنوان یک کلاس کمکی و کلاس درونی به آن ارجاع داده می شود).
هنگامی که بخواهید به یک شی از درون کلاس دیگر ارجاع دهید، برای وارد کردن دستورات در بالای فایل کلاس خودتان نیاز به یک include دارید، بسیار شبیه به این است که از دستور #include در یک زبان کامپایل شده مانند C استفاده کنید.
یک کلاس معمولا داده ها و رفتار یک شی را توصیف می کند رفتاری که با استفاده از متدهای کلاس تعریف شده است.
متد یک واژه عمومی برای یک زیرروال در یک زبان برنامه نویسی شی گرا است و بسیاری از کلاس های شی مشترک هستند و در یک کتابخانه کلاس مشترک مانند کیت توسعه نرم افزار (SDKها) تعریف شده اند، در حالی که دیگر کلاس ها توسط شما برای اهداف خودتان تعریف شده اند و با استفاده از آنها و دستکاری کردن نمونه های شی در روش های مختلف نرم افزار ساخته می شود. لطفا برای اینکه تعریف بسیار کلی از برنامه نویسی شی گرا داشته باشد تحقیق کنید. کتاب های کاملی برای این موضوع نوشته شده است و اگر می خواهید بیشتر در مورد oop بدانید در اینجا چند منبع وجود دارد که شاید بخواهید آنها را بررسی نمائید:

• Wikipedia has a nice overview of OOP
• Sun Java Tutorials on Java
• The Java Tutorials at Oracle

توجه: ما از بسیاری از اصطلاحات مختلف در این آموزش استفاده می کنیم و راه های متعددی برای ارجاع به یک مفهوم داده وجود دارد (برای مثال سوپر کلاس بالا به کلاس پدر). که این برای کسانی که در برنامه نوسی شی گرا تازه کارند گیج کننده است. برنامه نویسان مختلف از شرایط متفاوتی استفاده می کنند و بنابراین ما تلاش کردیم مترادف مناسب با آن را ذکر کنیم و تصمیم گیری در مورد اینکه شما کدام شرایط را استفاده خواهید کرد یک انتخاب کاملا شخصی است.
فهمیدن وراثت:
در اینجا می پردازیم به وراثت که یکی دیگر از مفاهیم مهم جاوا است که شما خیلی زیاد از آن استفاده خواهید کرد. به عبارت ساده تر وراثت به این معنی است که کلاس های جاوا (و در نتیجه اشیاء) را می توان درون سلسله مراتب پایین تر، مشخص تر سازماندهی کرد و کلاس ها در سلسله مراتب وراثت، رفتار و ویژگی ها را از کلاس های بالاتر و عمومی تر به ارث ببرند.
این مفهوم بهتر است با مثال نشان داده شود. فرض کنیم که در حال توسعه یک نرم افزار جاوا برای شبیه سازی یک آکواریم هستیم و این آکواریوم برخی از ماهی ها را دارد. بنابراین ممکن است یک کلاس برای نشان دادن ماهی‌ها تعریف کنیم و این کلاس را Fish بنامیم، که می تواند شامل برخی از فیلدهای داده ( همچنین صفات یا متغیر عضو کلاس نامیده می شوند) برای توصیف یک شی Fish مانند زیر باشد:
گونه ها، رنگ، اندازه و همچنین برخی از رفتارهای آن در قالب متدها ( همچنین زیرروال ها یا توابع در زبان های
برنامه سازی نامیده می شوند) مانند خوردن eat()، خوابیدن sleep() و تولید مثل کردن makeBabyFish()
یک نوع خاص از متد است که سازنده نامیده می شود که برای ایجاد و مقداردهی اولیه یک شی مورد استفاده قرار می گیرد و سازنده ها همنام با نام کلاس هستند و ممکن است شامل پارامترهایی هم باشند.
کلاس Fish زیر دو سازنده دارد یکی برای ایجاد یک شی Fish عمومی و دیگری برای ساختن یک شی Fish خاص با برخی از داده های اولیه و همچنین خواهید دید که کلاس Fish دو متد eat() دارد، که یکی برای خوردن چیزی بطور تصادفی و دیگری برای خوردن ماهی دیگر که توسط نمونه دیگر از کلاس Fish بیان شده است:


public class Fish {

    private String mSpecies;
    private String mColor;
    private int mSize;

    Fish() {
        // generic fish
        mSpecies = "unknown";
        mColor = "unknown";
        mSize = 0;
    }

    Fish(String species, String color, int size) {
        mSpecies = species;
        mColor = color;
        mSize = size;
    }
    public void eat() {
        // eat some algae
    };
        
    public void eat(Fish fishToEat) {
        // eat another fish!
    };
        
    public void sleep() {
        // sleep
    };
        
    public void makeBabyFish(Fish fishSpouse, int numBabies) {
        // Make numBabies worth of baby fish with Fish spouse
    };
}

کلاس ها می توانند درون سلسله مراتب هایی که در آن کلاس (یا زیرکلاس) مشتق شده اند سازماندهی شوند که شامل تمام ویژگی از کلاس پدر است (یا سوپر کلاس )، اما اگر آنها را برای تعریف یک شی خاص دیگر با استفاده از کلمه کلیدی Extends تصحیح و اضافه کنید، این وراثت نامیده می شود.
برای مثال کلاس Fish ممکن است دو زیرکلاس داشته باشد. FreshWaterFish (ماهی رودخانه ای) و SaltWaterFish (ماهی دریایی) ، این زیرکلاس ها شاید بخواهند همه ویژگی های کلاس Fish را داشته باشند، اما جلوتر می توانید اشیاء را از طریق ویژگی های جدید و رفتارها یا رفتارهای اصلاح شده از کلاس پدر Fish سفارشی کنید.
برای مثال FreshWaterFish ممکن است اطلاعاتی در مورد نوع محیط آب شیرین (برای مثال رودخانه، دریاچه، تالاب یا گودال) داشته باشد و بطور مشابه کلاس SaltWaterFish ممکن است متد makeBabyFish() را طوری که ماهی غذاهایی را بخورد که جفتش پس از تولید مثل می خورد (همانطور که در سوپرکلاس تعریف شده) با استفاده از مکانیزم override سفارشی کند مانند این:

سازماندهی کردن رفتار شی با رابط‌ها (Interfaces):
در جاوا می توانید رفتارهای اشیاء را در آنچه که interface نامیده می شود سازماندهی کنید.
در حالی که یک کلاس یک شی را تعریف می کند یک رابط برخی از رفتارهایی که یک شی می تواند به کار ببرد را تعریف
می کند. برای مثال می خواهیم یک رابط Swimmer (شناگر) را تعریف کنیم که یک مجموعه از متدهایی که در تمام اشیائی که می توانند شنا کنند مشترک هستند ارائه می دهد، چه آنهایی که مانند ماهی و سمور در عمق آب، یا آنهایی که در سطح آب شناورند.
رابط Swimmer ممکن است ۴ متد برای این کار مشخص کند:

StartSwimming(), stopSwimming(), dive(), surface()
public interface Swimmer
{
void startSwimming();
void stopSwimming();
void dive();
void surface();</code>
}

 

شما یک کلاس مانند Fish می خواهید و پس از آن می توانید رابط Swimmer را ( با استفاده از کلمه کلیدی implements) پیاده سازی کنید و پیاده سازی هایی از رفتار Swimming را ارائه دهید.

public class Fish implements Swimmer {
    // Provide implementations of the four methods within the Swimmer interface 
}

سازماندهی کردن کلاس ها و رابط ها با پکیج ها:
سلسله مراتب کلاس مانند کلاس های Fish ما است و پس از آن می توانید آنها را درون پکیج ها سازماندهی کنید. یک پکیج به سادگی یک مجموعه از کلاس ها و رابط ها است ، همراه با هم و توسعه دهندگان از فضای نام منحصر به فرد برای نام پکیج استفاده می کنند. برای مثال ما می توانیم از com.mamlambo.aquarium یا com.ourclient.project.subproject به عنوان نام پکیجمان برای پیگیری از کلاس های مربوط به Fish استفاده نمائیم.

خلاصه:
شما تنها یک شروعی داشتید در دوره درهم و برهم جاوا برای توسعه اندروید و ما سطح نمونه خوبی از متریال را در اینجا پوشش دادیم. در جلسه دوم تمرکزمان را بر روی جزئیاتی از دستورات جاوا می گذاریم همچنین تنها سطحی از توسعه جاوا برای توسعه اندروید را مشاهده کردید.
در سایت Mobiletuts+ آموزش های زیاد دیگری را بررسی می کنیم که بطور عمیق تر وارد جاوا و توسعه اندروید می‌شویم.

موفق باشید!

مترجمان :

مهدی قاسم خانی

شیما عرفان

ویرایش  فنی :

محمد غفاری فر

این آموزش ها اختصاصی هستند و ساعت ها برای هر آموزش  زحمت کشیده شده  پس با کپی کردن  بدون ذکر منبع تمامی زحمات مدرسین  و ما رو ضایع نکنین  . با تشکر
دی ۱۵, ۱۳۹۶

آموزش جاوا برای برنامه نویسان اندروید – جلسه اول

در این مجموعه آموزش با جاوا آشنا خواهید شد، زبان برنامه نویسی که برای توسعه اپلیکیشن‌های مختص سیستم ‌عامل اندروید مورد استفاده قرار می گیرد، در […]