رفتن به مطلب
بیسیک فور ایکس
  • اطلاعیه ها

    • H@mid.RS

      جذب نیرو   پنجشنبه, 10 فروردین 1396

      درود به دوستان عزیز به چند نفر مدیر برای بخش های php و گرافیک نیازمندیم درصورت تمایل درخواست خود را در پیام خصوصی بفرستید  
    • H@mid.RS

      تغییر نام کاربری   دوشنبه, 28 فروردین 1396

      درود دوستانی که نام کاربری انها با ایمل شان یکی بود تغییر کرد مثلا نام کاربری sss@tmail.com به sss تغییر کرد دوستانی که مشکل ورود دارند @ به بعد را پاک کنند
    • H@mid.RS

      کسب درآمد   پنجشنبه, 31 فروردین 1396

      دوستانی که میخواهند با انجمن خودشون همکاری کنند و از محیط انجمن درآمد کسب کنند به بنده پیام خصوصی بفرستند
    • H@mid.RS

      راه اندازی وبلاگ برای انجمن   دوشنبه, 18 اردیبهشت 1396

      درود به همه دوستان عزیز از این پس کاربران ویژه  - همکاران - و مدیران میتوانند در انجمن برای خود وبلاگ بسازند

at13

مدیر کل و مدیر فنی
  • تعداد ارسال ها

    8
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    1

4 دنبال کننده

درباره at13

  • تاریخ تولد 26 آذر 1368

Profile Information

  • جنسیت
    اقا
  • Interests
    http://androidtutorial.ir

آخرین بازدید کنندگان نمایه

