java, آموزش قدم به قدم جاوا, جاوا, شی گرایی در جاوا

this در جاوا (object oriented programming)

this در جاوا

در این جلسه تیم کدگیت را با آموزش this در جاوا همراهی کنید. این آموزش ادامه آموزش شی گرایی در جاوا است. پیش نیاز این آموزش شامل موارد زیر است:

  1. آشنایی با شی گرایی
  2. آشنایی با constructor

شی گرایی

همه چیز در مورد اشیا است. هماطور که اشیا در دنیای واقعی رفتار میکنند، در دنیای نرم افزار نیز همانگونه اند. اشیا در یک برنامه تقریبا همه کار را انجام میدهند. به عنوان مثال ماشین ها شتاب میگیرند یا انسان ها راه میروند(انسان نیز یک شی است) یا هواپیماها پرواز میکنند و ماهی ها شنا میکنند. به طور مشابه ما در نرم افزار نیز ما اشیایی میسازیم که رفتاری خاص را انجام میدهند. و ما از آن برنامه انتظار داریم که رفتارهای اشیا را انجام دهند(راه رفتن، پرواز کردن …). پس موقعی که  نرم افزار ما اجرا میشود اشیا ما به وجود می آیند.

Constructor در جاوا

Constructor در جاوا بدین صورت عمل میکند که به ما اجازه ساخت یک شی را میدهد. وقتی ما یک کلاس را new میکنیم متد constructor آن صدا زده میشود و شی مورد نظر را میسازد. پس constructor متدی است است که شی را میسازد.متد constructor ویژگی های زیر را دارد:

  1. این متد چیزی return نمیکند.
  2. نام متد همنام کلاس است.
  3. در هنگام new کردن این متد صدا زده میشود تا شی ما ساخته شود.

This در جاوا

در آموزش قبل یک کلاس به نام Human ساختیم و برای آن constructor نیز نوشتیم. حال میخواهیم کد جلسه قبل به شکل زیر بود:

public class Human {
     String name;
     int age;
     String height;



     public Human() {
          System.out.println("no-arg constructor ");
          name = "Jack";
          age = 22;
          height = "1.8";

     }


     public Human(String newname) {
          name = newname;
          age = 22;
          height = "1.8";
     }


     public void Speak(){
          System.out.println("my Name is "+ Name);
          System.out.println("i am "+ age+" year old");
          System.out.println("my height is "+ Height +"meter");
     }

     public void eat(){
          System.out.println("eating......");
     }

     public void walking(){
          System.out.println("walking......");
     }


}

در کد بالا در constructor ما از متغییرهای دستی استفاده کردیم یعنی مثلا age را برای همه 22 قرار دادیم و هر موقع بخواهیم آن را تغییر دهیم باید یک خط کد بزنیم برای هر شی به صورت جداگانه سن جدایی معرفی کنیم!!!! حالا میخواهیم کمی برنامه خود را پویاتر(dynamic) کنیم. یعنی هنگام new کردن یک شی تمام ویژگیهای شی را وارد کنیم.به کد زیر دقت کنید:

    public Human(String name, int age, String height) {
          this.name = name;
          this.age = age;
          this.height = height;
     }

در کد بالا ما یک constructor با ورودی نوشتیم. و ورودیهای متد ما همنام ویژگیهای(فیلد های کلاس) ما هستند.حال به واژه this میرسیم.کلمه this در جاوا به شی که در آن هستیم اشاره دارد. و متغییر آن را در نظر میگیرد. به طور کلی کلمه this در جاوا یک اشاره گر به شی است. وقتی ما this.name را صدا میزنیم وارد شی ما میشود و ویژگی name آن را به ما میدهد.

مفهوم this در جاوا

توضیحات بالا شاید کمی شما را سردرگم کرده باشد برای همین یک قسمت جداگانه برای توضیح بیشتر this در جاوا در نظر گرفتیم. در آموزش قبل گفتیم که وقتی constructor مینویسیم هنگام new کردن جاوا آن را صدا میزند. حال ما یک شی از human میسازیم:


اتفاقی که در حافظه میفتد این است که  یک اشاره گر به نام tom ساخته میشود که به آدرس شی ساخته شده human اشاره دارد. پس وقتی ما یک شی را میسازیم یا یک کلاس را new میکنیم در حافظه آن ایجاد میشود و اشاره گری به آن اشاره میکند.

حال اگر ما یک شی دیگر با نام دیگری بسازیم:

Human jack = new Human();

در حافظه یک شی دیگر ساخته شده که با tom فرق دارد و حتی آدرس آن نیز متفاوت است. این مفهوم کلی new کردن در جاوا بود. وقتی ما کلمه this در جاوا را استفاده میکنیم به آدرس حافظه آن شی میرود و متغییرهای درونی آن را میبیند.

تست this در جاوا

برای تست کد های بالا، کد main زیر را بزنید:

 public static void main(String[] args) {
          Human jack = new Human("jack", 12, "1.3");
          jack.Speak();

          System.out.println("-----------");

          Human tom = new Human("tom", 42, "1.7");
          tom.Speak();
     }

در کد بالا از constructor جدید که کلمه this در آن به کار بردیم استفاده کردیم. کد بالا پویاتر و ساده تر از قبل است. خروجی کد this در جاوا به صورت زیر است:

my Name is jack

i am 12 year old

my height is 1.3meter

-----------

my Name is tom

i am 42 year old

my height is 1.7meter

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *