کاربری
کاربر گرامی به خوش آمدید . اگر این نخستین بازدید شما از سایت است , لطفا ثبت نام کنید:
نمایش نتایج: از شماره 1 تا 28 , از مجموع 28
  1. #1
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض اموزش قدم به قدم برنامه نویسی اندروید

    خوشبختانه شروع کار برای برنامه نویسی اندروید بسیار راحت است. حتی نیاز نیست که یک موبایل اندروید داشته باشید. فقط نیاز به یک کامپیوتر دارید که SDK را بر روی آن نصب کنید و یک ایمولاتور موبایل. در این پست سعی میکنم نشان دهم چطور ابزار مورد نیاز را بر روی کامپیوتر نصب کنید و آماده شوید تا برنامه نویسی برای اندروید را شروع کنیم. (در پایین صفحه و در قسمت مراجع میتوانید راهنمای نصب را به زبان انگلیسی مشاهده کنید. ضمناً یک فیلم هم قرار داده ام که اگر حوصله خواندن مطلب را ندارید میتوانید به آن رجوع کنید.)

    این برنامه ها رو از قبل برای آماده کردن ویندوزتون نیاز دارین:
    تو این پیوند تمام موارد رو گذاشت


    1- کیت برنامه نویسی جاوا که حدود 80 مگابایته
    2- یکی از نسخه های android sdk که در واقع کیت برنامه نویسی اندرویده(اما محیط برنامه نویسی نداره) پیشنهاد میکنم همون نسخه 2.2 اون رو دریافت و نصب کنید

    محیط برنامه نویسی شما برای برنامه نویسی آندروید:
    یکی از نسخه های eclipse رو باید دریافت کنید که زیاد بین نسخه های مختلفش فرقی نیست

    اما تا اینجای کار محیط برنامه نویسی شما با android sdk ارتباطی پیدا نکرده. eclipse یه محیط برنامه نویسی عمومیه که بیشتر برای برنامه نویسی جاوا ازاون استفاده میشه

    باید پلاگین adt رو هم نصب کنید تا ابزارهای برنامه نویسی مخصوص اندروید به eclipse اضافه بشه و بشه از adroid sdk توی eclipse استفاده کرد

    کیت توسعه نرم افزاری (software development kit) اندروید قابل نصب بر روی سیستم عامل های ویندوز، لینوکس و مک OS X میباشد. بدیهی است اپلیکیشنی که ساخته میشود قابل استفاده بر روی تمامی محصولات مبتنی بر اندروید خواهد بود. قبل از اینکه شروع به برنامه نویسی کنید احتیاج است تا جاوا، محیط توسعه (IDE) و کیت توسعه نرم افزار را بر روی کامپیوتر خود نصب کنید.


    جاوا ۵٫۰ یا جدیدتر

    قبل از هر چیز به یک کپی از جاوا نیاز دارید. تمام ابزارهای توسعه اندروید به آن نیاز دارند و تمام برنامه هایی که برای تولید اپلیکیشت مینویسید براساس آن خواهد بود. بنابراین حد اقل به جاوا ۵٫۰ یا ۶٫۰ که بر روی سیستم تان نصب باشد نیاز دارید.

    تنها داشتن JRE هم کافی نیست، شما احتیاج به کیت کامل توسعه نیز دارید. من پیشنهاد میکنم آخرین نسخه آن را (که در زمان نوشتن این پست JDK SE 6 است) از سایت شرکت سان (که البته امیاز این شرکت توسط شرکت اوراکل خریداری شده است) دریافت نمایید. کاربران مک OSx هم می بایست آخرین نسخه این سیستم عامل به همراه JDK را از سایت اپل دریافت نمایند. سپس فایل دریافت شده را بر روی سیتم تان نصب کنید.

    برای اینکه از متوجه شوید ورژن مورد قبول را بر روی سیتم تان دارید یا خیر، کامند زیر را در Command Prompt (روی استارت منو کلیک کنید، در قسمت جستجو تایپ کنید cmd) اجرا کنید:

    C:\> java -version

    میبایست جوابی مانند تصویر زیر دریافت کنید.



    اکلیپس (Eclipse)

    حالا نیاز است تا محیط توسعه جاوا را بر روی سیستمتان نصب کنید. محیط توصیه شده برای استفاده و برنامه نویسی از طرف گوگل، اکلیپس معرفی شده است. استفاده از این محیط هم رایگان است و هم گوگل از آن پشتیبانی کامل میکند. (محیط های دیگری هم هستند مانند نت بینز که میتوانید بجای اکلیپس از آن استفاده کنید. مراحل نصب در ویکی نت بینز شرح داده شده است.) به صفحه دریافت سایت اکلیپس بروید و Eclipse IDE for Java Developers را دریافت کنید. توجه کنید به چیزی بیشتر از Eclipse SDK classic نیاز دارید، پس آنرا دریافت نکنید. پکیج را دریافت کنید و در قسمت دلخواهس از کامپیوتر از حالت پک خارج کنید (اگر از winzip یا نرم افزارهای مشابه استفاده میکنید بر روی فایل دریافت شده راست کلیک کنید و سپس از منوی باز شده بر روی Extract Here کلیک کنید). مثلاً در ویندوز C:\Eclipse و در مک /Aplications/Eclipse .

    اندروید SDK

    کیت توسعه اندروید به دو قسمت تقسیم شده است. the SDK Starter Package و the SDK Components. به صفحه دریافت SDK بروید و پکیج مورد نظرتان را دریافت کنید. سپس در محل دلخواهی از کامپیوتر آنرا از حالت پک خارج کنید (مانند روشی که در بالا گفته شد). حواستان باشد که کجا این فایل را از حالت پک خارج کردید چون بعداً باید آدرس آنرا به عنوان محل نصب SDK به اکلیپس بدهیم.

    حالا نوبت نصب اندروید SDK Components است. در ویندوز بر روی SDK Setup کلیک کنید. در لینوکس و مک tools/android را اجرا کنید. تمامی گزینه ها را انتخاب کنید و بر روی دکمه نصب کلیک کنید. برنامه نصب لیستی از کامپوننت های موجود به همراه مستندات، پلتفرم ها، کتابخانه های اضافه شده و درایور USB را نشان خواهد داد. بر روی دکمه قبول (Accept) کلیک کنید و منتظر شوید تا نصب کامل شود (این قسمت خیلی کسل کنندست چون مدت زمان زیادی طول میکشه تا دریافت کامل بشه. اگر اشتباه نکنم با سرعت خط من که ۱ مگ هست تقریباً ۲-۳ ساعت طول کشید! ولی امید داشته باشید که من اشتباه کنم ). تمامی کامپوننت ها دریافت خواهد شد و در دایرکتوری SDK ذخیره میشود.

    اگر با پیغام خطای HTTS SSL Error مواجه شدید پنجره را ببندید و به منوی تنظیمات (setting) بروید و //:HTTPS را به //:HTTP تغییر دهید. حالا روند نصب را مجدداً تکرار کنید. قدم آخر اجرای اکلیپس و تنظیم آن میباشد.

    پلاگین اکلیپس (Eclipse Plug-In)

    برای راحتی بیشتر توسعه دهندگان، گوگل پلاگینی آماده کرده است و آن را Android Development Toolkit یا باختصار ADT نامیده است. برای نصب پلاگین مراحل زیر را دنبال کنید (این مراحل بر اساس اکلیپس ۳٫۵ نوشته شده است. ورژن های مختلف ممکن کمی تغییر نسبت به این داشته باشند.).

    ۱- اکلیپس را اجرا کنید.

    ۲- از منوی Help بر روی Install new software کلیک کنید.

    ۳- بر روی پیوند Available Software Sites کلیک کنید (زیر دکمه Add).

    4- بر روی دکمه Add کلیک کنید

    ۵- در قسمت نام، نامی دلخواه را وارد کنید (پیشنهاد من: Android Development Tools) و در قسمت محل (Location) آدرس https://dl-ssl.google.com/android/eclipse را بدهید. به شکل زیر دقت کنید.

    ۶- بر روی OK کلیک کنید تا به لیست برگردید و بر روی تست کانکشن کلیک کنید تا ببینید ارتباط تان با سایت برقرار است. اگر مشکلی پیش آمد در قسمت آدرس Https را به Http تغییر دهید. و دوباره این مرحله را تکرار کنید. سپس بر روی OK کلیک کنید تا به پنجره اصلی نصب بازگردید.

    ۷- منتظر شوید تا نصب به پایان برسد (این هم کلی وقت گیره! ) سپس اکلیپس را ببندید و مجدداً باز کنید (Restart).

    8- وقتی مجدداً اکلیپس راه اندازی میشود ممکن چند پیغام خطا نشان دهد، نگران نباشید. چون باید به اکلیپس بگویید که SDK کجاست. در ویندوز به Window > Preferences > Android بروید (در مک به Eclipse > Preferences) و آدرس محلی نصب SDK را به اکلیپس بدهید.

    خب، خسته نباشید. بالاخره تموم شد. خوشبختانه شما این کار را فقط یک بار انجام میدهید (یا حداقل یک بار وقتی ورژن جدیدی از اکلیپس یا ADT بیاید). حالا همه چیز تمام شده و شما آماده شروع برنامه نویسی هستید.

    موفق باشید.

    مراجع:

    http://developer.android.com/sdk/index.html

    http://www.talkandroid.com/android-sdk-install-guide


    .
    ویرایش توسط عرض از مبدا : پنجشنبه ۰۹ آذر ۹۱ در ساعت ۱۶:۳۲
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  2. 10 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  3. #2
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    نکات اولیه
    چون پیوند مرجع ف..ی...ل..ت..ر هستند پیوند سالم بودن نیاز به ....قرار دادم


    پیوند دریافت android sdkسالم(بدون....) برای ویندوز


    پیوند دریافت android sdkسالم(بدون....) برای مک


    وقتی SDK رو دریافت کردید برای ادامه*ی کار باید نسخه*ی مورد نظر اندروید (API Levels) رو هم دریافت کنید که چون تحریم هستیم با IP ایرانی لیستش رو براتون نمیاره چه برسه به اینکه بخواید دریافت کنید. به همین خاطر API سطح ۷ که کاربرد بیشتری داره رو براتون بارگذاری کردم. سطح ۷ مربوط به android 2.1 یا eclair هست.

    دریافت API-7 [حجم ۶۷ مگابایت]
    برای استفاده از این بسته ها باید بعد از دریافت از حالت zip خارجشون کنید و داخل فولدر platforms در پوشه*ی مربوط به SDK بذارید. مثلا برای مک در آدرس android-sdk-mac در فولدر platforms، فولدر android-7 رو قرار بدید.

    نمونه پروژه هایی که گوگل در اختیار توسعه دهندگان قرار می*ده رو هم برای همین سطح API براتون بارگذاری کردم.

    دریافت API-7 Samples [حجم ۷ مگابایت]

    برای استفاده از این بسته ها باید بعد از دریافت از حالت zip خارجشون کنید و داخل فولدر samples در پوشه*ی مربوط به SDK بذارید. مثلا برای مک در آدرس android-sdk-mac در فولدر samples، فولدر android-7 رو قرار بدید.


    دوتا پیوند مفید :
    به روزترین نسخه ی SDK و ADT برای ایرانیان

    نسخه های مختلف SDK و API
    ویرایش توسط عرض از مبدا : پنجشنبه ۰۹ آذر ۹۱ در ساعت ۱۶:۴۳
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  4. 8 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  5. #3
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  6. 5 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  7. #4
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    بریم سراغ ایراد یکی از کاربران ولی با شرح کلی

    حتما مشکل خیلی از شما اینه که چطور میشه برای برنامه های اندروید دکمه های زیبایی رو طراحی کرد.
    وقتی در حال طراحی یک وبسایت هستیم به راحتی میشه با استفاده از CSS دکمه های زیبا طراحی کرد. اما در اندروید باید چه کار کرد؟


    پیش نمایش نهایی:





    خب، کار رو شروع میکنیم:
    در فولدر res یک پوشه به نام drawable بسازید.
    یک فایل XML جدید با نامی مثل Blue_btn ایجاد کنید و محتویات زیر رو داخلش قرار بدید:


    کد:
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" >
            <shape>
                <solid
                    android:color="#449def" />
                <stroke
                    android:width="1dp"
                    android:color="#2f6699" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
        <item>
            <shape>
                <gradient
                    android:startColor="#449def"
                    android:endColor="#2f6699"
                    android:angle="270" />
                <stroke
                    android:width="1dp"
                    android:color="#2f6699" />
                <corners
                    android:radius="4dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    </selector>




    برای رنگ قرمز در یک فایل دیگه کدهای زیر رو بنویسید:


    کد:
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" >
            <shape>
                <solid
                    android:color="#ef4444" />
                <stroke
                    android:width="1dp"
                    android:color="#992f2f" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
        <item>
            <shape>
                <gradient
                    android:startColor="#ef4444"
                    android:endColor="#992f2f"
                    android:angle="270" />
                <stroke
                    android:width="1dp"
                    android:color="#992f2f" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    </selector>




    برای سبز:


    کد:
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" >
            <shape>
                <solid
                    android:color="#70c656" />
                <stroke
                    android:width="1dp"
                    android:color="#53933f" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
        <item>
            <shape>
                <gradient
                    android:startColor="#70c656"
                    android:endColor="#53933f"
                    android:angle="270" />
                <stroke
                    android:width="1dp"
                    android:color="#53933f" />
                <corners
                    android:radius="4dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    </selector>



    برای زرد:


    کد:
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" >
            <shape>
                <solid
                    android:color="#f3ae1b" />
                <stroke
                    android:width="1dp"
                    android:color="#bb6008" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
        <item>
            <shape>
                <gradient
                    android:startColor="#f3ae1b"
                    android:endColor="#bb6008"
                    android:angle="270" />
                <stroke
                    android:width="1dp"
                    android:color="#bb6008" />
                <corners
                    android:radius="4dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    </selector>



    و برای مشکی:


    کد:
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" >
            <shape>
                <solid
                    android:color="#343434" />
                <stroke
                    android:width="1dp"
                    android:color="#171717" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
        <item>
            <shape>
                <gradient
                    android:startColor="#343434"
                    android:endColor="#171717"
                    android:angle="270" />
                <stroke
                    android:width="1dp"
                    android:color="#171717" />
                <corners
                    android:radius="4dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    </selector>




    خب این هم از فایل ها.
    حالا فرض کنید ما دکمه ای رو صورت زیر در فایل XML خودمون تعریف کردیم:


    کد:
     <Button android:id="@+id/btn2"  android:layout_width="244dp" android:layout_height="50dp" android:layout_below="@+id/tv1" android:layout_centerHorizontal="true" android:scrollHorizontally="false" android:text="@string/btnsefidtexet" android:textSize="20sp" android:textStyle="bold" > </Button>
    برای اینکه افکت هایی که نوشتیم روی این دکمه اعمال بشه کد زیر رو بهش اضافه میکنیم:
    کد:
    android:background="@drawable/blue_btn"


    و به همین سادگی افکت ها روی باتن یا هر بخش دیگه از XML ما اعمال خواهد شد.
    کار دیگه ای که میتونیم انجام بدیم در ادامه:
    فرض کنید می خواهیم تمام دکمه های ما افکت های زیر رو داشته باشن، برای این کار کد زیر رو در strings.xml اضافه میکنیم:


    کد:
    <style name="ButtonText">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textColor">#ffffff</item>
        <item name="android:gravity">center</item>
        <item name="android:layout_margin">3dp</item>
        <item name="android:textSize">30dp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:shadowColor">#000000</item>
        <item name="android:shadowDx">1</item>
        <item name="android:shadowDy">1</item>
        <item name="android:shadowRadius">2</item>
    </style>






    حال برای اعمال این style روی عناصر خودمان کد زیر را به آن ها اضافه میکنیم:


    کد:
    style="@style/ButtonText"


    امیدوارم که این آموزش برای شما مفید واقع شود.






    ==--==--==--==--==--==

    ==--==--==--==--==--==

  8. 9 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  9. #5
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    و اما بریم سراغ یه راه حل خیلی ساده اسان فقط با بلد بودن چهار کلام انگلیسی

    گوگل مدتیه که یه سرویس خیلی خیلی جالب و جذاب راه انداخته که به ساده ترین (و باورنکردنی ترین) شکل ممکن میتونید برای آندروی اَپ بسازید!

    اینجا رو ببینید : http://appinventor.googlelabs.com

    http://dl.google.com/dl/appinventor/...ller_v_1_2.exe
    اینم پیوندش فقط با چی پی ان مشه دریافت کرد .با این برنامه متوانید یک سری برنامه بسازید خودش داخلش تعریف شده است.جالبه با بکگراند ورنگ و صدا گزاری ونوع ایکون همون لحظه هر کاری انجام میدهید در گوشی به نمایش در میاید که خیلی جالبه.
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  10. 9 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  11. #6
    داره خودمونی میشه
    تاریخ عضویت
    ۱۳۹۱-آذر-۰۶
    جنسيت
    خواهر
    نوشته ها
    850
    امتیاز : 19,239
    سطح : 87
    Points: 19,239, Level: 87
    Level completed: 78%, Points required for next Level: 111
    Overall activity: 0%
    افتخارات:
    SocialRecommendation Second Class1 year registered10000 Experience PointsCreated Album pictures
    تشکر کردن : 5,066
    تشکر شده 3,517 در 720 پست
    مخالفت
    0
    مخالفت شده 2 در 1 پست

    پیش فرض

    سلام
    ممنونم از اینکه اموزش اندروید رو شروع کردید
    من با نرم افزار ایکلیپس کار میکنم وبرای یکی از برنامه هام باید توی گالری شبیه سازم حتما یه عکس داشته باشم ازداخل ایکلیپس اسن کار رو انجام میدم اما باید شبیه سازم ریست بشه تا این کار اعمال بشه لطفا بگید چطور اونو ریست کنم
    ویرایش توسط لهوف : سه شنبه ۰۳ بهمن ۹۱ در ساعت ۲۳:۲۵
    زمانه عجیبی است!
    برخی مردمان امام گذشته را عاشقند،
    نه امام حاضر را.
    میدانی چرا؟
    امام گذشته را هرگونه بخواهند تفسیر میکنند،
    اما امام حاضر را باید فرمان برند!!!!
    «شهید آوینی»





  12. 2 کاربر از پست مفید لهوف تشکر کرده اند .


  13. #7
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    دقیقا متوجه منظور شما نمیشم
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  14. 2 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  15. #8
    داره خودمونی میشه
    تاریخ عضویت
    ۱۳۹۱-آذر-۰۶
    جنسيت
    خواهر
    نوشته ها
    850
    امتیاز : 19,239
    سطح : 87
    Points: 19,239, Level: 87
    Level completed: 78%, Points required for next Level: 111
    Overall activity: 0%
    افتخارات:
    SocialRecommendation Second Class1 year registered10000 Experience PointsCreated Album pictures
    تشکر کردن : 5,066
    تشکر شده 3,517 در 720 پست
    مخالفت
    0
    مخالفت شده 2 در 1 پست

    پیش فرض

    برای اضافه کردن عکس به گالری شبیه ساز:
    به قسمت DDMS ایکلیپس رفتم بعد به FileExplorer رفتم (که یکی از ابزارهای تو نوار بالاییه و اجازه میده که فایل های داخل دستگاه رو ببینیم)بعد به قسمت sdcard عکس مورد نظرم رو گذاشتم (برای گذاشتن عکس از دکمه ای که بالای صفحه و سمت راسته که اسمش push a file onto the devise هس)
    بعد از اینکه فایل رو توی دستگاه گذاشتم باید اون رو ریست کنم ولی نمیدونم چطوری
    زمانه عجیبی است!
    برخی مردمان امام گذشته را عاشقند،
    نه امام حاضر را.
    میدانی چرا؟
    امام گذشته را هرگونه بخواهند تفسیر میکنند،
    اما امام حاضر را باید فرمان برند!!!!
    «شهید آوینی»





  16. 2 کاربر از پست مفید لهوف تشکر کرده اند .


  17. #9
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    منظور شما sdk هست (شبیه ساز:)
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  18. 2 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  19. #10
    داره خودمونی میشه
    تاریخ عضویت
    ۱۳۹۱-آذر-۰۶
    جنسيت
    خواهر
    نوشته ها
    850
    امتیاز : 19,239
    سطح : 87
    Points: 19,239, Level: 87
    Level completed: 78%, Points required for next Level: 111
    Overall activity: 0%
    افتخارات:
    SocialRecommendation Second Class1 year registered10000 Experience PointsCreated Album pictures
    تشکر کردن : 5,066
    تشکر شده 3,517 در 720 پست
    مخالفت
    0
    مخالفت شده 2 در 1 پست

    پیش فرض

    image.jpgاینم عکسش
    زمانه عجیبی است!
    برخی مردمان امام گذشته را عاشقند،
    نه امام حاضر را.
    میدانی چرا؟
    امام گذشته را هرگونه بخواهند تفسیر میکنند،
    اما امام حاضر را باید فرمان برند!!!!
    «شهید آوینی»





  20. 2 کاربر از پست مفید لهوف تشکر کرده اند .


  21. #11
    داره خودمونی میشه
    تاریخ عضویت
    ۱۳۹۱-آذر-۰۶
    جنسيت
    خواهر
    نوشته ها
    850
    امتیاز : 19,239
    سطح : 87
    Points: 19,239, Level: 87
    Level completed: 78%, Points required for next Level: 111
    Overall activity: 0%
    افتخارات:
    SocialRecommendation Second Class1 year registered10000 Experience PointsCreated Album pictures
    تشکر کردن : 5,066
    تشکر شده 3,517 در 720 پست
    مخالفت
    0
    مخالفت شده 2 در 1 پست

    پیش فرض

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





  22. 2 کاربر از پست مفید لهوف تشکر کرده اند .


  23. #12
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    این عکس که مربوط به سایت androidcode.ir هست

    ایا شما
    adt در ایکلیپس را نصب کردید ..
    ویرایش توسط عرض از مبدا : پنجشنبه ۰۹ آذر ۹۱ در ساعت ۱۸:۴۷
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  24. 3 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  25. #13
    دیگه صاحب خونه هستن
    تاریخ عضویت
    ۱۳۴۸-دی-۱۱
    محل سکونت
    شیرازووو ، فلکه گازوو ، کوچه درازووو ، در بازووو
    جنسيت
    برادر
    سن
    -1993
    نوشته ها
    11,580
    امتیاز : 123,049
    سطح : 100
    Points: 123,049, Level: 100
    Level completed: 0%, Points required for next Level: 0
    Overall activity: 99.0%
    افتخارات:
    SocialYour first GroupRecommendation First ClassVeteranCreated Album pictures
    تشکر کردن : 35,154
    تشکر شده 42,004 در 9,343 پست
    نوشته های وبلاگ
    1
    مخالفت
    206
    مخالفت شده 166 در 132 پست

    پیش فرض

    یاد شهید مسعود رضایی افتادم که تو تالار قدیمی همینطوری آموزش فلش رو گذاشته بودن
    اجرت با خود شهید
    ایول
    مختار: خدایا بهشتت را نمیخواهم ، فقط آنقدر به من فرصت بده تا دستم دوباره به قبضه شمشیرم برسد ؛
    آنوقت اگر خواستی به دوزخم بفرستی ... بفرست .





  26. 3 کاربر از پست مفید سائل الزهرا تشکر کرده اند .


  27. #14
    داره خودمونی میشه
    تاریخ عضویت
    ۱۳۹۱-آذر-۰۶
    جنسيت
    خواهر
    نوشته ها
    850
    امتیاز : 19,239
    سطح : 87
    Points: 19,239, Level: 87
    Level completed: 78%, Points required for next Level: 111
    Overall activity: 0%
    افتخارات:
    SocialRecommendation Second Class1 year registered10000 Experience PointsCreated Album pictures
    تشکر کردن : 5,066
    تشکر شده 3,517 در 720 پست
    مخالفت
    0
    مخالفت شده 2 در 1 پست

    پیش فرض

    بله مراحل نصبم کامله adt رو هم نصب کردم
    زمانه عجیبی است!
    برخی مردمان امام گذشته را عاشقند،
    نه امام حاضر را.
    میدانی چرا؟
    امام گذشته را هرگونه بخواهند تفسیر میکنند،
    اما امام حاضر را باید فرمان برند!!!!
    «شهید آوینی»





  28. 2 کاربر از پست مفید لهوف تشکر کرده اند .


  29. #15
    عضو قدیمی
    تاریخ عضویت
    ۱۳۹۱-مرداد-۰۴
    محل سکونت
    شیراز
    جنسيت
    برادر
    نوشته ها
    1,553
    امتیاز : 14,121
    سطح : 77
    Points: 14,121, Level: 77
    Level completed: 18%, Points required for next Level: 329
    Overall activity: 0%
    افتخارات:
    Recommendation Second Class1 year registeredTagger Second Class10000 Experience Points
    تشکر کردن : 1,427
    تشکر شده 2,639 در 1,016 پست
    مخالفت
    0
    مخالفت شده 0 در 0 پست

    پیش فرض

    عکسی که پیدا نیس

    آخرين منزل ، روياروى شماست و مرگ پشت سرتان . و با آواز خود شما را به پيش * مى راند. سبكبار شويد تا برسيد. زيرا آنان كه از پيش رفته اند چشم به راه شما واپس * ماندگان اند.



  30. کاربر روبرو از پست مفید دوست خدا تشکر کرده است .


  31. #16
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    خوب یه راه بهتر

    نصب و راه اندازی:

    » ابتدا با نصب JDK از شما سئوالی در مورد نصب JRE پرسیده می شود که تأیید کتید، بنابراین JRE و سپس JDK را نصب خواهید کرد.

    » یک دایرکتوری در مسیر کوتاهی مانند c:\android یا d:\android بسازید. این مسیر از این پس در کل آموزش بنام DEV_ROOT شناخته خواهد شد. یعنی هر گاه داشتیم DEV_ROOT یعنی مسیر کوتاه انتخابی در این بخش. توجه کنید که نام دایرکتوری را تماما با حروف کوچک بنویسید و برای جدا کردن کلمات در نام دایرکتوری از _ استفاده کنید. بطور مثال c:\android_development . مسیر پیشنهادی c:\android خواهد بود.

    » یک دایرکتوری بنام sdk در دایرکتوری DEV_ROOT بسیازید و فایل android.rar را در آن کپی کنید و آنرا با استفاده از Winrar با گزینه Extract Here باز کنید.

    » یک دایرکتوری بنام workspace در دایرکتوری DEV_ROOT بسازید و metadata.rar را در آن کپی کنید و با استفاده از گزینه Extract Here نرم افزار Winrar آن را باز کنید

    » فایل eclipse.rar را در دایرکتوری DEV_ROOT کپی کنید و با استفاده از Extract Here نرم افزار Winrar آنرا باز کنید.

    در صورتیکه فرآیند Extract کردن را بدرستی رعایت کرده باشید باید ساختار دایرکتوری بشکل زیر داشته باشید:




    » پس از باز شدن eclipse در دایرکتوری آن فایل eclipse.exe را اجرا کنید، پس از مدتی از شما مسیری می پرسد، در اینصورت مسیر DEV_ROOT\workspace را وارد کنید و تیک پایین پنجره را بزنید و OK کنید. توجه کنید که بجای DEV_ROOT مسیر اصلی مانند c:\android را جایگزین کنید. اگر این پنجره نیامد پس از باز شدن eclipse وارد منوی Window->Preferences شوید و از پنل چپ General->Startup and Shutdown->Workspaces را انتخاب کنید و تمام گزینه های داخل پنجره باز شده را Remove کنید. تیک اول را بزنید. Eclipse را ببندید و دوباره اجرا کنید. این بار حتما از شما مسیر را می پرسد.

    » توجه : هیچ وقت بیشتر از یک eclipse باز نکنید. اگر چند eclipse باز شده دارید ابتدا همه را ببندید و دوباره یک eclipse باز کنید.

    » پس از باز شدن eclipse وارد منوی Window->Preferences شوید و از پنل سمت چپ Android را انتخاب کنید. در قسمت SDK Location مسیر DEV_ROOT\sdk\android را انتخاب نمایید و OK بزنید.

    » بهتر از یکبار ویندوز را restart کنید که مسیر JDK در Environment Variables ثبت شود.

    » تمام، محیط برنامه نویسی شما آماده است.
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  32. 4 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  33. #17
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    آموزش:

    در قسمت اول محیط برنامه نویسی ما آماده شد. در این قسمت قصد داریم اولین پروژه اندروید را تولید کنیم. طبق عرف این پروژه همان Hello World! است.
    » وارد محیط eclipse شوید.
    » با استفاده از Ctrl+N یا منوی File->New->Other پنجره ساخت فایل یا پروژه جدید باز می شود.
    » مقابل Wizards: تایپ کنید Android تا گزینه های قابل ساخت مرتبط با اندروید ..... شوند.
    » Android Project را از لیست انتخاب کنید و Next
    » نام پروژه که لاتین است را در Project Name بنویسید. در این آموزش می نویسیم Test1 و بزنید Next
    » از لیست گزینه ها Android 2.1 را انتخاب و بزنید Next
    » در قسمت Package Name بنویسید com.uncocoder.course.test1 و بزنید Finish

    خوب اولین پروژه ساخته شد. اما چگونه آنرا اجرا کنیم. ابتدا این پروژه را با استفاده از Emulator * اجرا خواهیم کرد. اجرای آن بر روی Device واقعی در صورتیکه درایور های Device نصب باشد بسیار ساده تر از اجرا بر روی Emulator خواهد بود. برای اجرای پروژه بر روی Emulator ابتدا نیاز به ساخت یک Virtual Device داریم بنابراین به طریقه زیر عمل می کنیم:
    » از منوی Window->AVD Manager را انتخاب کنید
    » کلید New را بزنید
    » پنجره باز شده را به شکل زیر تصحیح کنید:



    » دکمه Create AVD را بزنید.
    » Device1 را از لیست انتخاب کنید
    » دکمه Start را بزنید
    » پنجره باز شده را به شکل زیر تنظیم کنید



    » دکمه Launch را بزنید

    » منتظر باشید تا Emulator به طور کامل بالا بیاید و بتوانید با استفاده از Mouse آنرا Slide To Unlock کنید. این فرآیند ممکن است کمی طول بکشد، اما برای بارهای بعد خیلی سریع Emulator بالا خواهد آمد.

    » بدون اینکه Emulator را ببندید پنجره AVD Manager در Eclipse را ببندید. بنابراین Emulator از Windows Taskbar * قابل انتخاب خواهد بود.

    » در محیط Eclipse در Package Explorer بر روی Test1 که دارای پوشه آبی رنگی است RightClick کنید و Run As را بزنید. از این منو Android Application را انتخاب کنید. بار های بعد برای اجرای پروژه کافیست از کلید F5 استفاده کنید.

    » Emulator را از Windows Taskbar انتخاب کنید تا بر روی Eclipse بیاید و می توانید برنامه را ببینید که بصورت زیر است در آن ببینید.



    » مادامی که مشغول برنامه نویسی هستید نیازی به بستن Emulator وجود ندارد. فقط با استفاده از کلید که از این پس Back نامید می شود برنامه را ببندید.

    » توجه داشته باشید در صورتیکه برنامه بسته نشده باشد و یا تغییری در آن ایجاد نشده باشد، اجرای مجدد آن با استفاده از کلید F5 یا Run As نتیجه ای در بر نخواهد داشت.

    به اینکه این پروژه چگونه کار می کند در آموزشهای بعد پرداخته می شود اما در این قسمت قصد دارم که ساختار دایرکتوری موجود در پروژه را توضیح دهم. این توضیحات در مراحل اولیه و تا چند آموزش اول گنگ هستند اما به تدریج در ذهن شما شفاف خواهند شد. لذا تأکید زیادی بر روی آن نداشته باشید و فقط با دقت مطالب را مرور کنید.

    ساختار دایرکتوری ساده ترین پروژه اندروید:


    پروژه حاضر یعنی Test1 شامل چندین فایل و دایرکتوری است که مروری جزئی بر آنها داریم:
    دایرکتوری src که سورس Class File های Java * می باشند، از آنجایی که برای اندروید از زبان جاوا استفاده کنیم پس کل Source Code ما در این دایرکتوری قرار خواهد گرفت.

    » در این دایرکتوری چیزی با نام com.uncocoder.course.test1 است که در ابتدای ساخت پروژه آنرا بصورت دستی وارد کردیم. این همان جایی است که اولین فرم نمایشی ما یعنی Test1Activity.java در آن ذخیره می شود. اگر با دایرکتوری DEV_ROOT/workspace/test1/src مراجعه کنید می بینید که هر کدام از Token * های . یک دایرکتوری هستند. یعنی فایل Test1Activity.java در دایرکتوری Test1 زیر شاخه course زیر شاخه uncocoder زیر شاخه com زیر شاخه src قرار دارد.

    » به این مسیر ( در اینجا یعنی com.uncocoder.course.test1 ) می گوییم package name * و در صورتیکه مسیری باشد که در ساخت پروژه آنرا تعریف کرده باشیم به آن می گوییم Application Package Name.

    » تمامی برنامه های اندروید با این نام منحصر بفرد از هم جدا می شوند تا تداخلی با یکدیگر نداشته باشند.

    » نام گذاری Package Name رسم و رسومی دارد که از این پیوند قابل مطالعه است و بطور خلاصه ابتدای آن مسیر سایت سازنده محصول است ( که بر عکس یادداشت می شود یعنی com.uncocoder ) و بعد از آن مسیری است که سازنده محصول برای دسته بندی محصولات خود به دلخواه تعیین می کند ( در این پروژه یعنی course.test1 ).

    » تغییر دستی فایلها، rename کردن مسیر ها از داخل windows و مشابه چنین عملیاتی مرسوم نیست و باعث خراب شدن سورس پروژه می شود. طریقه تغییر نام package در قسمتهای آینده آموزش داده خواهد شد.

    با دایرکتوری gen کاری نخواهیم داشت ولی خروجی دسته بندی resource * ها هستند که در آینده توضیح داده خواهد شد. محتویات این دایرکتوری خود به خود تولید شده و ما هیچگاه ، هیچ عملیاتی روی این دایرکتوری انجام نداده و نباید انجام دهیم.

    کتابخانه ( Library * ) مورد نیاز پروژه که بنام Android 2.1 قرار داده شده و به پروژه متصل شده و شامل SDK مورد نیاز برای توسعه این نسخه از اندروید است.

    دایرکتوری assets که در اختیار ماست و می توانیم تمامی فایلهای صوتی، فونت ، binary, xml, html, text و ... را به غیر از تصاویر در آن قرار دهیم. ولی در چندین جلسه اول به آن کاری نخواهیم داشت.

    دایرکتوری bin که خروجی Build * پروژه شما خواهد بود. در این دایرکتوری علاوه بر فایلهای IL شده Java فایلی با پسوند apk وجود دارد که همان فایل خروجی نرم افزار اندروید شماست و قابل نصب بر روی هر گوشی اندرویدی خواهد بود. بحث مفصلی در مورد apk ها وجود دارد که به یک جلسه جدا موکول می شود.

    دایرکتوری res که شامل تمامی تصاویر، فایلهای UI مورد استفاده ( که XML * هستند )، String List, Color List و ... خواهد بود. به عبارتی منابعی که در چگونگی اجرای برنامه اندروید نقش اساسی دارند و در لحظه Build Time اهمیت پیدا می کنند در این دایرکتوری قرار می گیرند. این دایرکتوری بسیار بسیار حساس بوده و در صورت اشتباهاتی که منجر از مطالعه نکردن صحیح منابع موجود در برنامه نویسی اندروید است به راحتی شما را دچار بحران می کند. بنابراین در صورتیکه از نحوه عملکرد فایلی و جایگاه صحیح آن در این دایرکتوری مطلع نیستید با مطالعه قبلی مبادرت به کپی آن در این دایرکتوری کنید.

    فایل AndroidManifest.xml که مهمترین فایل ساختاری یک پروژه اندروید است و نحوه عملکرد برنامه شما را کنترل خواهد کرد. بسیاری از Crash * های قابل تولید در یک پروژه اندروید می تواند ناشی از بی توجهی به این فایل باشد. چگونگی استفاده از این فایل در چندین جلسه به مرور توضیح داده خواهد شد.

    دو فایل دیگر نیازی به توضیح ندارند ولی بی اهمیت نیستند و آنها را پاک نکنید.


    توصیه ها:

    - در صورتیکه به کار به گوشی های اندروید مسلط نیستید، با استفاده از Emulator به آن مسلط شوید و مکان تنظیم های مختلف گوشی را یاد بگیرید.
    - Emulator بسیاری از امکانات گوشی ها را از قبیل چرخش گوشی، منو ها، دوربین عکاسی و ... را شبیه سازی می کند، برای آشنایی با کلید های Shortcut و قابلیتهای Emulator از اینترنت کمک بگیرید.
    - ستاره موجود در متن آموزش را بی اهمیت قلمداد نکنید. در مورد مطالبی که از آنها اطلاعاتی ندارید، مرور کلی مطلب Wiki کمک بزرگی به شما خواهد کرد.
    - برای آشنایی با محیط Eclipse گزینه های منو ها و تنظیمات را نگاه کنید و حدث بزنید که هر گزینه چه کاری می تواند انجام دهد. مسلماً تسلط بر همه گزینه ها فعلاً ممکن نیست.
    - در صورتیکه با XML آشنایی ندارید حتماً بسیار زیاد آنرا مطالعه کنید. با آن خیلی کار خواهیم داشت.
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  34. 5 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  35. #18
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    آموزش:

    در این قسمت قصد داریم که طریقه اتصال عناصر UI - User Interface * که در فایل XML تعریف می شوند را به کدهای جاوا یاد بگیریم. در اینصورت خواهیم توانست برای Button ها، EditBox ها، ImageView ها، ListView ها و ... برنامه بنویسیم.

    در مرحله اول یک Button و یک TextView بر روی فرم اولیه ( main.xml ) قرار می دهیم و برنامه می نویسیم که با کلیک کردن بر روی Button نوشته داخل TextView تغییر کند. لذا دستور العمل زیر را دنبال کنید:
    » با استفاده از آموزشهای قسمت دوم یک پروژه با پکیج com.uncocoder.course.lessons و نام پروژه AndroidCourse بسازید. این پروژه، پروژه ای خواهد بود که تا انتهای آموزشها با آن کار خواهیم کرد و آرشیوی از تمامی پروژه ها و کدهایی خواهد بود که در طول دوره آموزش دیده ایم.

    » از پنل Package Explorer وارد AndroidCourse/res/layout/main.xml شوید. پس از مدتی یک صفحه تیره حاوی UI یی که در پروژه قبل به عنوان خروجی مشاهده کردید خواهید دید. یعنی تصویر زیر:


    در تصویر بالا:
    َA- محیط طراحی گرافیکی رابط کاربر ( Visual UI Designer ) که همین صفحه نمایش داده شده می باشد، است. خروجی طراحی انجام شده در این صفحه با B که نمایش XML رابط گرافیکی طراحی شده توسط شمااست. بنابراین A و B یکی هستند با دو نمایش متفاوت. هر تغییری در محیط A باعث تغییر در XML خروجی در محیط B می شود و بالعکس. خیلی اوقات راحتتر است که از محیط A استفاده کنیم و خیلی اوقات دیگر هم استفاده از محیط B راه گشاست بنابراین به یک محیط تکیه و بسنده نکنید.

    B- نمایش UI طراحی شده در محیط A بصورت XML است و قابل ادیت می باشد.
    C- رابط گرافیکی نهایی که بر روی گوشی نمایش داده خواهد شد. نمایش آن در این قسمت شبیه سازی می شود.
    D- لیستی از UI Component * های در دسترس که با انتخاب و Drag آن می توانید به UI طراحی شده اضافه کنید.
    E- در شرایطی که اندازه مانیتور شما کوچک است ( Low Resolution ) ممکن است این Scroll دیده نشود و نتوانید لیست کاملی از UI Component ها را ببینید. با بزرگتر کردن کل محیط فوق و Resize کردن پنل سمت چپ، Scroll نمایان خواهد شد.

    F- مجموعه ای از تنظیمات جهت بررسی UI تولید شده در اندازهها مختلف گوشی های موبایل، ورژن های SDK متفاوت، Theme های متفاوت و ... . بنابراین می توانید UI خود را برای صحت عملکرد و نمایش، آزمایش کنید.

    G- دکمه هایی که با استفاده از آنها می توانید نمایش UI را بزرگتر و کوچکتر کنید ( برای راحتتر شدن طراحی و یا دقیقتر شدن در ابعاد و ...)

    » با انتخاب TextView اول که دارای محتوای Hello World, AndroidCourseActivity! است کلید Delete را روی کیبورد فشار دهید تا حذف شود.
    » از لیست Palette ها، یک Button و یک TextView داخل UI ( پنجره سیاه ) Drag کنید.
    » بر روی Button ، راست کلیک کنید و بزنید Edit ID و وارد کنید btn_action و OK بزنید، این نام اختیاری است اما توجه داشته باشید که حتماً باید تمامی حروف آن کوچک باشد و از _ برای جداکردن نام کلمات استفاده کنید. از Space و کاراکترهای نامتعارف جهت نامگذاری استفاده نکنید. با نوشتن btn_ در ابتدای نام دکمه ها به خوانا بودن نامگذاری کمک می کنیم.

    » بر روی TextView ، راست کلید کنید و بزنید Edit ID و وارد کنید txt_caption و OK بزنید. از این پس به این فرآیند می گوییم Set کردن ID.
    » حالا می توانید main.xml را ببندید.
    » وارد فایل AndroidCourse/src/com.uncocoder.course.lessons/AndroidCourseActivity.java شوید. محیط ویرایش سورس جاوا باز می شود. سورس را به گونه زیر تغییر دهید.

    ویرایش: نکته مهم: از این لحظه، هر گاه قرار هست چیزی رو تغییر بدیم به باقی فایل کاری نخواهیم داشت، نه سایر متدها را پاک می کنیم، نه package و import ها را پاک می کنیم، فقط متدهای موجود در کد را تغییر می دهیم. همینطور Line Number های کنار سورس کدها فقط برای توضیح خطوط است و مطمئناً می تواند با Line Number های دروس فایل شما متفاوت باشد.

    کد:
    01    public class AndroidCourseActivity extends Activity ..
    02    
    03        /** Called when the activity is first created. */
    04        @Override
    05        public void onCreate(Bundle savedInstanceState) ..
    06            super.onCreate(savedInstanceState);
    07            setContentView(R.layout.main);
    08    
    09            Button btn = (Button) findViewById(R.id.btn_action);
    10            final TextView text = (TextView) findViewById(R.id.txt_caption);
    11            btn.setOnClickListener(new OnClickListener() ..
    12    
    13                @Override
    14                public void onClick(View v) ..
    15                    text.setText("New String...");
    16                }
    17            });
    18        }
    19    }
    توجه داشته باشید در صورتیکه مربع های خط چین ظاهر شدند کد شما نیاز به ورود و شناسایی Package Name مناسب دارد لذا در این شرایط بر روی کلمه OnClickListener با موس کمی صبر کنید، بعد از ظاهر شدن لیست گزینه Import OnClickListener (Android.view.View را انتخاب کنید. با اینکار یک خط جدید به لیست import های بالای همین فایل با محتوای import android.view.View.OnClickListener اضافه می شود که از این پس شناسایی صحیح این کلاس صورت می گیرد.
    » با right click بر روی AndroidCourse و انتخاب Run As -> Android Application برنامه را اجرا کنید. دفعات بعد با زدن کلید F5 این عمل انجام می شود. در صورتیکه در نحوه اجرای Emulator و برنامه مشکل دارید، قسمت دوم آموزش را مطالعه کنید.


    توضیح طریقه کار خطوط برنامه:

    خط 7: به Activity می گوییم که فایل حاوی UI این پنجره در فایل main.xml قرار گرفته است.
    خط 9: دکمه ای که ID آنرا btn_action قرار دادیم را به یک اشاره گر ( Pointer * ) در جاوا از جنس Button متصل می کنیم.
    خط 10: متنی را که ID آنرا txt_caption قرار داریم را به یک اشاره گر در جاوا از جنس TextView متصل می کنیم. کلمه final فعلاً مهم نیست که چه کار می کند اما استفاده از آن در این نوع کد نویسی ضروری است.
    حط 11: یک دستور العمل جدید برای پاسخ گویی به OnClick روی دکمه تعریف می کنیم. این دستور العمل درون onClick قرار می گیرد. لذا با کلیک شدن بر روی دکمه اجرا خواهد شد.
    خط 15: دستور العمل اجرایی با کلیک بر روی دکمه است که می گوید محتوای TextView قرار داده شده در UI را به جمله New String تغییر بده.

    خطوطی که توضیحی برای آنها ندادم را به عنوان یک کلیشه ( فعلاً ) در نظر بگیرید. با پیشرفت آموزشها و قسمتهای آموزش شیء گرایی این خطوط برای شما گویا خواهند شد اما الان دانستن علت نوشتاری آن گیج کننده و غیر ضروری است. کافیست این را بدانید که برای تعیین دستور العمل Click روی دکمه مورد نظر به چه شکل آنرا بنویسیم.
    حالا برای تمیز تر شدن قطعه کد سورس را به شکل زیر تغییر دهید. این دو نوع نوشتار مانند یکدیگر عمل می کنند اما از نظر برنامه نویسی کد زیر بهتر است:

    کد:
    01    public class AndroidCourseActivity extends Activity ..
    02    
    03        private Button   btn  = null;
    04        private TextView text = null;
    05    
    06    
    07    
    08        /** Called when the activity is first created. */
    09        @Override
    10        public void onCreate(Bundle savedInstanceState) ..
    11            super.onCreate(savedInstanceState);
    12            setContentView(R.layout.main);
    13    
    14            initializeUi();
    15        }
    16    
    17    
    18    
    19        private void initializeUi() ..
    20            btn = (Button) findViewById(R.id.btn_action);
    21            text = (TextView) findViewById(R.id.txt_caption);
    22    
    23            btn.setOnClickListener(new OnClickListener() ..
    24    
    25                @Override
    26                public void onClick(View v) ..
    27                    text.setText("New String...");
    28                }
    29            });
    30        }
    31    }
    خط 3 و 4: اشاره گرها تعریف و با مقدار اولیه null مقدار دهی می کنیم.
    خط 14: به برنامه می گوییم متدی ( method * ) با نام initializeUi را که در همین کلاس تعریف شده است را اجرا کند.
    خط 19: شروع به تعریف متد initializeUi می کنیم
    خط 20: به اشاره گر تعریف شده با نام btn در همین کلاس مقداری ارجاع می دهیم.
    خط 21: به اشاره گر تعریف شده با نام text در همین کلاس مقداری ارجاع می دهیم.
    باقی خطوط: مانند گذشته است.


    خوب این قسمت از آموزش هم به پایان رسید.

    سورس برنامه و ورود پروژه جدید:

    جهت دریافت سورس این پروژه می توانید از پیوند زیر استفاده کنید.
    http://31.7.56.44/fileshub/source/AndroidCourse_v3.zip

    جهت ورود یک پروژه از پیش تعریف شده مانند پروژه بالا در Eclipse به طریقه زیر عمل کنید:
    » ابتدا باید مطمئن باشید که در Eclipse پروژه های همنام وارد نشوند بنابراین می توانید نام پروژه خود را تغییر دهید و آنرا به مثلاً با MyAndroidCourse تغییر دهید. به این منظور بر روی AndroidCourse راست کلیک کنید و انتخاب کنید Refactor->Rename و بنویسید MyAndroidCourse و تیک هم فعال باشد. سپس OK کنید. لذا پروژه شما تغییر نام پیدا می کند.

    » منوی File->Import را بزنید و Existing Projects into Workspace را انتخاب کنید
    » فایلی را که دریافت کرده اید در مسیر DEV_ROOT\download کپی کنید و آنرا با Extract To AndroidCourse در همین دایرکتوری Extract کنید. اگر نمی دانید DEV_ROOT چیست پس آموزشهای گذشته را به درستی مطالعه نکرده اید.

    » مسیر DEV_ROOT\download را در قسمت Select root directory وارد کنید و با زدن Refresh پروژه های موجود در این مسیر را خواهید دید.
    » پروژه مورد نظر را انتخاب و Finish بزنید.
    » برای اجرای پروژه روی پروژه Right Click کنید و گزینه Run As->Android Application را انتخاب کنید.
    » در صورتیکه قبلاً پروژه AndroidCourse دریافت شده در Eclipse وارد شده بود می توانید با انتخاب آن و زدن کلید Delete روی کیبورد آنرا از این لیست حذف کنید. با زدن تیک موجود در صفحه به نام Delete project content on disk فایلهای موجود در Hard Disk هم پاک می شوند و بدون زدن این انتخاب فایلها باقی خواهند ماند ولی پروژه از لیست پروژه ها حذف خواهد شد. اینجا انتخاب با خودتان است که تیک بزنید یا نزنید.

    با توجه به اینکه شما پروژه خود را احتمالاً Rename خواهید کرد از این پس منظور از پروژه AndroidCourse همان پروژه ایست که شما در حال توسعه آن هستید با اینکه ممکن است آنرا به MyAndroidCourse تغییر نام داده باشید. پروژه های ارسال شده بصورت فایل، صرفاً جهت مرور شما هستند و آنها را تغییر ندهید. پس منظور از AndroidCourse پروژه ای است که شما توسعه می دهید.

    توصیه ها:

    - اگر با مفاهیم شیء گرایی ( Object Oriented * ) آشنایی لازم را ندارید بهتر است کتابی در مورد java تهیه و مطالعه کنید، با اینکه در این آموزشها با آن خواهیم پرداخت، اما مطالعه شما بهتر است.
    - با استفاده از چند خط آموزش داده شده و کمی ابتکار عمل می توانید خیلی چیزها را آزمایش کنید و خودتان بسیازی از مفاهیم را دریابید. بنابراین زمینه وقت گذاشتن بر روی همین چند خط کد بسیار آماده است.
    - اگر سرعتتان در تایپ و کار با ادیتور کم است، بسیار تمرین کنید. فاصله زمان تصمیم گرفتن به تغییر یا نوشتن یک قطعه کد تا اجرا کردن آن باید بسیار کوتاه باشد. یعنی چنانچه تصمیم به تغییر کد گرفتید اصلاً نباید به چگونگی تایپ آن فکر کنید بلکه بصورت غیر ارادی باید بتوانید این کار را انجام دهید. لذا در صورت نیاز بسیار تمرین کنید و یک قطعه کد را بارها و بارها بنویسید و ویرایش کنید.
    - از سایر کنترلهای موجود در Palette کنترل ها استفاده کنید و ببنید که چه امکاناتی می توانیم در UI داشته باشیم.
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  36. 5 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  37. #19
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    فکر کنم ایراد شمابا sdk این باشد که sdk فقط خواندی است به عبارتی read-only
    قابلیت جا بجایی ندارید ...
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  38. 3 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  39. #20
    داره خودمونی میشه
    تاریخ عضویت
    ۱۳۹۱-آذر-۰۶
    جنسيت
    خواهر
    نوشته ها
    850
    امتیاز : 19,239
    سطح : 87
    Points: 19,239, Level: 87
    Level completed: 78%, Points required for next Level: 111
    Overall activity: 0%
    افتخارات:
    SocialRecommendation Second Class1 year registered10000 Experience PointsCreated Album pictures
    تشکر کردن : 5,066
    تشکر شده 3,517 در 720 پست
    مخالفت
    0
    مخالفت شده 2 در 1 پست

    پیش فرض

    الان باید چیکار کنم .من نیاز به یه عکس توی گالری دارم تا بتونم برناممو بنویسم
    راستی قبلاjdk رو نصب کردم برای نصب jreباید چیکار کنم
    زمانه عجیبی است!
    برخی مردمان امام گذشته را عاشقند،
    نه امام حاضر را.
    میدانی چرا؟
    امام گذشته را هرگونه بخواهند تفسیر میکنند،
    اما امام حاضر را باید فرمان برند!!!!
    «شهید آوینی»





  40. 2 کاربر از پست مفید لهوف تشکر کرده اند .


  41. #21
    داره خودمونی میشه
    تاریخ عضویت
    ۱۳۹۱-آذر-۰۶
    جنسيت
    خواهر
    نوشته ها
    850
    امتیاز : 19,239
    سطح : 87
    Points: 19,239, Level: 87
    Level completed: 78%, Points required for next Level: 111
    Overall activity: 0%
    افتخارات:
    SocialRecommendation Second Class1 year registered10000 Experience PointsCreated Album pictures
    تشکر کردن : 5,066
    تشکر شده 3,517 در 720 پست
    مخالفت
    0
    مخالفت شده 2 در 1 پست

    پیش فرض

    نوشته اصلی توسط عرض از مبدا نمایش پست اصلی
    این عکس که مربوط به سایت androidcode.ir هست

    ایا شما
    adt در ایکلیپس را نصب کردید ..
    من تمامی مراحل اموزشیم رو تاالان از طریق این سایت رفتم ولی متاسفانه الان به مشکل برخوردم
    زمانه عجیبی است!
    برخی مردمان امام گذشته را عاشقند،
    نه امام حاضر را.
    میدانی چرا؟
    امام گذشته را هرگونه بخواهند تفسیر میکنند،
    اما امام حاضر را باید فرمان برند!!!!
    «شهید آوینی»





  42. 3 کاربر از پست مفید لهوف تشکر کرده اند .


  43. #22
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    برنامه نویسی جاوا - مقدماتی 1

    آموزش:

    به دلیل اینکه قصد دارم این آموزشها برای کسانی که با برنامه نویسی هم هیچ آشنایی ندارند مفید واقع شود، این قسمت تکمیلی به دوره آموزشی اضافه شد. توجه داشته باشید اگر با برنامه نویسی آشنایی ندارد باید تلاشتان را چندین برابر افزایش دهید تا از پس سایر آموزشها برآیید.
    ویرایش: جهت آزمایش کد های زیر می توانید از مثال آموزشی قسمت قبل استفاده کنید و در Text موجود روی صفحه تغییری حاصل کنید. بطور مثال برای نمایش مقدار عددی aValue بر روی TextView موجود در صفحه برنامه قسمت OnClick را به شکل زیر تغییر دهید:

    کد:
     01    btn.setOnClickListener(new OnClickListener() ..
    02    
    03        @Override
    04        public void onClick(View v) ..
    05            text.setText("Value is " + aValue);
    06        }
    07    });
    برای استفاده آن در حلقه های گردشی هم می تواند ابتدا نتیجه خود را در یک String ذخیره کنید و سپس setText کنید، مانند مثال زیر:

    کد:
    01    btn.setOnClickListener(new OnClickListener() ..
    02    
    03        @Override
    04        public void onClick(View v) ..
    05    
    06            String output = "Values are: " + "\n";
    07            for (int i = 0; i < 10; i++) ..
    08                output = output + i + "\n";
    09            }
    10    
    11            output = output + "End For" + "\n";
    12    
    13            text.setText(output);
    14        }
    15    }
    توجه داشته باشید که استفاده از "n\" باعث نوشته شدن باقی متن در خط بعدی می شود. خروجی قطعه برنامه بالا پس از کلیک بر روی دکمه به شکل زیر است:

    متغیرها ( Variables * ) :
    متغیرها اشاره کننده هایی به قسمتی از حافظه کامپیوتر هستند که در آن مقداری نهفته است. بطور مثال وقتی می گوییم int value=2 یعنی متغیر value از جنس int ( اعداد صحیح بین -2,147,483,648 تا 2,147,483,647 ) است که نیاز به اشغال 32بیت یا همان 4 بایت از حافظه دارد. متغیر value فقط به آدرس اولین بایت از این حافظه مورد نیاز اشاره می کند. با استفاده از عملگر ( Operator * ) تساوی ( = ) می گوییم که مقدار این فضا ( که 4 بایت است ) 2 باشد. هر گاه متغیر value را بخوانیم، داریم مقدار حافظه متصل شده به این متغیر را می خوانیم. نیاز نیست خیلی نگران چگونگی عملکرد جاوا در خواندن و نوشتن متغیرها باشید اما خوب بود که بدانید معنی واقعی یک متغیر چیست.
    با توجه به توضیح فوق می توانیم متغیرهایی از جنس های مختلف ( محدود اعدادی که ساپورت می کند، نوع اعدادی که ساپورت می کند و ... ) داشته باشیم. نوع متغیرهایی که در جاوا قابل استفاده است که به آنها Primitives می گوییم در پیوند * موجود و قابل مطالعه است.
    برای تعریف کردم متغیرها با نوع های مختلف کد زیر می تواند به شما کمک کند.

    کد:
    01            byte    aValue = 1;
    02            short   bValue = 1;
    03            int     cValue = 1;
    04            long    dValue = 1;
    05            float   eValue = 2.0f;
    06            double  fValue = 2.0d;
    07            boolean gValue = false;
    08            char    hValue = 'A';


    عملگرها ( Operators * ) :
    با استفاده از عملگرها می توانید مقادیر یک متغیر را تغییر دهید. مثلاً عملگرهای زیر برای متغیرهایی از نوع عددی قابل استفاده است.

    کد:
    01            cValue++;               //cValue will be 2
    02            cValue--;               //cValue will be 1
    03            cValue += 3;            //cValue will be 4
    04            cValue -= 2;            //cValue will be 2
    05            cValue *= 3;            //cValue will be 6
    06            cValue = aValue + 1;    //cValue will be 7
    07            cValue = 5;             //cValue will be 5
    08            cValue = 6 * 2 + 3;     //cValue will be 15
    عبارت بعد از // صرفاً توضیحی است و هیچ اثری بر چگونگی اجرای برنامه ندارد، به آنها Comments می گوییم. همانطور که می بینید در انتهای هر خط از دستور یک ; درج شده است که معرف اتمام دستور است.
    جهت کسب اطلاعات بیشتر می توانید از پیوند * استفاده کنید

    عبارات کنترل شرط ( IF Statements * ):
    برای مقایسه دو مقدار یا متغیر و انجام عملکرد مناسب از دستور if استفاده می کنیم. به کدهای زیر توجه کنید:

    کد:
    01        int aValue = 2;
    02        int bValue = 3;
    03        
    04        if (aValue < bValue) ..
    05            // code statements here when aValue<bValue
    06        } else ..
    07            // code your statements when aValue>=bValue
    08        }
    09        
    10        boolean cValue = false;
    11        if (cValue) ..
    12            // code statements here when cValue=true
    13        } else ..
    14            // code your statements when cValue=false
    15        }
    16        
    17        if ( !cValue) ..
    18            // code statements here when cValue=false
    19        } else ..
    20            // code your statements when cValue=true
    21        }
    22        
    23        boolean dValue = aValue < bValue;
    24        if (dValue) ..
    25            // code statements here when aValue<bValue
    26        } else ..
    27            // code your statements when aValue>=bValue
    28        }
    29        
    30        float eValue = 4.0f;
    31        float fValue = 5.0f;
    32        if ((aValue < bValue) && (eValue < fValue)) ..
    33            // code statements here when aValue<bValue and eValue<fValue
    34        } else ..
    35            // code statements here when aValue>=bValue or eValue>=fValue
    36            // for more information see boolean algebra concepts
    37        }
    38        
    39        int gValue = 54;
    40        if (gValue > 100) ..
    41            // code statements here when gValue>100
    42        } else if (gValue > 50) ..
    43            // code statements here when gValue>50
    44        } else if (gValue > 0) ..
    45            // code statements here when gValue>0
    46        } else ..
    47            // code statements here when gValue<=0
    48        }
    جهت کسب اطلاعات بیشتر می توانید از پیوند * استفاده کنید

    حلقه ها ( For-Loops * ) :
    جهت مشخص شدن طریقه کار به کدها و Comment های زیر توجه کنید.

    کد:
    01        for (int i = 0; i < 3; i++) ..
    02            Log.i("LOG", "i is: " + i);
    03        }
    04        /* output:
    05         * i is: 0
    06         * i is: 1
    07         * i is: 2
    08         */
    09    
    10        for (int i = 3; i > 0; i--) ..
    11            Log.i("LOG", "i is: " + i);
    12        }
    13        /* output:
    14         * i is: 3
    15         * i is: 2
    16         * i is: 1
    17         */
    18    
    19        for (int i = 3; i > 0; i--) ..
    20            Log.i("LOG", "Statement");
    21        }
    22        /* output:
    23         * Statement
    24         * Statement
    25         * Statement
    26         */
    27    
    28        for (float num = 0.8f; num > 0.1f; num -= 0.3f) ..
    29            Log.i("LOG", "num is: " + num);
    30        }
    31        /* output:
    32         * num is: 0.8
    33         * num is: 0.5
    34         * num is: 0.2
    35         */
    36    
    37        for (int i = 1; i < 3; i++) ..
    38            for (int j = 1; j <= 4; j++) ..
    39                Log.i("LOG", i + "*" + j + "=" + (i * j));
    40            }
    41        }
    42        /* output:
    43         * 1*1=1
    44         * 1*2=2
    45         * 1*3=3
    46         * 1*4=3
    47         * 2*1=2
    48         * 2*2=4
    49         * 2*3=6
    50         * 2*4=8
    51         */
    جهت کسب اطلاعات بیشتر می توانید از پیوند * استفاده کنید

    حلقه ها ( While-Loops * ) :

    کد:
    01        int aValue = 0;
    02        while (aValue < 2) ..
    03            Log.i("LOG", "value is: " + aValue);
    04            aValue++;
    05        }
    06        /* output:
    07         * value is: 0
    08         * value is: 1
    09         */
    10    
    11        while (aValue < 2) ..
    12            Log.i("LOG", "value is: " + aValue);
    13            aValue++;
    14        }
    15        /* output:
    16         */
    17    
    18        aValue = 0; //reset aValue again
    19        while (aValue < 2) ..
    20            aValue++;
    21            Log.i("LOG", "value is: " + aValue);
    22        }
    23        /* output:
    24         * value is: 1
    25         * value is: 2
    26         */
    27    
    28        float bValue = 0.8f;
    29        while (bValue > 0.1f) ..
    30            Log.i("LOG", "value is: " + bValue);
    31            bValue -= 0.3f;
    32        }
    33        /* output:
    34         * value is: 0.8
    35         * value is: 0.5
    36         * value is: 0.2
    37         */
    38    
    39        int cValue = 2;
    40        do ..
    41            Log.i("LOG", "value is: " + cValue);
    42            cValue++;
    43        }
    44        while (cValue < -5); //! :)
    45        /* output:
    46         * value is: 2
    47         */
    48        }
    جهت کسب اطلاعات بیشتر می توانید از پیوند * استفاده کنید

    انتخاب ( Switch Statement * ) :

    کد:
    01        int aValue = 3;
    02        String aValueStr = "";
    03        
    04        switch (aValue) ..
    05            case 1:
    06                aValueStr = "One";
    07                break;
    08            case 2:
    09                aValueStr = "Two";
    10                break;
    11            case 3:
    12                aValueStr = "Three";
    13                break;
    14            case 4:
    15                aValueStr = "Four";
    16                break;
    17            default:
    18                aValueStr = "Unknown Number";
    19                break;
    20        }
    21        Log.i("LOG", "String representation of " + aValue + " is " + aValueStr);
    22        /* output:
    23         * String representation of 3 is Three
    24         */
    جهت کسب اطلاعات بیشتر می توانید از پیوند * استفاده کنید

    توابع ( Functions * ) :
    تابع مجموعه دستور العملی است که با دریافت ورودی ها، پردازشی انجام داده و خروجی مناسب ارائه می دهد. یک تابع ممکن است مقدار ورودی نداشته باشد، همینطور ممکن است خروجی نداشته باشد. تعداد ورودی ها هر عددی می تواند باشد اما خروجی همیشه یکی است. یک تابع مثل زیر تعریف می شود:

    کد:
    01         int doWork(float number1, boolean bool) ..
    02            Log.i("LOG", "Number is : " + number1);
    03            if (bool) ..
    04                Log.i("LOG", "Boolean value is true");
    05            } else ..
    06                Log.i("LOG", "Boolean value is false");
    07            }
    08    
    09            int result = (int) (number1 * 2);
    10            return result;
    11        }
    تابع بالا دارای ورودیهای number1 از جنس float و bool از جنس boolean می باشد. همینطور خروجی آن از جنس int می باشد. با استفاده از return می توان مقدار مورد نظر را از تابع خارج کرد. برای استفاده از تابع بالا از دستور زیر استفاده می کنیم.

    کد:
    01            int value = doWork(3.0f, false);
    02            Log.i("LOG", "Value is: " + value);
    همانطور که می بینید خروجی تابع را درون یک متغیر از جنس خروجی تابع ریختیم و آن را چاپ کردیم. با ورود مقدار 3.0 باید عدد 6 به عنوان خروجی تابع برگردانده شود.
    جهت کسب اطلاعات بیشتر می توانید از پیوند * استفاده کنید

    قالب یک فایل جاوا:
    یک فایل جاوا همیشه حاوی یک class یا یک interface است و نمی توان کدهای برنامه نویسی را همان جا نوشت بلکه باید داخل class ها نوشته شود. در ابتدای فایلهای جاوا نام package ـی که class در آن تعریف شده نوشته می شود. سپس لیستی از package ها و کلاسهای مورد نیاز این کلاس توسط import درخواست می شود. سپس کلاس تعریف شده و با تعریف فیلدها و متدها ( که در قسمت چهارم این آموزشها توضیح داده شده ) کلاس تکمیل می شود. به مثال زیر توجه کنید.

    کد:
    01    package com.uncocoder.course.lessons;
    02    
    03    import android.util.Log;
    04    
    05    public class CourseHelper ..
    06    
    07        private CourseHelper() ..
    08            call();
    09        }
    10    
    11    
    12    
    13        int doWork(float number1, boolean bool) ..
    14            Log.i("LOG", "Number is : " + number1);
    15            if (bool) ..
    16                Log.i("LOG", "Boolean value is true");
    17            } else ..
    18                Log.i("LOG", "Boolean value is false");
    19            }
    20    
    21            int result = (int) (number1 * 2);
    22            return result;
    23        }
    24    
    25    
    26    
    27        void call() ..
    28            int value = doWork(3.0f, false);
    29            Log.i("LOG", "Value is: " + value);
    30        }
    31    }

    توصیه ها:
    - در صورتیکه این مطالب برای شما تازگی داشت حتماً بسیار مطالعه کنید، چون شرط لازم برای ادامه آموزشها دانستن مقدمات برنامه نویسی خواهد بود.
    - ممکن است نتوانید کدهای بالا را اجرا کنید چون طریق اجرا فعلاً برای شما دشوار است اما در قسمتهای آینده هر جا که توانستید تمام کدهای بالا را آزمایش و با ابتکار عمل خود سعی در فهم دقیق دستورات نمایید.
    - اگر سرعتتان در تایپ و کار با ادیتور کم است، بسیار تمرین کنید. فاصله زمان تصمیم گرفتن به تغییر یا نوشتن یک قطعه کد تا اجرا کردن آن باید بسیار کوتاه باشد. یعنی چنانچه تصمیم به تغییر کد گرفتید اصلاً نباید به چگونگی تایپ آن فکر کنید بلکه بصورت غیر ارادی باید بتوانید این کار را انجام دهید. لذا در صورت نیاز بسیار تمرین کنید و یک قطعه کد را بارها و بارها بنویسید و ویرایش کنید.
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  44. 6 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  45. #23
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    شیء گرایی در جاوا - مقدماتی 1
    مقدمه بسیار مهم:

    در این قسمت قصد دارم، مبانی و تعاریف اولیه شیء گرایی OO - Object Oriented * را بیان کنم. چرا که در عصر حاضر برنامه نویسی بدون دانستن این مفاهیم کاری بیهوده و غیر اصولی است. از طرف دیگر توضیح دادن بسیاری از مفاهیم برنامه نویسی جاوا و بالتبع اندروید نیازمند دانستن این مفاهیم است. لذا این قسمت را با صبر و حوصله مطالعه و آنرا مهم بدانید.
    مفهوم شیء گرایی بر پایه ذات واقعی طبیعت که میراث بری است استوار است. اگر دنیای مادی را جامعه هدف مطالعات خود بگیریم، هر موجودی یک چیز است. شاید بهتر باشد از واژه چیز به Entity اشاره کنیم. در حالت کلی تر اگر هر Entity را یک Object بنامیم ( که در تئوری تفاوت هایی دارند ) آنگاه هر چیز یک Object است. لذا خواص کلی موجود در هر کلاس ( Class * ) از Object ها به سایر Object ی زیر مجموعه آن کلاس به ارث ( Inheritence * ) خواهد رسید.
    بطور مثال اگر اشیاء جامد را Object در نظر بگیریم آنگاه کلاس هر Object دارای خواصی نظیر ( اندازه، وزن، مکان، جنس و ... ) است. حال اگر دسته ای از زیر شاخه های این کلاس را مانند وسایل الکترونیکی ElectronicDevice در نظر بگیریم آنگاه غیر از خواص فوق دارای خواص دیگری نظیر ( ولتاژ ورودی، میزان مصرف انرژی و ... ) هستند. حال اگر دسته های Computer را زیر مجموعه ElectronicDevice در نظر بگیریم علاوه بر خواص کلاس Object شامل اندازه و ... ، شامل خواص کلاس ElectronicDevice نظیر ولتاژ ورودی و ... هم هست علاوه بر اینکه می تواند خود دارای خواص ویژه ای نظیر Cpu Model, Ram Size , ... باشد. به همین ترتیب هر کلاس دیگری می تواند خواص والدین ( superclass یا parent ) خود را به ارث ببرد و خواص منحصر به فرد خودش را هم دارا باشد. به این خواص قابل اندازه گیری Field می گوییم.
    علاوه بر Field ها که خواصی هستند قابل اندازه گیری مانند وزن و ...، می توان دستورالعمل هایی هم برای هر کلاس تعریف کرد که به آنها Method می گوییم. مثلاً در کلاس Object ، دستور العملی که به حرکت جسم منجر می شود را می توان یک Method دانست. چگونگی پیدایش، مردن، و ... هم می توانند Method های آن باشند. این دستورالعمل ها نیز مانند Field ها به کلاسهای زیرین ( subclass ) ها مثل ElectronicDevice قابل ارث بری هستند. اما ElectronicDevice هم برای خود دستورالعمل های منحصر به کلاسی دارد مثل چگونگی روشن شدن، خاموش شدن، کار کردن و ... . و همینطور در مثال Computer هم دستورالعمل های Boot شدن، Restart شدن و .... می توانند Method باشند. بنابراین یک Computer هم چون یک subclass از ElectronicDevice است، دستورالعمل های آن شامل روشن شدن، خاموش شدن، کار کردن را به ارث می برد و همینطور از Object یعنی چگونگی پیدایش، مردن، حرکت کردن و ...
    تا اینجای کار همه چیز خوب و شفاف به نظر می رسد اما وقتی چالش های بیشتری در عمل بوجود می آید تعاریف ساده فوق به تنهایی پاسخگوی مشکلات نخواهند بود. بطور مثال اگر دو دسته از کلاس ها مانند ElectronicDevice, اشیاء دارای درب را دو کلاس متفاوت subclass ـی از Object در نظر بگیریم، آنگاه یک Laptop زیرکلاسی از کدام خواهد بود؟ نه می شود اشیاء درب دار را زیر کلاس ElectronicDevice در نظر گرفت نه بالعکس. از طرفی Laptop هر دو خواص را دارد. در اینجاست که مفاهیم دیگری از شیء گرایی مانند Interface * ها به کمک ما می آیند. و به همین ترتیب پیدا کردن راه حل مناسب برای مشکلات پیچیده تر نیازمند دانش گسترده تر در این باره خواهد بود.
    به همین منظور ما ابتدا از تعاریف ساده شروع می کنیم و تا پایان آموزشها هر از چند گاهی که با چالش جدیتری مواجه می شویم، مفاهیم جدیدتری از شیء گرایی را بیان می کنیم تا مشکل ما را حل کند. پس از ساده ترین مفاهیم شروع خواهیم کرد.

    آموزش:
    در جاوا یک کلاس به نام Object وجود دارد که هر چیزی که تعریف می شود به طور پیش فرض subclass ـی از Object هست. برای تعرف یک کلاس جدید در Java به ترتیب زیر عمل می کنیم.
    » بر روی AndroidCourse/src/com.uncocoder.course.lessons راست کلیک کنید و بزنید New->Class. توجه داشته باشید از این به بعد به عمل فوق می گوییم که یک کلاس در com.uncocoder.course.lessons بسازید.
    » در پنجره باز شده فقط قسمت Name را پر کنید و بنویسید Vehicle ، همانطور که می بینید در قسمت Superclass نوشته است java.lang.Object . این همان کلاسی است که هر کلاس دیگر از آن میراث بری می کند. حال Finish بزنید. کدی که به شما نمایش داده می شود، همانطور که از محتویاتش پیداست، تعریف یک کلاس را در بردارد. خط اول آن نام پکیجی که کلاس در آن باید ساخته شود را تعیین می کند. توجه داشته باشید که نام فایل جاوای ساخته شده دقیقاً با نام کلاس یکی است و اگر قرار باشد نام کلاس عوض شود باید نام فایل هم عوض شود و بالعکس.
    » کد Vehicle را به شکل زیر Edit کنید:

    کد:
    01    package com.uncocoder.course.lessons;
    02    
    03    
    04    public class Vehicle ..
    05    
    06        public float mPositionX = 0;
    07        public float mPositionY = 0;
    08        public float mPositionZ = 0;
    09    
    10        public int   mWeight    = 0;
    11        public float mSpeed     = 0;
    12    
    13    
    14    
    15        public Vehicle(float speed, int weight) ..
    16            Log.i("LOG", "Vehicle Created with Speed: " + speed + ", Weight: " + weight);
    17            mSpeed = speed;
    18            mWeight = weight;
    19        }
    20    
    21    
    22    
    23        public void turnOn() ..
    24            Log.i("LOG", "Vehicle Turned On");
    25        }
    26    
    27    
    28    
    29        public void turnOff() ..
    30            Log.i("LOG", "Vehicle Turned Off");
    31        }
    32    
    33    
    34    
    35        public void startMove() ..
    36            Log.i("LOG", "Vehicle Starts Moving");
    37        }
    38    }
    » با تغییر کد دور Log مربع خط چینی بوجود می آید و ناشی از این است که Eclipse با اجازه شما می خواهد PackageName مناسب کلاس Log را وارد برنامه کند. با نگه داشتن موس روی آن، پنجره ای باز می شود که دارای گزینه Import Log ( android.util است. شما این گزینه را انتخاب کنید. در نتیجه عبارت import android.util.Log به بالای فایل اضافه می شود. از این پس در صورت دیدن این مربع خط چین برای Log کار فوق را انجام دهید و در آموزشها، دیگر به آن اشاره نخواهد شد.
    متغیرهای mPositionX, mPositionY, mPositionZ, mWeight, mSpeed همه همان Field هایی هستند که در بخش مقدمه از آن صحبت کردیم. و turnOn, turnOff, startMove متد هایی هستند که در بخش مقدمه در مورد آن صحبت کردیم. نام Vehicle که بالای turnOn نوشته شده است را Constructor * می گوییم. Constructor ها متدهای همنام با کلاس هستند که در پشت آنها عبارت void یا هر مقدار بازگشتی دیگر وجود نداشته باشد. هنگامیکه یک نمونه از کلاس ساخته می شود، این تابع در صورت وجود صدا زده می شود، اگر هم وجود نداشته باشد بازهم نمونه ساخته می شود اما بدون اینکه ما دخالتی در نحوه ساخت آن داشته باشیم.
    » عبارت Log در هم خط باعث می شود در log خروجی پروژه اندروید متن دلخواه با استفاده از تگ LOG چاپ شود. برای دیدن این خروجی می توانید به نحوه زیر عمل کنید:



    A: اگر این Tab در پنل پایین Eclipse موجود هست که روی آن کلیک کنید. اگر نه با رفتن به منوی Window->Open Perspective->Other گزینه All In One را انتخاب و OK بزنید.
    B: با زدن این گزینه و وارد کردن LOG در دو کادر اول و زدن OK یک Filter جدید برای log ها خواهید ساخت که فقط پیامهایی را نشان می دهد که با تگ LOG در برنامه نوشته شده ارسال شده اند.
    C: در صورتیکه برنامه به خطوط Log برسد، عبارات درج شده در پارامتر دوم این تابع، در این قسمت نمایش داده شود. اگر این اتفاق نیافتاد با رفتن به Devices در پنل سمت راست Eclipse و انتخاب emulator-5554 مشکل حل خواهد شد.
    ویرایش: توجه داشته باشید که در این مرحله کلاس تعریف شده است ولی هیچ نمونه ای از آن ساخته نشده، در این شرایط انتظار نخواهیم داشت که Log ها در خروجی ثبت شوند چرا که هم اکنون، متد و دستوری باعث نمی شود که این خطوط اجرا شوند. با تغییر زیر می توانید یک نمونه از کلاس را ایجاد کنید و سرانجام خروجی Log ها را مشاهده نمایید.
    کلاسها صرفاً یک الگو برای ساخت اشیاء هستند مثلاً می گوییم از جنس کامپیوتر، از جنس وسیله نقلیه و ... اما یک وسیله نقلیه یک نمونه ساخته شده از آن الگو ( یا همان کلاس است ). به این نمونه instance می گوییم. طریقه ساخت یک instance از کلاس Vehicle به طریقه زیر ممکن است. در پروژه قسمت سوم می خواهیم با کلیک شدن بر روی دکمه یک instance از Vehicle بسازیم. پس کاریهای زیر را انجام دهید:
    » با باز کردن فایل AndroidCourseActivity.java متد initializeUi را به شکل زیر تغییر دهید:

    کد:
    01    private void initializeUi() ..
    02        btn = (Button) findViewById(R.id.btn_action);
    03        text = (TextView) findViewById(R.id.txt_caption);
    04    
    05        btn.setOnClickListener(new OnClickListener() ..
    06    
    07            @Override
    08            public void onClick(View v) ..
    09                text.setText("New String...");
    10                Vehicle myVehicle = new Vehicle(200f, 800);
    11                myVehicle.turnOn();
    12                myVehicle.startMove();
    13                myVehicle.turnOff();
    14            }
    15        });
    16    }

    خط 10: یک نمونه از Vehicle را می سازیم. به علت اینکه Constructor این کلاس را بطوری تعریف کرده ایم که یک پارامتر float و یک int بگیرد، باید با همون الگوی ساخته شده آنرا صدا بزنیم، در غیر اینصورت Eclipse از کد ما خطا می گیرد.
    خط 11: به نمونه ساخته شده می گوییم که turnOn کند
    خط 12: به نمونه ساخته شده می گوییم که startMove کند
    خط 13: به نمونه ساخته شده می گوییم که turnOff کند
    توجه داشته باشید که با اجرای این برنامه و کلیک روی دکمه پنل LogCat لیست پیامهای ارسالی از سمت شما با استفاده از Log.i را نمایش می دهد.

    حالا برای اینکه خواصی که این کلاس از Object به ارث برده است را ببینید داخل یکی از متد ها کلید Ctrl+Space را بزنید. پنجره زیر نمایش داده می شود:


    متدها و فیلدهایی که دور آن کادر قرمز رنگ کشیده ام متعلق به کلاس Vehicle هستند که ما تعریف کرده ایم و اگر به آخرین کلمه در آن سطر توجه کنید این را در می یابید. اولین آیتم هم Constructor است که از Icon آن که شبیه یک C است مشخص می شود. باقی آیتم های این لیست از کلاس Object ارث بری شده اند که قابل استفاده در این کلاس هم می باشند. باز هم از کلمه آخر این لیست کلاس دربرگیرنده متد یا فیلد مشخص است. همینطور در این لیست نوع داده Field ها مثل float, int مشخص است. همینطور نوع برگشتی متد ها نیز مشخص است که ما برای همه متدها فعلاً void تعریف کرده ایم. به پنجره باز شده Code Completion یا Code Suggestion می گویند.

    مفهوم Visibility:
    » برای روشن شدن این مفهوم کد داخل Vehicle را به شکل زیر تغییر دهید.

    کد:
    01    package com.uncocoder.course.lessons;
    02    
    03    import android.util.Log;
    04    
    05    public class Vehicle ..
    06    
    07        public float mPositionX = 0;
    08        public float mPositionY = 0;
    09        public float mPositionZ = 0;
    10    
    11        public int   mWeight    = 0;
    12        public float mSpeed     = 0;
    13    
    14        private int  mType      = 0;
    15    
    16    
    17    
    18        public Vehicle(float speed, int weight) ..
    19            Log.i("LOG", "Vehicle Created with Speed: " + speed + ", Weight: " + weight);
    20            mSpeed = speed;
    21            mWeight = weight;
    22        }
    23    
    24    
    25    
    26        public void setType(int type) ..
    27            mType = type;
    28            Log.i("LOG", "Vehicle Type Set!");
    29        }
    30    
    31    
    32    
    33        public int getType() ..
    34            Log.i("LOG", "Vehicle Type is: " + mType);
    35            return mType;
    36        }
    37    
    38    
    39    
    40        public void turnOn() ..
    41            Log.i("LOG", "Vehicle Turned On");
    42        }
    43    
    44    
    45    
    46        public void turnOff() ..
    47            Log.i("LOG", "Vehicle Turned Off");
    48        }
    49    
    50    
    51    
    52        public void startMove() ..
    53            Log.i("LOG", "Vehicle Starts Moving");
    54        }
    55    }
    خط 14: یک فیلد private تعریف کرده ایم و با استفاده از دو متد به نامهای setType و getType می توانیم آنرا با مقدار داده شده Set کنیم یا مقدار آنرا بخوانیم. توجه کنید که خروجی getType از نوع int است و همان نوعی است که mType دارد. با استفاده از عبارت return می توانیم مقداری را از متد به عنوان خروجی به سمت صدا زننده متد برگردانیم. اصطلاحاً به استفاده از دو متد با شکل و شمایل setType و getType می گویند Encapsulate کردن mType . حالا این چیست و چه کمکی به ما میکند و به Visibility چه ارتباطی دارد را با تغییر کد زیر می توان بهتر درک کرد.

    » کد متد initializeUi کلاس AndroidCourseActivity را به شکل زیر تغییر دهید:

    کد:
    01    private void initializeUi() ..
    02            btn = (Button) findViewById(R.id.btn_action);
    03            text = (TextView) findViewById(R.id.txt_caption);
    04    
    05            btn.setOnClickListener(new OnClickListener() ..
    06    
    07                @Override
    08                public void onClick(View v) ..
    09                    text.setText("New String...");
    10                    Vehicle myVehicle = new Vehicle(200f, 800);
    11                    myVehicle.turnOn();
    12                    myVehicle.startMove();
    13                    myVehicle.turnOff();
    14    
    15                    myVehicle.mPositionX = 10;
    16    
    17                    /* it's wrong code */
    18                    //myVehicle.mType = 2;
    19    
    20                    myVehicle.setType(2);
    21                    Log.i("LOG", "My Vehicle Type is: " + myVehicle.getType());
    22                }
    23            });
    24        }
    همانطور که مشخص است در خط 15 توانستیم مقدار فیلد mPositionX را set کنیم اما همین کار را در خط 18 با فیلد mType نمی توانیم انجام دهیم و منجر به خطا از سمت Eclipse می شود. چرا که فیلد mPositionX یک فیلد Public ( عمومی ) است و از بیرون کلاس قابل خواندن و نوشتن است اما فیلد mType یک فیلد private ( خصوصی ) است و فقط از داخل خود آن کلاس قابل خواندن و نوشتن است. بنابراین با استفاده از متدهای setType, getType که هر دو public هستند می توانیم از بیرون کلاس مقدار mType را تحت تأثیر قرار دهیم. همانطور که در خطوط 20, 21 میبینید.
    به این نوع دیدن متغیرها ( که گاهی مخفی و گاهی عمومی ) است Visibility می گوییم. همین شرایط در مورد متد ها هم برقرار است. یعنی می توانیم متدهای private تعریف کنیم که فقط از داخل کلاس قابل صدا زدن هستند و از بیرون قابل دید نیستند. اگر دقت کرده باشید turnOn, startMove, turnOff و همینطور Constructor دارای public visibility هستند و به این خاطر بود که توانستیم از خارج از کلاس آنها را صدا بزنیم.
    حسن Visibility بسیار زیاد است شامل:
    - محدود کردن کد، بنابراین سایر برنامه نویسان چیزهایی را می توانند تغییر دهند که ما اجازه داده ایم.
    - حفظ کردن پایداری برنامه بدلیل محدود شدن برنامه نویس در شرایط گمراه کننده و انتخاب مسیر صحیح تر
    - چک کردن مقادیر ورودی و سپس واریز آنها در متغیر
    - انجام عملیات خاص در هنگام خواندن مقدار متغیر
    - خلوت شدن لیستی از متغیر ها و متد ها و بنابراین راحتتر پیدا کردن اطلاعات لازم در code completion
    - و بسیاری دیگر...

    آموزش شیء گرایی مسیر بسیار مهم و طولانی خواهد بود. بنابراین با همین تعاریف کار کنید تا در یک مثال به این سادگی مشکلی وجود نداشته باشد. و منتظر آموزشهای بعدی در مورد شیء گرایی باشید.

    سورس برنامه:
    می توانید سورس را از آدرس زیر دریافت کنید:
    http://31.7.56.44/fileshub/source/AndroidCourse_v4.zip



    توصیه ها:
    - اگر با مفاهیم شیء گرایی ( Object Oriented * ) آشنایی لازم را ندارید بهتر است کتابی در مورد java تهیه و مطالعه کنید، با اینکه در این آموزشها با آن خواهیم پرداخت، اما مطالعه شما بهتر است.
    - با همین مفاهیم اولیه در مورد شیء گرایی بسیار تمرین کنید و خود را در این مفاهیم قوی کنید تا در آموزشهای آتی بسیار راحتتر عمل کنید.
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  46. 6 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  47. #24
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    شیء گرایی در جاوا - مقدماتی 2
    مقدمه:

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

    آموزش:

    در گذشته های نه چندان دور برنامه نویسی به این شکل بود که فایلهای خالی تشکیل می دادیم و دستورات را پشت سرهم می نوشتیم و اجرا می شد. در زمان حاضر برنامه نویسی به این شکل مگر در اسکریپ ها ( Scripting Languages * ) کاملاً غیر مرسوم و بلا استفاده است، بلکه ما از کلاسها برای نوشتن کدهای خود استفاده می کنیم که خواص بسیاری دارند و محدودیتهایشان هم سودمند است.
    یکی از این تغییرات موجود در جاوا، ثابتها Constants * هستند، در هر کلاس مرتبط، میتوان const های خاص آن کلاس را تعریف کرد. در Java واژه const وجود ندارد. برای روشن شدن تعریف کدهای جلسه قبل را به شکل زیر تغییر دهید.
    » کد مربوط به کلاس Vehicle.java را به شکل زیر تغییر دهید.

    کد:
    01    package com.uncocoder.course.lessons;
    02    
    03    import android.util.Log;
    04    
    05    public class Vehicle ..
    06    
    07        public final static int     TYPE_UNDEFINED = 0;
    08        public final static int     TYPE_CAR       = 1;
    09        public final static int     TYPE_BOAT      = 2;
    10        public final static int     TYPE_AIRPLANE  = 3;
    11    
    12        private final static String DEBUG_TAG      = "LOG";
    13    
    14        public float                mPositionX     = 0;
    15        public float                mPositionY     = 0;
    16        public float                mPositionZ     = 0;
    17    
    18        public int                  mWeight        = 0;
    19        public float                mSpeed         = 0;
    20    
    21        private int                 mType          = 0;
    22    
    23    
    24    
    25        public Vehicle(float speed, int weight) ..
    26            Log.i(DEBUG_TAG, "Vehicle Created with Speed: " + speed + ", Weight: " + weight);
    27            mSpeed = speed;
    28            mWeight = weight;
    29        }
    30    
    31    
    32    
    33        public void setType(int type) ..
    34            if (type == TYPE_CAR) ..
    35                Log.i(DEBUG_TAG, "Vehicle is Car");
    36    
    37            } else if (type == TYPE_BOAT) ..
    38                Log.i(DEBUG_TAG, "Vehicle is Boat");
    39    
    40            } else if (type == TYPE_AIRPLANE) ..
    41                Log.i(DEBUG_TAG, "Vehicle is Airplane");
    42    
    43            } else if (type == TYPE_UNDEFINED) ..
    44                Log.i(DEBUG_TAG, "Type Undefined, Define a Valid Type");
    45                return;
    46    
    47            } else ..
    48                Log.i(DEBUG_TAG, "Use Const Values to Define a Type");
    49                return;
    50            }
    51    
    52            mType = type;
    53            Log.i(DEBUG_TAG, "Vehicle Type Set!");
    54        }
    55    
    56    
    57    
    58        public int getType() ..
    59            Log.i(DEBUG_TAG, "Vehicle Type is: " + mType);
    60            return mType;
    61        }
    62    
    63    
    64    
    65        public void turnOn() ..
    66            Log.i(DEBUG_TAG, "Vehicle Turned On");
    67        }
    68    
    69    
    70    
    71        public void turnOff() ..
    72            Log.i(DEBUG_TAG, "Vehicle Turned Off");
    73        }
    74    
    75    
    76    
    77        public void startMove() ..
    78            Log.i(DEBUG_TAG, "Vehicle Starts Moving");
    79        }
    80    }
    خط 7 تا خط 10: چهار const از نوع int با مقادیر 0 تا 3 را با دید public تعریف کردیم، بنابراین از هر کلاسی قابل استفاده است.
    خط 12: یک const از نوع String با مقدار "LOG" را با دید private تعریف کردیم، بنابراین فقط از داخل این کلاس قابل استفاده است.
    خط های حاوی Log.i : با استفاده از ثابت DEBUG_LOG که مقدار "LOG" را دارد، log ها را چاپ می کنیم.
    خط 34 تا 53: با استفاده از if..elseif...else مقادیر مختلف mType را چک کرده و پیغام مناسب را log می کنیم.
    خط 45 و 49: با استفاده از return از ادامه متد منصرف می شویم بنابراین باقی خطوط بعد از این خط ها اجرا نخواهند شد.

    همانطور که از کدهای بالا مشخص است یک const با استفاده از واژه static final تعریف می شود و به کمک visibility نوع دید سایرین به آن را تعیین می کنیم. برای نمایش مشخص تر const ها آنها را با حروف تماماً بزرگ نمایش داده و برای جدا کردن کلمات از _ استفاده کنیم.
    » حال کد مربوط به متد initializeUi در کلاس AndroidCourseActivity.java را به شکل زیر تغییر دهید.

    کد:
    01    private void initializeUi() ..
    02        btn = (Button) findViewById(R.id.btn_action);
    03        text = (TextView) findViewById(R.id.txt_caption);
    04    
    05        btn.setOnClickListener(new OnClickListener() ..
    06    
    07            @Override
    08            public void onClick(View v) ..
    09                Vehicle myVehicle = new Vehicle(200f, 800);
    10                myVehicle.turnOn();
    11                myVehicle.startMove();
    12                myVehicle.turnOff();
    13    
    14                myVehicle.mPositionX = 10;
    15                myVehicle.setType(Vehicle.TYPE_CAR);
    16    
    17                /* it's wrong code */
    18                //String str = Vehicle.DEBUG_TAG;
    19    
    20                Log.i("LOG", "My Vehicle Type is: " + myVehicle.getType());
    21            }
    22        });
    23    }
    خط 15: با استفاده از ثابت TYPE_CAR مقدار mType را set می کنیم
    خط 18: این مقدار خواندن نخواهد بود چرا که با توجه به تعریف آن در کلاس Vehicle از private visibility تبعیت می کند.

    با توجه به مثال بالا می توانیم در مورد final و static بیشتر صحبت کنیم. به کلمات static, final, private, public, protected اصطلاحاً modifiers می گوییم.

    Modifiers * :

    static modifier :
    با استفاده از آن باید به یک Field یا Method مستقیماً از طریق نام کلاس دسترسی پیدا کرد نه از طریق instance گرفته شده از کلاس یعنی می نویسیم Vehicle.TYPE_CAR و نمی نویسیم myVehicle.TYPE_CAR. با توجه به نوشته فوق مشخص است که حتی اگر instance ـی هم از آن کلاس نساخته باشیم، آن member ( فیلد یا متد ) قابل استفاده خواهد بود. این موضوع در جاهای متفاوتی به ما کمک می کند. فرض کنید که می خواهیم تعداد Vehicle های ساخته شده را در جایی ذخیره کنیم، دقیقا مانند این که بخواهیم بگوییم « از این نوع وسیله نقلیه چند تا داریم ». برای بیان جمله قبل نیازی به ساخت حتی یک نمون وسیله نقلیه هم نیست. بنابراین می توانیم در کلاس Vehicle بنویسیم:

    کد:
    01    public static int           mVehicleCount  = 0;
    و برای تغییر آن ( اضافه کردن به آن ) می توانیم به صورت زیر ( مثلا در متد initializeUi ) بنویسیم:
    کد:
    01    Vehicle.mVehicleCount++;
    اگر از static قبل از نام متد استفاده کنیم، همانطور که می توانستیم به فیلد را مستقیماً از نام کلاس دسترسی داشته باشیم، می تواینم به متد هم مستقیم دسترسی داشته باشیم، این موضوع هم شبیه این است که بگوییم « این نوع وسیله نقلیه چگونه سوخت گیری می کند »، برای بیان عبارت قبل هم نیازی به ساخت یک نمونه از وسیله نقلیه ندارم.
    اینگونه متدهای استاتیک معمولاً Helper نامیده می شوند و کاربردهای مستقل از instance دارند. بطور مثال ممکن است متدی بخواهیم که یک عدد تصادفی تولید کند. می توان این متد را داخل کلاسی به نام MathHelpers تعریف کرد و هر جای دیگر با دستور MathHelper.getRandom آنرا فراخواند.
    final modifier :
    با استفاده از آن می توان به java compiler و eclipse فهماند که این member ( فیلد یا متد ) پس از تعریف اولیه مجدداً قابل تعریف نیست.

    اگر این modifier قبل از نام فیلد استفاده شود به معنی این است که فیلد قابل مقداردهی مجدد نیست پس در همان خط باید مقدار دهی شود.
    اگر قبل از نام پارامتر استفاده شود به معنی این است که نمی توان پارامتر را دوباره تغییر داد و فقط به منظور خوانده شدن استفاده می شود.
    اگر قبل از نام متد استفاده شود به معنی این است که نمی توان متد را Override ( که بعداً توضیح می دهیم ) کرد.
    اگر قبل از نام کلاس استفاده شود به معنی آن است که نمی توان از کلاس، subclass ـی تهیه کرد.
    اگر به همراه static قبل از نام فیلد بکار رود به معنی تعریف یک ثابت است.
    بنابراین بیشتر کاربرد final برای امنیت و کم کردن خطای برنامه نویس ( برنامه نویسان ) است.
    private modifier :
    مورد استفاده شده فقط در داخل کلاس قابل دید است و خارج از کلاس قابل دیدن نیست. این موضوع عملیات داخل کلاس را که معمولاً خیلی شلوغ و پر متغیر است را به بیرون انتقال نداده و باعث تمیز شدن کد و راحتی استفاده از کلاس می گردد.

    protected modifier :
    مورد استفاده شده فقط در داخل کلاس و زیر کلاسهای آن قابل دید است و خارج از آنها قابل دید نیست. این موضوع هم به تمیز بودن کد کمک شایانی می کند.

    public modifier :
    مورد استفاده شده در همه کلاسها قابل دید است. توصیه می شود از این modifier در مکان صحیح استفاده کنید و اگر واقعاً دید در همه کلاسها لازم نیست از آن استفاده نکنید.

    default modifier :
    اگر هیچ کدام از private, protected, public قبل از نام فیلد یا متد استفاده نشود از default modifier استفاده شده است و معنی آن اینست که مورد استفاده فقط در کلاسهایی قابل دید است که در یک package قرار داشته باشند. این modifier هم برای نوشتن module ها بسیار کاربرد دارد. جدول زیر نمای واضحتری را نشان می دهد.









    مفهوم this:

    همانطور که در بحث کلاس اشاره شد، برای دسترسی به متدها و فیلدهای غیر استاتیک یک کلاس نیاز به ساخت یک نمونه ( instance ) از آن کلاس داریم. با استفاده از این instance و operator نقطه ( . ) می توانیم به متدها و فیلدهای public ( و بعضاً protected ) دسترسی پیدا کنیم. حال عبارت this چه کمکی به ما می کند. اگر داخل متدهای غیر استاتیک از کلمه this استفاده شود به آن instance ـی که این متد را فراخوانی کرده اشاره می کند، پس می توانیم آنرا به سایر متدها بصورت یک پارامتر از جنس همان کلاس انتقال دهیم. انتقال دادن آن به سایر متدهای غیر استاتیک آن کلاس کار بیهوده ای است چون آنجا هم خود this معنی دارد، اما انتقال دادن آن به متدهای استاتیک همان کلاس و مخصوصاً به متدهای استاتیک و یا غیراستاتیک سایر کلاسها کاملاً مرسوم و کاربردی است.

    » کد زیر را به کلاس Vehicle.java بعد از startMove اضافه کنید:

    کد:
    01    public void sendNetworkData() ..
    02        Log.i(DEBUG_TAG, "Vehicle Networking");
    03        NetworkManager.sendVehicle(this);
    04    }
    » همینطور کلاس NetworkManager زیر را به نحوی که قبلاً گفته شده در com.uncocoder.course.lessons بوجود آورید و آنرا به شکل زیر edit کنید:

    کد:
    01    package com.uncocoder.course.lessons;
    02    
    03    public class NetworkManager ..
    04    
    05        public static void sendVehicle(Vehicle vehicle) ..
    06            if (vehicle != null) ..
    07                /* do some action with vehicle data 
    08                 * and send it through network
    09                 */
    10            }
    11        }
    12    }
    با دیدن دو کد بالا می توان مفهوم this را به خوبی درک کرد.

    سورس برنامه:

    می توانید سورس را از آدرس زیر دریافت کنید:
    http://31.7.56.44/fileshub/source/AndroidCourse_v5.zip


    توصیه ها:

    - اگر با مفاهیم شیء گرایی ( Object Oriented * ) آشنایی لازم را ندارید بهتر است کتابی در مورد java تهیه و مطالعه کنید، با اینکه در این آموزشها با آن خواهیم پرداخت، اما مطالعه شما بهتر است.
    - با همین مفاهیم اولیه در مورد شیء گرایی بسیار تمرین کنید و خود را در این مفاهیم قوی کنید تا در آموزشهای آتی بسیار راحتتر عمل کنید.
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  48. 6 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  49. #25
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    شیء گرایی در جاوا - مقدماتی 3

    مقدمه:

    مهمترین علت وجودی Object Oriented مبحث میراث بری ( Inheritence * ) هست. به عبارتی هر کلاسی به غیر از کلاس Object مشتق شده از کلاس دیگری خواهد بود. بنابراین در صورتیکه SuperClass * برای یک کلاس تعریف نشود، همان کلاس Object مد نظر خواهد بود.
    هر کلاس خواص public و protected کلاس بالادستی خود را دارا خواهد بود به علاوه اینکه می تواند دارای خواص دیگر منحصر به فردی باشد که باز هم ممکن است این خواص را به SubClass های خود بدهد یا ندهد. به طور مثال در مورد کلاس وسایل نقلیه ( Vehicle ) می توان عناصر mPosition, mType, mSpeed, ... را جزء خواصی دانست که همه Vehicle ها از جمله Car, Boat, Airplane آنرا تعریف می کنند. اما کلاس Boat دارای المان دیگری مانند « لنگر » خواهد بود که Car و Airplane آنرا ندارند. کلاس Boat هم می تواند دارای زیر کلاسهای دیگری باشد که همه آنها « لنگر » را تعریف کنند، حال اگر « لنگر » به عنوان private تعریف شده باشد، با اینکه در زیر کلاس Boat به آن دسترسی وجود ندارد اما داخل زیر کلاس Boat خواهد بود.

    آموزش:
    برای محدود کردن میراث بری کلاسها از modifier های public, private, protected, default که در قسمت قبل توضیح داده شد بسیار استفاده می کنیم. فرض کنیم می خواهیم دیاگرام زیر را که به آن Class Hierachy * می گویند با استفاده از برنامه نویسی بوجود آوریم.
    کلاسهای زیر را مشاهده کنید، سورس کلاسها نسبت به قسمت قبل تغییر یافته است و چند کلاس هم اضافه شده است. این کلاسها کاربرد صحیحی در عمل ندارند و به مقاصد آموزشی اینگونه طراحی شده اند ولی نزدیک به ماهیت هر کلاس. توجه کنید که برای مفهوم تر شدن کدها کلاسها به package دیگری انتقال یافتند. برای اینکار می توانید بر روی src در پروژه خود Right-Click کرده و New->Package را انتخاب کنید و بنویسید com.uncocoder.course.lessons.sample1 ، با اینکار یک package جدید ساخته می شود. حالا می تواند با Drag & Drop موس ، Class های خود را به این Package انتقال دهید.

    کلاس Vehicle:

    کد:
    01    package com.uncocoder.course.lessons.sample1;
    02    
    03    import android.util.Log;
    04    import com.uncocoder.course.lessons.NetworkManager;
    05    
    06    public class Vehicle ..
    07    
    08        public final static int TYPE_UNDEFINED = 0;
    09        public final static int TYPE_CAR       = 1;
    10        public final static int TYPE_BOAT      = 2;
    11        public final static int TYPE_AIRPLANE  = 3;
    12    
    13        public static int       mVehicleCount  = 0;
    14    
    15        public int              mWeight        = 0;
    16        public float            mSpeed         = 0;
    17    
    18        protected int           mType          = 0;
    19    
    20    
    21    
    22        public Vehicle() ..
    23            Vehicle.mVehicleCount++;
    24        }
    25    
    26    
    27    
    28        public Vehicle(float speed, int weight) ..
    29            Log.i("LOG", "Vehicle Created with Speed: " + speed + ", Weight: " + weight);
    30            mSpeed = speed;
    31            mWeight = weight;
    32            Vehicle.mVehicleCount++;
    33        }
    34    
    35    
    36    
    37        public void setType(int type) ..
    38            if (type == TYPE_CAR) ..
    39                Log.i("LOG", "Vehicle is Car");
    40    
    41            } else if (type == TYPE_BOAT) ..
    42                Log.i("LOG", "Vehicle is Boat");
    43    
    44            } else if (type == TYPE_AIRPLANE) ..
    45                Log.i("LOG", "Vehicle is Airplane");
    46    
    47            } else if (type == TYPE_UNDEFINED) ..
    48                Log.i("LOG", "Type Undefined, Define a Valid Type");
    49                return;
    50    
    51            } else ..
    52                Log.i("LOG", "Use Const Values to Define a Type");
    53                return;
    54            }
    55    
    56            mType = type;
    57            Log.i("LOG", "Vehicle Type Set!");
    58        }
    59    
    60    
    61    
    62        public int getType() ..
    63            Log.i("LOG", "Vehicle Type is: " + mType);
    64            return mType;
    65        }
    66    
    67    
    68    
    69        public void turnOn() ..
    70            Log.i("LOG", "Vehicle Turned On");
    71        }
    72    
    73    
    74    
    75        public void turnOff() ..
    76            Log.i("LOG", "Vehicle Turned Off");
    77        }
    78    
    79    
    80    
    81        public void startMove() ..
    82            Log.i("LOG", "Vehicle Starts Moving");
    83        }
    84    
    85    
    86    
    87        public void sendNetworkData() ..
    88            Log.i("LOG", "Vehicle Networking");
    89            NetworkManager.sendVehicle(this);
    90        }
    91    }
    خط 8 تا 11 : تعدادی ثابت به منظور مشخص کردن تایپ هر کلاس تعیین شده است. تایپ کلاس کمک می کنه که به راحتی نوع اشیاء را مورد بررسی قرار دهیم. البته راههای دیگری نیز وجود دارد ولی فعلاً به این روش بسنده می کنیم
    خط 13 : یک static به منظور نگه داشتن تعداد Vehicle های ساخته شده تعریف کرده ایم. همانطور که در خطوط 23 و 32 مشخص است به این مقدار یکی اضافه می کنیم. چون برای ساختن یک Vehicle حتماً از یکی از Constructor ها باید استفاده شود.
    خط 15و 16: دو فیلد public تعریف شده اند که از هر کلاسی می توان به آنها دسترسی پیدا کرد.
    خط 18: یک فیلد protected تعریف شده است بنابراین از این کلاس و سایر subclass های این کلاس می توان به آن دسترسی پیدا کرد.
    خط 22: یک Constructor بدون ورودی تعریف شده است
    خط 28: یک Constructor با دو ورودی تعریف شده است که ابتدا پیغامی چاپ می کند و سپس مقادیر دو فیلد public را مقدار دهی می کند.
    خط 37: یک Setter برای mType تعریف شده است چرا که mType فقط از زیرکلاسها قابل دسترسی است و با اینکار setType که public است از همه جا قابل دسترسی است. اما قبل از Set کردن مقدار mType پیغامهای مناسب خارج می کند
    خط 62: یک Getter برای mType تعریف شده است. با توجه به تعریف Setter و Getter برای mType پس Encapsulate شده است. با استفاده از Getter مقدار متغیر mType که protected است را می توان از هر کلاسی خواند چرا که Getter بصورت public تعریف شده است
    خط 69 تا 90: تعدادی متد تعریف شده اند که همه public هستند و از هر کلاسی قابل دسترسی هستند.

    کلاس Car:

    کد:
    01    package com.uncocoder.course.lessons.sample1;
    02    
    03    
    04    public class Car extends Vehicle ..
    05    
    06        public int mWheelsCount = 4;
    07    
    08    
    09    
    10        public Car() ..
    11            mType = Vehicle.TYPE_CAR;
    12        }
    13    }
    خط 4: کلاس Car از Vehicle گرفته شده است و می گوییم Car یک Vehicle است. در اینصورت تمامی Field ها، Method ها، و ... به Car به ارث می رسد چه public باشند چه protected، اما خواص private فقط برای همان کلاس حفظ خواهد شد و به زیر کلاسها به ارث نخواهد رسید.
    خط 6: علاوه بر member های موجود در Vehicle می خواهیم بک فیلد جدید تعریف کنیم که تعداد چرخهای یک ماشین را در بر گیرد. چرا که هر زیر کلاسی از Vehicle به آن نیاز ندارد اما زیر کلاس Car به آن نیاز دارد.
    خط 10: با تعریف یک Constructor بدون ورودی، Constructor پیش فرض کلاس Car را تعریف می کنیم تا عمل خاصی ( که اختصاص یک Type صحیح است ) را انجام دهیم. فیلد mType در کلاس Vehicle تعریف شده است اما چون در Car به ارث رسیده قابل استفاده است. با اختصاص ثابت موجود در Vehicle تعریف می کنیم که Type این کلاس TYPE_CAR است. بجای Type از هر عبارت دیگری می توان استفاده کرد و Type یک کلمه کلیدی خاص نیست. همینطور دقت داشته باشید که با اجرای Constructor در زیر کلاس ها Constructor ساده ( بدون ورودی ) در کلاسهای super هم اجرا خواهد شد. برای تست اجرا شدن Constructor ها و بررسی متد ها می توانید با بررسی Log ها قضیه را بهتر متوجه شوید.

    کلاس Formula:

    کد:
    01    package com.uncocoder.course.lessons.sample1;
    02    
    03    
    04    public class Formula extends Car ..
    05    
    06    }
    از کلاس Car میراث بری کرده است پس علاوه بر میراث برای از Vehicle که superclass کلاس Car است ، Member های کلاس Car یعنی mWheelCount را هم به ارث خواهد برد. از طرف دیگر هیچ Constructor ـی برای آن تعریف نشده و همچنان Constructor پیش فرض آن عمل می کند. از آنجاییکه Constructor اصلی کلاس Car هم باید اجرا شود پس بطور خودکار تایپ Formula هم TYPE_CAR خواهد شد. سپس Constructor اصلی Vehicle اجرا خواهد شد و یک عدد به Vehicle ها اضافه می شود.

    کلاس Truck:

    کد:
    01    package com.uncocoder.course.lessons.sample1;
    02    
    03    public class Truck extends Car ..
    04    
    05        public Truck() ..
    06            mWheelsCount = 18;
    07        }
    08    }
    کلاس Truck هم زیر کلاسی از Car است و Constructor اصلی آن تعریف شده است. پس به علاوه انجام عمل در این Constructor یعنی Set کردن تعداد چرخها با عدد 18 به Constructor اصلی Car و سپس Vehicle می رود و باقی آن نتیجه ای مانند Formula در پس خواهد داشت.

    کلاس Boat:

    کد:
    01    package com.uncocoder.course.lessons.sample1;
    02    
    03    import android.util.Log;
    04    
    05    public class Boat extends Vehicle ..
    06    
    07        public Boat() ..
    08            mType = Vehicle.TYPE_BOAT;
    09        }
    10    
    11    
    12    
    13        @Override
    14        public void startMove() ..
    15            Log.i("LOG", "Boat Moving");
    16            super.startMove();
    17        }
    18    
    19    
    20    
    21        @Override
    22        public void turnOn() ..
    23            Log.i("LOG", "No Need to Turn On");
    24        }
    25    
    26    
    27    
    28        @Override
    29        public void turnOff() ..
    30            Log.i("LOG", "No Need to Turn Off");
    31        }
    32    
    33    
    34    
    35        @Override
    36        public int getType() ..
    37            Log.i("LOG", "Another Pass for getType");
    38            return super.getType();
    39        }
    40    }
    خط 8: که داخل Constructor اصلی قرار دارد باعث Set شدن مقدار mType با TYPE_BOAT می شود.
    خط 13 تا خط 39: متدهای موجود در Vehicle اصطلاحاً Override خواهند شد. با Override کردن یک متد، آن متد دیگر اجرا نمی شود. به طور مثال اگر متد startMove در این کلاس تعریف نشده بود به علت میراث برای، متد startMove داخل Vehicle اجرا می شود اما با Override کردن آن دیگر متد داخل Vehicle اجرا نخواهد شد. چنانچه تمایل داشتیم علاوه بر کارهای جدید موجود در این متد، متد موجود در کلاس superclass کلاس Boat هم اجرا شود می توانیم از super استفاده کنیم. با این کار دستور می دهیم که متد startMove کلاس Vehicle که super کلاس Boat هست هم اجرا شود. همینطور در خط 38 هم دوباره درخواست اجرای متد درون Vehicle را داده ایم با این تفاوت که این متد خروجی هم دارد پس اگر تمایل داشته باشیم می توانیم مانند کدی که نوشته شده خروجی superclass را به عنوان خروجی این متد در نظر بگیریم.
    در خطوط 22 و 29: چون متدها Override شده اند و از super برای فراخوانی متدهای داخل superclass استفاده نشده است پس دیگر متدهای همسان superclass اجرا نخواهند شد.

    کلاس Airplane:

    کد:
    01    package com.uncocoder.course.lessons.sample1;
    02    
    03    public class Airplane extends Vehicle ..
    04    
    05        public final static int FLYTYPE_NA         = 0;
    06        public final static int FLYTYPE_MOTOR      = 1;
    07        public final static int FLYTYPE_MECHANICAL = 2;
    08    
    09        protected int           mFlyType           = Airplane.FLYTYPE_NA;
    10    
    11    
    12    
    13        public Airplane() ..
    14            mType = Vehicle.TYPE_AIRPLANE;
    15        }
    16    }
    خط 5 تا 7: علاوه بر میراث بری از کلاس Vehicle تعدادی ثابت هم در این کلاس به صورت public تعریف شده اند بنابراین با استفاده از Airplane.FLYTYPE قابل استفاده خواهند بود.
    خط 9: یک فیلد protected با مقدار پیش فرض 0 تعریف شده چرا که FLYTYPE_NA مقدار 0 را در بر دارد.
    خط 13: Constructor اصلی تعریف شده و مقدار Type در آن Set می شود.

    کلاس Glider:

    کد:
    01    package com.uncocoder.course.lessons.sample1;
    02    
    03    public class Glider extends Airplane ..
    04    
    05        public Glider() ..
    06            mFlyType = Airplane.FLYTYPE_MECHANICAL;
    07        }
    08    }
    یک Airplane است ( از کلاس Airplane میراث بری کرده است ، زیر کلاس Airplane است ) پس خواص آن مثلا mFlyType تعریف شده که در خط 6 با استفاده از ثابت های تعریف شده در Airplane مقدار دهی می شود.

    کلاس Jet:

    کد:
    01    package com.uncocoder.course.lessons.sample1;
    02    
    03    public class Jet extends Airplane ..
    04    
    05        public Jet() ..
    06            mFlyType = Airplane.FLYTYPE_MOTOR;
    07        }
    08    }
    مانند کلاس Glider با تفاوت اینکه نوع mFlyType آن چیز دیگری متفاوت از Glider تعریف شده است.

    حالا طریقه استفاده و ساخت نمونه ای از این کلاسها در چند خط به نمایش در آمده که مفهوم ساده ای در بر دارد. بنابراین آنرا در کلاس AndroidCourseActivity با سورس زیر می توانیم تست کنیم:

    کد:
    01    package com.uncocoder.course.lessons;
    02    
    03    import android.app.Activity;
    04    import android.os.Bundle;
    05    import android.view.View;
    06    import android.view.View.OnClickListener;
    07    import android.widget.Button;
    08    import android.widget.TextView;
    09    import com.uncocoder.course.lessons.sample1.Car;
    10    import com.uncocoder.course.lessons.sample1.Formula;
    11    import com.uncocoder.course.lessons.sample1.Glider;
    12    import com.uncocoder.course.lessons.sample1.Truck;
    13    import com.uncocoder.course.lessons.sample1.Vehicle;
    14    
    15    public class AndroidCourseActivity extends Activity ..
    16    
    17        private Button   btn  = null;
    18        private TextView text = null;
    19    
    20    
    21    
    22        /** Called when the activity is first created. */
    23        @Override
    24        public void onCreate(Bundle savedInstanceState) ..
    25            super.onCreate(savedInstanceState);
    26            setContentView(R.layout.main);
    27    
    28            initializeUi();
    29        }
    30    
    31    
    32    
    33        private void initializeUi() ..
    34            btn = (Button) findViewById(R.id.btn_action);
    35            text = (TextView) findViewById(R.id.txt_caption);
    36    
    37            btn.setOnClickListener(new OnClickListener() ..
    38    
    39                @Override
    40                public void onClick(View v) ..
    41    
    42                    Vehicle vehicle1 = new Vehicle();
    43                    Vehicle vehicle2 = new Vehicle(10.0f, 1);
    44                    Car car = new Car();
    45    
    46                    Formula formula1 = new Formula();
    47                    formula1.turnOff();
    48                    formula1.turnOn();
    49    
    50                    Glider glider = new Glider();
    51                    Truck truck = new Truck();
    52                }
    53            });
    54        }
    55    }
    خطوط 42 تا 51: توجه کنید که تعریف شدن یک نمونه Formula هیچ ارتباطی به تعریف شدن Car یا Vehicle ها ندارد بلکه کاملاً مستقل است. همینطور میراث برای برای instance ها وجود دارد و مثلا formula به متدهای تعریف شده در Vehicle مثل turnOn و turnOff دسترسی دارد.
    این بود کلیات میراث بری. البته نکات ظریفتری هم وجود دارد که فعلاً دانستن آن برای ما زود است.

    Nested Class:
    اگر مفهوم Class ها را خوب متوجه شده باشید، Nested Class را هم خوب متوجه خواهید شد. این کلاسهای چیزی نیستند جز اینکه در کلاس دیگری تعریف می شوند و دسترسی به آنها با صدا کردن دو کلاس یا چند کلاس پشت سر هم امکان پذیر است. به مثال زیر که تکمیل شده کلاس Airplane است توجه کنید:

    کد:
    01    package com.uncocoder.course.lessons.sample1;
    02    
    03    import android.util.Log;
    04    
    05    public class Airplane extends Vehicle ..
    06    
    07        public final static int FLYTYPE_NA         = 0;
    08        public final static int FLYTYPE_MOTOR      = 1;
    09        public final static int FLYTYPE_MECHANICAL = 2;
    10    
    11        protected int           mFlyType           = Airplane.FLYTYPE_NA;
    12    
    13    
    14    
    15        public Airplane() ..
    16            mType = Vehicle.TYPE_AIRPLANE;
    17        }
    18    
    19        public static class Engine ..
    20    
    21            public int mRpm = 10000;
    22    
    23    
    24    
    25            public Engine() ..
    26                Log.i("LOG", "Engine Created");
    27            }
    28        }
    29    }
    خط 20: یک Nested Class جدید داخل Airplane تعریف می شود. به این دلیل static تعریف شده که با استفاده از Airplane.Engine بتوان به آن دسترسی داشت. به دلیل اینکه از چیزی میراث برای نکرده است پس فقط از کلاس Object میراث بری کرده است. توجه داشته باشید که وجود آن در کلاس Airplane به معنی میراث بری از Airplane نیست بلکه اصطلاحاً در آن Namespace تعریف شده است.
    خط 22: مانند هر کلاس دیگری می تواند ویژگیهای خاص خود را دارا باشد پس یک فیلد برای نمونه با آن اضافه کردیم.
    خط 26: مانند هر کلاس دیگری که می تواند دارای Constructor باشد آنهم Constructor دارد.
    پس تفاوتی بین ماهیت Class, Nested Class نیست بلکه نوع دسترسی به آن و مکان تعریف شدن آن، این نام را برای آن برگزیده است.
    برای ساخت یک نمونه Nested Class مانند زیر عمل می کنیم.

    کد:
    01                    Airplane.Engine engine = new Airplane.Engine();

    سورس برنامه:
    می توانید سورس را از آدرس زیر دریافت کنید:
    http://31.7.56.44/fileshub/source/AndroidCourse_v6.zip


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

    ==--==--==--==--==--==

  50. 6 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  51. #26
    دیگه صاحب خونه هستن
    تاریخ عضویت
    ۱۳۴۸-دی-۱۱
    محل سکونت
    شیرازووو ، فلکه گازوو ، کوچه درازووو ، در بازووو
    جنسيت
    برادر
    سن
    -1993
    نوشته ها
    11,580
    امتیاز : 123,049
    سطح : 100
    Points: 123,049, Level: 100
    Level completed: 0%, Points required for next Level: 0
    Overall activity: 99.0%
    افتخارات:
    SocialYour first GroupRecommendation First ClassVeteranCreated Album pictures
    تشکر کردن : 35,154
    تشکر شده 42,004 در 9,343 پست
    نوشته های وبلاگ
    1
    مخالفت
    206
    مخالفت شده 166 در 132 پست

    پیش فرض

    آقا اجازه یه سوال

    من جا.ا ماوا هیچچی بلد نیستم
    vb6 و htm; و این بچه بازیا رو کار کردم
    بشینم وقت بذارم از پست اولی رو با دقت بخونم یاد میگیرم یا نه؟
    مختار: خدایا بهشتت را نمیخواهم ، فقط آنقدر به من فرصت بده تا دستم دوباره به قبضه شمشیرم برسد ؛
    آنوقت اگر خواستی به دوزخم بفرستی ... بفرست .





  52. 2 کاربر از پست مفید سائل الزهرا تشکر کرده اند .


  53. #27
    دیگه صاحب خونه هستن مدال ها:
    Most Popular

    تاریخ عضویت
    ۱۳۹۱-فروردین-۱۸
    محل سکونت
    یه گوشه خلوت شیراز
    نوشته ها
    2,711
    امتیاز : 18,843
    سطح : 86
    Points: 18,843, Level: 86
    Level completed: 99%, Points required for next Level: 7
    Overall activity: 0%
    افتخارات:
    Social50000 Experience PointsTagger First ClassVeteran
    تشکر کردن : 9,547
    تشکر شده 17,700 در 2,736 پست
    مخالفت
    0
    مخالفت شده 3 در 3 پست

    پیش فرض

    جناب سائل الزهرا این مطالبی رو که اینجا قرار داده شد در کارگاه آموزشی دور مقدماتی اندرویدی که برگزار میکنم مبلغ 360 هزار تومان هزینه دریافت میشه

    وقت بزارید بنده در خدمتم تعداد به حد نصاب برسه کلاس رفع اشکال برای دوستان هم میزارم
    ==--==--==--==--==--==

    ==--==--==--==--==--==

  54. 7 کاربر از پست مفید عرض از مبدا تشکر کرده اند .


  55. #28
    کاربر قديمی
    تاریخ عضویت
    ۱۳۸۳-شهریور-۱۵
    نوشته ها
    76
    امتیاز : 10,775
    سطح : 68
    Points: 10,775, Level: 68
    Level completed: 82%, Points required for next Level: 75
    Overall activity: 0%
    افتخارات:
    SocialVeteran10000 Experience Points
    تشکر کردن : 266
    تشکر شده 382 در 79 پست
    مخالفت
    0
    مخالفت شده 0 در 0 پست

    پیش فرض

    خسته نباشین نوشتن آموزش واقعا زمان گیره
    خیلی خوب ومفیده آموزش هاتون و بعد خیلی وقت دلیل خیلی خوبی بود برای اومدن به تالار
    ---------------------------------------
    سوات ندارم امضا كنم انگشت ميزنم[]

    اگر فقط تا چند ثانیه دیگه روی این پیوند کلیک نکنید، میترکید و میپاشید تو در و دیفال(تبلیغ نیست)

    دست نوشته هاي من و همسرم ^^^

  56. 8 کاربر از پست مفید H05531N تشکر کرده اند .


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  
درباره ما

جامعه مجازی رهپویان به عنوان شبکه اجتماعی اعضاء کانون فرهنگی رهپویان وصال از سال 1381 و به عنوان یکی از قدیمی ترین تالارهای گفتمان فضای وب فارسی مشغول به فعالیت می باشد. تمامی تلاش دست اندرکاران مجموعه، فراهم آوردن محیطی سالم، مفید و آموزنده برای کاربران گرامی می باشد بدیهی است مطالب درج شده نظرات کانون رهپویان وصال نبوده و نظرات رسمی در سایت رهپویان وصال درج می گردد.

ارسال پیام به مدیر سایت
session بارگذاری مجدد کد امنیتی مندرج در تصویر را وارد کنید:
شادی روح 14 شهید کانون فرهنگی رهپویان وصال صلوات

Content Relevant URLs by vBSEO 3.6.1