232 بازدید کننده نمایه
  1. IS-A در جاوا Is-a رابطه بین جنس پارامترهای یک کلاس یا اینترفیس با جنس دیگر پارامتر ها که از کلوز های extend و implement گرفته میشوند.پس از این به بعد اگه گفتیم is-a منظورمون رابطه بین جنس پارامترهای یک کلاس یا اینترفیس با جنس دیگر پارامتر هاست. مثال معروف : ArrayList<E> implements List<E>, and List<E> extends Collection<E>. So ArrayList<String> is a subtype of List<String> List<E> پیاده سازی شده درList <E>Arrayو باز List<E> اومده از Collection<E> اکستند شده.بنابراین Arrylist<string> هستش یک سابتایپ از ( فرزند جنس پارامتره) List<String> . اگه بخوام یک نمونه مثال عامیانه بزنم. اینه که فرض کنید شما یک قلمه گل محمدی توی حیاطتتون میکارید و آب و کودش میدید و بلاخره گل میده . حالا فرض کنید که زنبور میاد شهد گل محمدی رو میگیره میبره میریزه تو کندو در نهایت عسلی که شما از این زنبور میگیرید عسل گل محمدی هستش.اگه شما گل بابونه بکاری پس جنس عسل شما هم میشه بابونه مسلما. پس جنس عسل ما ربط داره که زنبور از چه گلی بگیره و اینکه چه گلی ما بکاریم. Polymorphism – پلی مورفیسم – چندریختی همینطور که از اسمش پیداست چند تا ریخت داره . تا بحال شده مامانت عصبانی باشه بهت بگه نمیخوام ریختتو ببینم . بعد بگی کدوم ریختمو ؟ بعد بگه ریخت خودتو باباتو عمتو K . این یعنی اینکه تو چندتا ریخت داری که از بابا به ارث بردی . چیزی که مسلمه بابات از تو چیزی به ارث نبرده. پلی مورفیسم یعنی توانایی یک Object که می تونه اشکال و فرم های مختلفی بخودش بگیره. رایج ترین حالتی که از پلی مورفیسم در برنامه های شی گرایی استفاده میکنند زمانی اتفاق میفته که یک شئ از کلاس پدر ایجاد کنیم ولی آن را با کلاس های فرزندان مقداردهی نماییم. یادتونه وقتی میخواستیم یک نمونه بسازیم میومدیم میگفتیم : Phone obj=new phone(); که Phone اولی واسه اینه که بگی از چه متغیری میخوایم obj خوب اسمشه میتونه هرچی باشه و new هم بخاطره اینه که ما یک نمونه جدید میخوایم دیگه .. Phone دومی اسم اون کلاسی که داریم ازش نمونه میگیریم. حالا اگه بجای این Phone بیایم (یک کلاس فرزند تعریف کنیم و از پدر ارث بری کنیم و) اسم کلاس فرزند رو بنویسیم ما در واقع Polymorphism رو بکار بردیم . به این صورت : Phone obj=new Samsung(); نتیجه اینکه Reference variable ( متغیر مرجع) ما Phone هستش که شی جدیدی که ساخته شده توسط کلاس Samsung مقدار دهی میشه .اینم بدونید بد نیست هر شئ جاوا که از کلاسی ساخته شده باشد به گونه ای که آن کلاس حد اقل دو کلاس فرزند داشته باشد که با کلاس پدر رابطه IS-A داشته باشد قابلیت چندریختی را می تواند داشته باشد . یک مثال عامیانه بزنم : فرض کنید پدر من یک چغندر فروشی داره . و یک شعبه دیگه ایی در نقطه ایی دیگه از شهر زده با این تفاوت که قند دار و اون شعبه رو سپرده به من که بچرخونمش و من شعبه دیگری در منطقه دیگه ایی زدم اما توی این شعبه شکر دارم که سپردم دست داداشم علی و داداشم شعبه دیگری زده که شیرینی فروشیه که باز اون سپرده دست داداش حسن و ... آموزش تصویری این مثال رو توی آپارات آپلود کردم میتونید ببینید . http://www.aparat.com/v/JcAl4 به مثال زیر هم توجه کنید . class P{ public void m1() {} } class C extends P{ public void m2() {} } class Test{ public static void main (String [] args) { //case 1 P p = new P(); p.m1(); // کامپایل میشه p.m2(); // کامپایلر نمی تونه این آبجکت رو پیدا کنه //case 2 C c = new C(); c.m1(); // کامپایل میشه c.m2(); // کامپایل میشه //case 3 P p = new C(); p.m1(); // کامپایل میشه p.m2(); // کامپایلر نمی تونه این آبجکت رو پیدا کنه //case 4 C c = new P(); // کامپایلر میگه چنین تایپی ( جنسی ) ناسازگاره } }
  2. متد و کلاس Abstract Abstract یعنی خلاصه یا چکیده. فارغ از جزئیات. اقا من به شما میگم برام یک برنامه اندروید بنویس که یک متنی رو چاپ کنه . اصلا برام مهم نیست که شما چطور میخوای اینکارو رو با چندتا متد و تابع انجام بدی. من میخوام در نهایت اون متن رو ببینم. وقتی مامانت میگه ظرفا رو بشور براش مهم نیست که چطور میخوای بشوری بریزی توی ماشین ظرف شویی ، با فرچه بشوری یا با اسکاچ .... بلاخره باید انجامش بدی چون انجامش ندی خودت و ظرفا رو باهم میشوره . توی Abstract هم نیازی به جزئیات نداره . فقط میشینه یک گوشه میگه اینکارو بکن و اون کارو بکن . Abstract کلاس رو با کلمه کلیدی Abstract میشه شناخت . یک کلاس abstract میتونه متد abstract رو داشته باشه میتونه نداشته باشه و داخلش از متد concrete (غیر abstract) استفاده شده باشه . اما به این نکته توجه کنید که شما از متد abstract تنها در کلاس Abstract میتونید استفاده کنید و غیر از این معنایی نداره . کلاس abstract غیرقابل استفاده است تا زمانی که آن ها را در کلاس های دیگری extend کرده باشیم بریم یک مثال بزنیم : // Declaration using abstract keyword abstract class AbstractDemo{ // Concrete method: body and braces public void myMethod(){ //Statements here } // Abstract method: without body and braces abstract public void anotherMethod(); } توی مثال بالا متد abstract رو ببینید که بدون بدنه و براکت هستش و متد Concrete دارای بدنه و براکته. چرا ما به کلاس Abstract نیاز داریم ؟ تابحال شده یک ایده برنامه نویسی به ذهنتون برسه و بدونید باید چیکار کنید و روال رو میدونید اما نمی دونید چطور اینکار رو بکنید ... اینجاس که میایم از کلاس Abstract استفاده میکنیم.یک مثال دیگه باهم ببینیم : abstract public class AbstractDemo{ public void myMethod(){ System.out.println("Hello"); } abstract public void anotherMethod(); } public class ConcreteDemo{ public void anotherMethod() { System.out.print("Abstract method"); } public static void main(String args[]) { //Can't create object of abstract class - error! AbstractDemo obj = new AbstractDemo(); obj.display(); } } بنظرتون خروجی چی میتونه باشه ؟!! یک مرور کنیم کد های بالا رو : اول اومدیم یک کلاس AbstractDemo ساختیم که داخلش از دو متد abstract و concrete استفاده کردیم . و در ادامه یک کلاس ConcreteDemo ساختیم و داخلش فقط متد Concrete ساختیم . و در کلاس اصلی main اومدیم یک نمونه جدید از کلاس AbstractDemo ساختیم . سوال پیش میاد؟؟ خوب الان از چه متدی نمونه ساخته میشه ؟!!! اینجاست که برنامه به ما اخطار میده و میگه : آهای خوشگله ، تو نمی تونی از چیزی که کلیات رو تعریف کرده نمونه بسازی . منظورش اینه که از کلاس های abstract فقط میتونی extend کنی نه اینکه نمونه بسازی. حالا اگه نمونه لازم داشتیم چه کنیم ؟ خیلی سادس از قانون ارث بری استفاده میکنیم . میایم یک بچه میسازیم ( subclass ) و extend اش میکنیم از باباش . به مثال زیر توجه کنید : abstract class Demo1{ public void disp1(){ System.out.println("Concrete method of abstract class"); } abstract public void disp2(); } class Demo2 extends Demo1{ /* I have given the body to abstract method of Demo1 class It is must if you don't declare abstract method of super class compiler would throw an error*/ public void disp2() { System.out.println("I'm overriding abstract method"); } public static void main(String args[]){ Demo2 obj = new Demo2(); obj.disp2(); } } توی مثال بالا اول یک کلاس abstract ساختیم با اسم Demo1 که داخلش دوتا متد وجود داره که اولین متد Concrete ( همه چیزش واضحه ) و دومین متد abstract . در ادامه اومدیم یک subclass ساختیم یعنی Demo2 و ارث بری کردیم از superclass یعنی Demo1 و حالا در اینجا اومدیم متد abstract (یا همون متد disp2 ) رو بکار کشیدیم یا بازنویسی یا Overriding کردیم که برامون یک متنی رو چاپ کنه. حالا در کلاس اصلی main ، یک نمونه از Demo2 ساختیم . چون در Demo2 همه چیز مشخصه پس خطایی از ما نخواهد گرفت و درنهایت هم گفتیم که نمونه ایی رو که ساختیم نمایش بده. مثال های بیشتر رو میتونید در لینک زیر مشاهده کنید : http://beginnersbook.com/2014/01/abstract-method-with-examples-in-java دوتا قانون رو الان بگم نگید نگفتی : 1- هر وقت شما داخل یک کلاسی متد Abstract و concrete داشتی از کلاس abstract استفاده میکنید 2- هر وقت شما کلاس abstract داشتی که فقط متد abstract داشت اونوقت باید از کلاس interface استفاده کنی کلاس Interface این کلاس فقط دارای abstract متد هستش. دیگه این کلاس رو نمیشه extend کردش و در اینجاس که با بزرگواری همچون implement آشنا میشیم . implement یعنی اینکه پیاده سازی کن. پس اگه بخواییم از کلاس Interface یک نمونه بسازیم باید یک کلاس دیگه ایی ایجاد کنیم و حرکت implements رو روش بزنیم.فقط در یک حالت میشه کلاس Interface رو extend کرد اونم در حالیه که کلاسی که قرار اکستند کنه خودش هم Interface باشه. قبلا راجب متد سازنده یعنی Constructor صحبت کردیم . توی مصاحبه های استخدامی بعضا سوال میشه که آیا کلاس Interface میتونه دارای متد Constructor باشه . جواب نه هستش. بخاطر اینکه کلاس Interface دارای متدهای abstract هستش و باید implement بشه و اینکه تمام متدهای interface بدنه ( body ) ندارند.بنابراین بدون نیاز به فراخوانی متد در رابط خودش وجود دارد. برای فراخوانی هر متد ما احتیاج داریم به یک شی (Object) که متد Interface نیازی به داشتن شی ندارد . در حالی که متد Constructor فراخوانی میشه در طول ساخت یک شی . یک مثال رو ببینیم : public interface SumInterface{ public int mymethod(int num1, int num2); } public class SumClass implements SumInterface{ public int mymethod(int num1, int num2){ int op= num1+num2; return op; } public static void main(Sring args[]) { SumClass obj= new SumClass(); System.out.println(obj.mymethod(2, 3)); } برای مطالعه بیشتر هم میتونید به لینک زیر مراجعه کنید : https://www.tutorialspoint.com/java/java_interfaces.htm
  3. کپسوله سازی ( Encapsulation ) یک کپسول آموکسی سیلین رو در نظربگیرید ، دارای یک روکشی هست که باعث میشه اون پودر های داخلش از محیط بیرون ایزوله باشند و از طرفی هم خدا بیامرز باعث میشه تا تلخی اون پودر ها رو نفهمیم.اصلا فلسفه کپسول اینه که یک سری دیتا ها رو از دید بقیه مخفی کنه به همین دلیل data hiding هم بهش میگن . از اونجایی که این کپسول میاد یک فضای خصوصی برای خودش تعریف میکنه توی برنامه نویسی ما هم متغیر های کلاس یا همون variable هامون رو خصوصی Private تعریف میکنیم.این کپسول آموکسی سیلین رو دیدید از دوتا روکش استفاده کرده که داخل هم میره و این پودر ها داخلشون قرار میگیره . حالا برای اینکه به اون پودرها دسترسی داشته باشیم فقط لازمه که این دوتا پوشش رو از دوطرف بکشیم و بهشون دسترسی داشته باشیم. ما توی برنامه نویسی برای اینکه دسترسی داشته باشیم به variable های کپسولمون باید از getter و setter استفاده می کنیم . خوب این getter و setter بدرد این میخورن که ما بعضی از کلاس هامون رو فقط خواندنی و یا فقط نوشتنی بکنیم. که این بعدا در اندروید نویسی خیلی بدردمون میخوره . خوب بریم یک مثال بزنیم: توی این مثال میخوام در تابع اصلی که اسمش HelloWorld هستش بیام نمونه بسازم از کلاس هایی که کپسوله سازی شدن و باset و get هم برای دسترسی به این کلاس ها کار کنم. ابتدا کلاسی با نام AndroidTutorial درست میکنم و متغیر android رو از جنسString با مدیفایر private درست میکنم. و در نهایت setter & getter رو براش تعریف میکنم. public class AndroidTutorial{ private String android; public void setAndroid(String android){ this.android=android; } public String getAndroid(){ return android; } } خوب کلاس دیگه ایی هم با نام BasicForX با روال قبل میسازم. public class BasicForX{ private String basic; public String getBasic(){ return basic; } public void setBasic(String basic){ this.basic=basic; } } حالا کلاس جدید به نام HelloWorld درست می کنم که main اصلی برنامه هستش . در این کلاس دو نمونه از دو کلاس بالا میسازیم و توسط دستور set دیتایی روی آن ها ذخیره میکنیم و توسط get این دیتا ها را فراخوانی میکنیم. public class HelloWorld{ public static void main(String []args){ BasicForX basic=new BasicForX(); AndroidTutorial android=new AndroidTutorial(); basic.setBasic("basic4x.ir"); android.setAndroid ("androidtutorial.ir"); System.out.println("visit "+basic.getBasic()+ " " + android.getAndroid()); } } این کپسوله سازی یا Encapsulation میتونه خیلی بهمون کمک کنه همونطور که قبلا اشاره شد می تونیم بگیم که کلاس ما Read Only باشه یا اینکه Write Only . میتونیم بگیم چه دیتایی روی متغیرش ذخیره بشه . توی مثال بالا ما در دو کلاس اول گفتیم متغیری از جنس String باشه و این می تونست از هر جنس دیگه ایی مثل int یا ... باشه. مثالی که در این بخش گفته شد می تونید از لینک زیر اجرا کنید و خودتون تغییراتی رو اعمال کنید : https://goo.gl/jBW4d9 واسه مطالعه بیشتر هم میتونید سری به سایت های زیر بزنید: http://beginnersbook.com/2013/05/encapsulation-in-java/ https://www.tutorialspoint.com/java/java_encapsulation.htm
  4. متد Overloading متد Overloading برای خواناتر شدن کدها و فهم راحت تر کدها استفاده میشود. overloading برای ایجاد دو یا چند متد هم نام اما با پارامترهای متفاوت،معرفی شده اند. لیست آرگومان هایی که می تواند متفاوت باشه در : 1- تعداد پارامتر ها 2- پارامترهای Data type 3- ترتیب Data type های پارامترها خوب بریم مثال بزنیم تا این موضوع رو بهتر درک کنیم : (1- تعداد پارامتر ها) class DisplayOverloading{ public void disp(char c) { System.out.println(c); } public void disp(char c, int num) { System.out.println(c + " "+num); } } class Sample{ public static void main(String args[]) { DisplayOverloading obj = new DisplayOverloading(); obj.disp('a'); obj.disp('a',10); } } در مثال بالا (برگرفته از سایت بگینربوک ) می بینید که از یک متد دوبار استفاده شده که در متد اولی از یک پارامتر char c و در متد دومی از دو پارامتر char c, int num استفاده شده . که با اجرای کد بالا خروجی بصورت زیر میشه : a a 10 (2- پارامترهای Data type) class DisplayOverloading2{ public void disp(char c) { System.out.println(c); } public void disp(int c) { System.out.println(c ); } } class Sample2{ public static void main(String args[]) { DisplayOverloading2 obj = new DisplayOverloading2(); obj.disp('a'); obj.disp(5); } } در مثال بالا متد اول disp پارامتر c از (Data type) جنس " char " میباشد و در ادامه همان متد پارامتر c جنسش int شده است . خروجی این کد : a 5 (3-ترتیب در Data type ) class DisplayOverloading3{ public void disp(char c, int num) { System.out.println("I’m the first definition of method disp"); } public void disp(int num, char c) { System.out.println("I’m the second definition of method disp" ); } } class Sample3{ public static void main(String args[]) { DisplayOverloading3 obj = new DisplayOverloading3(); obj.disp('x', 51 ); obj.disp(52, 'y'); } } در متد اول پارامتر c از جنس char و پارامتر num از جنس int بوده است که در متد دوم فقط جای جنس پارامترها یا همان Data type پارامترها عوض شده است . که خروجی این کد : I’m the first definition of method disp I’m the second definition of method disp خوب بریم سراغ چند متد دیگه و بررسی کنیم متدهایی که اورلودینگ در آنها آیا رعایت شده اند یا خیر و بعبارتی معتبر هستند یا غیرمعتبر. مثال اول : int mymethod(int a, int b, float c) int mymethod(int var1, int var2, float var3) این مثال نا معتبر است و کامپایل آن با خطا روبرو خواهد بود . به این خاطر که دیتا تایپ و ترتیب دیتاتایپ در هردو متد دقیقا همان هستند و و تعداد پارامترها در هر دو متد به یک اندازه هستند . مثال دو : int mymethod(int a, int b) int mymethod(float var1, float var2) این مثال معتبر است به این خاطر که دیتا تایپ در هر متد متفاوت است . در اولی int و دومی float مثال سه : int mymethod(int a, int b) int mymethod(int num) این مثال معتبر است به این خاطر که از لحاظ تعداد پارامترها در متدها متفاوت است. مثال چهار : float mymethod(int a, float b) float mymethod(float var1, int var2) این مثال معتبر است به خاطر اینکه ترتیب در دیتاتایپ ها رعایت شده است . در اولی )int, float( و دومی )float, int(. دوستانی که علاقه مند هستند بیشتر در این خصوص مطالعه کنند : http://www.javatpoint.com/method-overloading-in-java
  5. تعرفه تبلیغات در انجمن

    با سلام و عرض ادب خدمت شما دوستان و همراهان گرامی. انجمن basic4x برای شما سروران گرامی 4 جایگاه برای تبلیغات قرار داده است . جایگاه اول : سایز ۴۶۰px × ۶۰px مکان در ابتدای صفحات انجمن ( هدر انجمن ) جایگاه دوم : سایز ۴۶۰px × ۶۰px مکان در انتهای صفحات انجمن ( فوتر انجمن) جایگاه سوم :سایز ۴۶۰px × ۶۰px مکان در انتهای پست ارسالی اعضای انجمن جایگاه چهارم : سایز ۲۹۵px × ۳۸px مکان در صفحه اول انجمن سمت چپ با توجه به فرا رسیدن نوروز تعرفه های جدید به دو بخش تقسیم میشود . بخش اول مخصوص مهمان و بخش دوم مخصوص اعضا: تعرفه تبلیغات برای مهمانان گرامی : جایگاه اول : مدت 15 روز : 10000 تومان - مدت 30 روز 28000 تومان جایگاه دوم: مدت 15 روز : 10000 تومان - مدت 30 روز 28000 تومان جایگاه سوم : مدت 15 روز : 9000 تومان - مدت 30 روز 18000 تومان جایگاه چهارم : مدت 15 روز : 8000 تومان - مدت 30 روز 15000 تومان برای اعضای گرامی که در انجمن بیش از 15 پست ارسالی داشته اند : جایگاه اول : مدت 30 روز 18000 تومان جایگاه دوم: مدت 30 روز 18000 تومان جایگاه سوم : مدت 30 روز 10000 تومان جایگاه چهارم ::مدت 30 روز 9000 تومان تاریخ انقضا تعرفه : تا پایان سال جاری 1395 راه ارتباطی جهت رزرو تبلیغ : مدیریت فنی @H@mid.RS یا @at13 با تشکر
  6. Overriding Overriding ما میتونیم اون چیزی که فرزند از پدر به ارث برده رو بر اساس اون چیزی که دلخواه ماست تغییر بدیم. یا اینکه اگه بخواهیم یک سری خصوصیات رو فرزند از پدر به ارث نبره اون خصوصیات رو باید Overriding (رونویسی) کرد. یکسری قوانینی داره این overriding که باید بهشون توجه کنید. که حالا در طول آموزش به اون ها اشاره میکنم. اول یک مثال راجب overriding بزنیم. من یک سوپرکلاس superclass میسازم(منظورم همون کلاس پدر ) به اسم Phone که داخلش یک متدی گذاشتم به اسم OverPhone که قراره یک دستوری رو چاپ کنه. public class Phone { public void OverPhone(){ System.out.println("Class phone"); } } حالا یک ساب کلاس subclass میسازم ( منظورم همون کلاس فرزند) به اسم سامسونگ که داخلش همون متد باباشو قرار رونویسی کنم . متد باباش OverPhone بود . با این تفاوت که باباش Class phone رو چاپ میکرد حالا بچش حال کرده Class Sumsung رو چاپ کنه. public class Sumsung extends Phone{ public void OverPhone(){ System.out.println("Class Sumsung"); } } حالا به همین کار کپی & پیست ما با کمی تغییر میگن Overriding. خوب البته جا داره همینجا از پشت همین تریبون بگم شروط Overriding اینه که نام متدها ، ورودی و خروجی متدها باید یکسان باشد و اینکه باید این رونویسی یا Overriding در دو کلاس متفاوت باشد. حالا یک کلاس دیگه ایی برای اجرا میسازم به اسم Pr . که داخلش از پدر و پسر نمونه میسازم و از متدشون استفاده میکنم public class Pr { public static void main(String[] args) { Sumsung sumsung=new Sumsung(); Phone phone=new Phone(); phone.OverPhone(); sumsung.OverPhone(); } } که خروجی همه اینایی که گفتیم میشه : Class Phone Class Sumsung به این نکات توجه کنید : ( قوانین Overriding ) 1. 1 - متدهای سازنده (Constructor) قابل Overriding شدن نیستن . اگه یادتون باشه متد Constructor رو گفتیم متدی هستش که همنام کلاس سازنده است و هیچ داده ایی رو برنمی گردونه یا return نمی کنه. 2. 2- Modifier ها باید یکسان باشند . Modifier چیه باز ؟ الان با مثال زیر توضیح میدم سوپر کلاس زیر رو در نظر بگیرید : public class Phone { public void OverPhone(){ System.out.println("Class phone"); } } حالا ساب کلاس زیر رو در نظر بگیرید public class Sumsung extends Phone{ void OverPhone(){ System.out.println("Class Sumsung"); } } خوب حالا در سوپر کلاس می بینید متد <- OverPhone modifier اش را public قرار دادیم اما در ساب کلاس فقط void استفاده کردیم . خوب این کار Overriding رو نقض میکنه. همونطور که گفتم باید modifier یکسان باشه . اگه از public استفاده کردم در ساب کلاس هم از public استفاده کنم . 3- تمام آرگومان های ورودی و خروجی متدها باید در کلاس والد و فرزند یکسان باشد . 2. 4- از قوانین Overriding استفاده از کلمه کلیدی super هم هستش. یعنی اینکه هر وقت خواستید از فرزند دست به ارثیه پدر ببرید لازمه از این کلمه کلیدی استفاده کنید. جهت مطالعه بیشتر : https://www.tutorialspoint.com/java/java_overriding.htm http://www.javatpoint.com/method-overriding-in-java مطالبی رو که تا اینجا گفتیم رو می تونید از فایل پیوستی دریافت کنید. andriod-1.pdf
  7. جلسه اول : شی گرایی و مفاهیم مقدمه : زبان برنامه نویسی جاوا دارای ساختار syntax و شی گرا object oriented langugae می باشد . ما در این زبان برنامه نویسی با اشیایی سروکار داریم که حاوی داده هستن. شی گرائی چیست ؟ شی گرایی ساختاری برای کدنویسی و سازماندهی کد هاتونه . شما کارت عابر بانکتون رو نگاه کنید دارای خصوصیات و ویژگی ها منحصر بفردیه که شامل شماره کارت و رمز و مشخصات و .... هستش که اینا همه در کنار هم یک شی (Object ) رو تشکیل می دهند و یکی از خصوصیات شی گرایی کپسوله بودنه که باعث میشه فقط این کارت مختص شما باشه راجب کپسوله بودن در ادامه توضیح خواهم داد) حالا دفترچه حساب بانکیتون رو هم تصور کنید این دفترچه حساب بانکی هم دارای شماره حساب و امضا و مشخصات شماست که اینم یک شی (Object ) رو تشکیل میده حالا عابر بانک و دفترچه حساب بانکیتون هردو شی هستند و میتونند با هم دیگه یک شی بزرگتری بسازند مثلا شی ایی به نام حساب بانکی شما. مفاهیم شی گرایی ؟ هر نمونه ایی از کلاس ( class ) رو میگیم شی ، به مثال زیر توجه کنید : تلفن همراه رو در نظر بگیرید . (به این تلفن همراه میگن کلاس ( class )) . با تلفن همراه میتونید تماس بگیرید( که این تماس گرفتن میشه رفتار behavior) هر تلفن همراهی باتری داره ( که این باتری میشه صفت (Attribute)) . کلاس (class ) چیه : کلاس ها شامل خصوصیات ها (variable ) و رفتارها (method ) هستند variable ها: Variable خودش به سه بخش تقسیم میشه: 1- Class Variable متغیرهایی که فقط مربوط به اون کلاس هستند. یعنی من یک متغیری بنام آنتن میسازم در کلاس تلفن. حالا از این متغیر آنتن فقط میتونم در کلاس تلفن استفاده کنم. public class Phone { private static int antenna =1; //class variable } static در تکه کد بالا یعنی اینکه شما نیاز ندارید که نمونه ایی از آنتن بگیرید . به طور مستقیم می تونید از متغیر آنتن استفاده کنید. static رو شما هر کجا دیدید بدونید که دیگه مربوط به یک Object خاص نیست و برای همه Object ها معنی میده. این ویژگی static رو هم خصوصیات variable ( class – object ) و هم رفتار یا متدها ( class – object ) ها می تونن داشته باشند. بعنوان مثال من از هرگوشی فرقی نمی کنه میتونم بپرسم ظرفیت باتریتون چند آمپر هستش ؟ این سوال رو میتونم از هر گوشی بپرسم و یک سوال خصوصی نیستش. 2- Local Variable متغیری که در داخل یکی از رفتارهای کلاس تعریف میشه. public class Phone { private void samsung(){ boolean nfc = false; //local variable } } 3- Instance Variable - Field متغیری از یک نمونه کلاس را Variable Instance میگویند.این متغیر می تونه مقادیری مختلفی از هر نمونه ایی از کلاس بگیره. شما فرض کنید موبایل سامسونگ رو از یک نمونه آن می توانیم یک پردازنده 4 گیگ بگیریم از یک نمونه دیگه پردازنده 2 گیگ بگیریم. این پردازنده از هر نمونه ایی می تونه متفاوت باشه.یا مثلا شما تلفن همراه رو درنظربگیرید یک تلفن ممکنه اسمش سامسونگ باشه یکی دیگه اپل که هر کدوم میتونن حافظه های مختلفی داشته باشند... حالا برای تعریف این مدل متغیرها مثل متغیر پردازنده یا حافظه و... میایم از Variable Instance استفاده میکنیم. خلاصه اینکه برای هر نمونه ایی از کلاس می تونه مقادیر مختلفی بگیره public class Phone { private int processor = 2; // instance variable } یک چی در مورد public و private عرض کنم. از اسمشون مشخصه private یعنی اینکه خصوصیه اقا جان . شما فقط میتونی توی همون کلاس ازش استفاده کنی. Public هم که خدا خیرش بده مثل وای فای خونه میمونه که همه میتونن ازش استفاده کنند. عید که میشه معنی Public رو قشنگ حس میکنید.جلوتر توی کدنویسی بیشتر با این حضرات سروکله میزنیم که متوجه منظورم خواهید شد. متدConstructor در کلاس مهمترین بخش آن متدConstructor آن هستش. این Constructor چیه ؟ (متد سازندس) همین تلفن همراه رو در نظر بگیرید ، به صورت دیفالت(پیشفرض) یکسری خصوصیاتی دارند که توصیف این خصوصیات دیفالت رو میگن Constructor یا سازنده های کلاس. اگه واسه کلاس این متد رو بکار نبریم خود کامپایلر این کار رو میکنه. زمانی که میخواید شی جدیدی از کلاس بسازید متد Constructor فراخوانی میشه. حالا چه شما براش چیزی ست کرده باشید چه نکرده باشید. Constructor متدی هستند که دقیقا همنام نام کلاس است و هیچ داده ایی را نمی تواند return کند. این متد می تواند بدون پارامتر یا بیش از یک پارامتر باشند مثلا شما میخواین از کلاس موبایل یک نمونه بگیری اون موقع این متدConstructor این حضرت آقا باید فراخوانی میشه. فکر کنید یک تابع دارید که این تابع قراره برای هرمدل از گوشی های سامسونگ یک ورژنی یا اسمی یا لیبلی بزنه بره. که در این صورت ما باید در متد سازنده ذکر کنیم که حتما یک اسم یا لیبل بگیر ... public class Phone { public Phone(String name){ // <--------- Constructor } } حالا چطوری یک نمونه بسازیم. Phone phone=new Phone("Samsung"); Phone اولی واسه اینه که بگی چه متغیری میخوایم Phone دومی خوب اسمشه میتونه هرچی باشه و new هم بخاطره اینه که ما یک نمونه جدید میخوایم دیگه .. Phone سومی اسم اون کلاسی که داریم ازش نمونه میگیریم که داخلش هم پارامترهایی رو میدیم که توی همون کلاس از ما خواسته بود. public Phone(String name){ // <--------- Constructor } توی مثال بالا پارامتر name وارد شده. پس زمانی که یک نمونه میسازیم پارامترهای داخلش وارد میکنیم. این شکلی. Phone phone=new Phone("Samsung"); ارث بری Inheritance خب تعریف مشخصی داره مثلا شما فرض کنید چشمای من آبیه خوب یک قانونی میگه من اینو از پدر یا مادرم به ارث بردم. یا مثلا دماغ من چاقه خوب از شانس خوبم این مورد از پدرم و پدرم از مادرش به ارث برده ،جالب اینکه عمه هم همینطوره. کلیتش اینه که کلاس ها میتونن خاصیت ارث بری هم داشته باشند و یک سری خصوصیات رو از والد خود بگیره در عین حال خصوصیات جدیدی هم داشته باشند. که این ارث بری فرزند (subclass) رو با extends ربط میدن به والد ( superclass ) public class Samsung extends Phone{ } یک کلید واژه ایی هست توی این ارث بری که خیلی دیکتاتوره . این کلید واژه رو چه موقع استفاده کنیم ؟مثلا اگه به عمد بخوایم ویژگی های والد رو بر روی فرزند پیاده کنیم . اسم این کلید واژه چیه ؟ Super خوب یک مثال بزنم : سه تا کلاس ساختم . 1- Phone بعنوان کلاس پدر 2- Sumsung بعنوان کلاس فرزند 3- Pr بعنوان کلاس اجرای پروژه حالا میخوام خصوصیت processor پدر به فرزند به اجبار اعمال بشه و از طریق کلاس Pr فراخوانی بشن و روی مانیتور به نمایش در بیان. برای کلاس Phone نوشتم : public class Phone int processor = 10; // instance variable public Phone(){ // <--------- Constructor } } برای کلاس Sumsung public class Sumsung extends Phone{ int processor = 80; public void pro(){ System.out.println("pro is "+super.processor); } } به نحوه استفاده این super توجه کنید . برای کلاس Pr public class Pr { public static void main(String[] args) { Sumsung sumsung=new Sumsung(); sumsung.pro(); } } حالا خروجی رو ببینید : با اینکه من توی فرزند int processor = 80; رو اعمال کرده بودم اما بخاطر کلمه super خصوصیت پدر یعنی int processor = 10; چاپ شد .برای تست کدها می تونید از لینک زیر استفاده کنید و کد ها رو به صورت آنلاین کامپایل کنید : https://goo.gl/m3YZSP Overriding Overriding ما میتونیم اون چیزی که فرزند از پدر به ارث برده رو بر اساس اون چیزی که دلخواه ماست تغییر بدیم. یا اینکه اگه بخواهیم یک سری خصوصیات رو فرزند از پدر به ارث نبره اون خصوصیات رو باید Overriding (رونویسی) کرد. یکسری قوانینی داره این overriding که باید بهشون توجه کنید. که حالا در ادامه به اون ها اشاره میکنم.
  8. تبدیل فیلمهای یوتیوب به لینک دانلود دائمی

    @aliali1000 از ربات تلگرامی @utubebot هم می تونید استفاده کنید.
×