بررسی Object ها و Class ها در زبان برنامه نویسی جاوا

به عنوان یک زبان که مفاهیم شی گرایی را در خود پیاده سازی کرده است، زبان برنامه نویسی جاوا از مفاهیم اصلی شی گرایی پشتیبانی می کند. این مفاهیم شامل موارد زیر هستند:چند ریختی یا Polymorphism وراثت یا Inheritance یا Encapsulation انتزاع یا Abstraction کلاس ها یا Classes اشیاء یا Objectsنمونه یا Instance یا Method ارسال پیام یا Message Passing در این قسمت در رابطه با این مفاهیم به طور مفصل تری صحبت خواهیم کرد. اما در ابتدا نگاهی به مفهوم بسیار مهم object و class خواهیم انداخت.شیء یا object: object ها، شامل state و behavior می باشند. منظور از state، مجموعه‌ای از مقادیر است که در کنار یکدیگر، ماهیت یک object را ایجاد می‌کند. منظور از behavior، رفتارها و یا متدهایی است که یک object می‌تواند آنها را انجام بدهد. برای مثال یک object از نوع یک کلاس به اسم سگ و یا dog را در نظر بگیرید، object می تواند شامل state هایی از قبیل؛ رنگ، نام، گونه جانوری و دیگر رفتارهایی از قبیل؛ تکان دادن دم، واق واق کردن و خوردن باشد. در واقع یک object، یک نمونه و یا instance از یک class می باشد.کلاس یا class: یک کلاس به عنوان یک الگو و یا نقشه اصلی تعریف می‌شود که در آن behavior ها و state هایی که object های نهایی که از این کلاس ساخته می‌شوند آنها را دارا خواهند بود، تعریف می گردد.بررسی object ها در زبان برنامه نویسی جاواحال که کمی در رابطه با object ها و class ها و تفاوت آنها صحبت کردیم، بگذارید در رابطه با object ها به طور مفصل تری صحبت کنیم. اگر به دنیای اطراف خود نگاه کنید، object های بسیاری از قبیل؛ ماشین ها، حیوانات، انسان ها و دیگر اشیا را خواهید دید. تمامی این object ها دارای، state و behavior می باشد. برای مثال؛ اگر یک حیوان را در نظر بگیریم، state و یا حالت آن، شامل مواردی از قبیل؛ نام، گونه جانوری، رنگ و رفتارهای از قبیل؛ حرکت کردن، خوردن و ایجاد صدا می باشند. حال، اگر همین فضا را با یک نرم افزار مقایسه کنید، می بینید که شباهت های بسیار زیادی وجود دارد.اشیاء و یا object هایی که در یک نرم افزار تولید شده‌اند نیز دارای state و behavior هستند. یک state از یک object در یک نرم‌افزار، در درون فیلد ها تعریف می گردند. و behavior ها با استفاده از متدها پیاده سازی می شوند. بنابراین در توسعه نرم افزار، متدها بر روی state درونی و یا اصطلاحاً internal state مربوط به یک object، عملیاتی را انجام می دهند و ارتباط بین object ها با یکدیگر از طریق متد ها انجام می پذیرد.بررسی class ها در زبان برنامه نویسی جاوایک class یک نقشه و یا یک الگو است که از آن می توان object های مختلفی را ایجاد کرد. کدی که در قسمت زیر مشاهده می کنید، نحوه تعریف کردن یک کلاس در زبان برنامه نویسی جاوا را نشان می دهد.public class Dog {String breed;int age;String color;void barking() {}void hungry() {}void sleeping() {}}انواع مختلف متغیر های یک کلاسمتغیر های محلی و یا local variable ها: متغیرهایی که در درون متدها، توابع سازنده و یا قسمت های دیگری از کد تعریف می‌شوند، تحت عنوان متغیر محلی و یا local variable شناخته می‌شوند. این متغیرها در درون یک متد تعریف و سپس مقدار دهی می گردند. علاوه بر این؛ متغیرها، زمانی که متد مورد نظر به طور کامل اجرا گردد، از بین خواهند رفت.متغیرهای نمونه و یا instance variable: متغیرهای نمونه متغیرهایی هستند که درون یک class وجود دارند اما درون یک متد قرار نگرفتند. این گونه از متغیرها، زمانیکه object مورد نظر از کلاسی تعریف می گردد ایجاد و مقدار دهی می شوند. متغییرهای نمونه، می‌توانند از درون متدها، توابع سازنده و دیگر قسمت‌های کد درون یک کلاس، مورد استفاده قرار بگیرند. به این دلیل به این نوع از متغیرها، متغیرهای نمونه و یا instance variable می‌گوییم که یک متغیر تعریف شده از یک class را instance می‌نامیم. در واقع؛ اینگونه از متغیرها برای نمونه ها و یا instance هایی که از یک کلاس ایجاد می‌گردند، مورد دسترسی قرار می‌گیرند.متغیرهای کلاس و یا class variable ها: متغیرهایclass ، متغیرهایی هستند که درون یک class و بیرون از هر متدی و با استفاده از کلمه کلیدی static تعریف شدند.همانطور که مشاهده کردید؛ یک class می تواند تعداد زیادی از متدها را در کنار متغیرها داشته باشند. این متدها می‌توانند به مقادیر درون متغیر ها دسترسی پیدا کنند. در مثال های بالا؛ متدهایی برای کلاس dog از قبیل؛ barking و hungry و sleeping را می توان تعریف کرد. در ادامه می بایست موضوعات بسیار مهم تری را در رابطه با class ها در زبان برنامه نویسی جاوا بررسی کنیم.بررسی توابع سازنده و یا constructor هازمانی که مبحث class ها مطرح می‌شود، یکی از موضوعات بسیار بسیار مهم، مبحث توابع سازنده و یا constructor می باشند. هر class می تواند یک تابع سازنده و یا constructor داشته باشد. اگر برای یک کلاس، صراحتاً، یک تابع سازنده تعریف نکنید، کامپایلر جاوا یک تابع سازنده پیش فرض و یا اصطلاحاً default constructor را برای آن class تعریف می‌کند.هرگاه یک object جدید ایجاد می شود، حداقل یک تابع سازنده ایجاد خواهد شد و سپس اجرا خواهد گردید. قانون اصلی که باید همیشه در استفاده کردن از توابع سازنده در نظر گرفته شود، این است که نام یک تابع سازنده، همیشه باید با این نام یک class یکسان باشد. علاوه بر این؛ یک class می تواند بیش از یک تابع سازنده داشته باشد. کدی که در قسمت زیر مشاهده می کنید، نحوه تعریف کردن یک class و سپس لحاظ کردن یک تابع سازنده برای آن را نشان می دهد.public class Puppy {public Puppy() {}public Puppy(String name) {// This constructor has one parameter, name.}}زبان برنامه نویسی جاوا از کلاس های تکین و یا اصلاحاً singleton class ها نیز پشتیبانی می کند. ماهیت singleton class ها به این ترتیب است که از آنها فقط و فقط می توان یک object و یا instance ایجاد کرد. نکته دیگر اینکه؛ تا به اینجای کار متوجه شدیم که دو نوع تابع سازنده را می‌توان در یک class داشت. در رابطه با موضوعات دقیق‌تر مربوط به توابع سازنده در قسمت های بعدی به طور مفصل تری صحبت خواهیم کرد.ایجاد کردن یک objectهمانطور که قبلاً گفتیم؛ یک class به عنوان یک نقشه و یا الگو برای object هایی می باشد که پس از تعریف شدن class، از آن class ایجاد می گردند. پس اساساً یک object از یک class ایجاد می گردد. در زبان برنامه نویسی جاوا، شبیه به زبان برنامه نویسی سی شارپ، از کلمه‌ی کلیدی new برای ایجاد کردن object ها استفاده می کنیم. برای ایجاد کردن یک object از یک class، به طور کلی سه مرحله وجود دارد که آنها را در این قسمت بررسی کرده و توصیه می‌کنیم که از کلمات فنی آنها نیز استفاده کنید.تعریف و یا declaration: منظور از تعریف و یا declaration زمانی است که یک متغیر با یک نام خاص، به عنوان یک object از یک class در نظر گرفته می‌شود.نمونه سازی و یا instantiation: زمانی که از کلمه کلیدی new استفاده می‌کنید، در واقع آن object را نمونه سازی کرده اید و یا ایجاد نموده اید.مقدار دهی و یا initialization: کلمه‌ی کلیدی new، به همراه فراخوانی تابع سازنده class مورد نظر، باعث مقداردهی شدن و یا initialization می شود. به این کار initialize کردن آن object جدید می گویند.کدی که در قسمت زیر مشاهده می کنید، نحوه انجام دادن این سه مرحله ی بسیار مهم در ساختن یک object از یک class را نشان می دهد.public class Puppy {public Puppy(String name) {// This constructor has one parameter, name.System.out.println("Passed Name is :" + name );}public static void main(String []args) {// Following statement would create an object myPuppyPuppy myPuppy = new Puppy( "tommy" );}}اگر کدی که در قسمت بالا مشاهده کردید را کامپایل و سپس اجرا کنیم، خروجی که در قسمت زیر مشاهده می شود، ایجاد خواهد شد.خروجی:Passed Name is :tommyدسترسی پیدا کردن به instance variable ها و متدهادر قسمت های قبلی در رابطه با instance variable ها و متدها صحبت کردیم و می دانیم که می‌توان با استفاده از object های تعریف شده از یک class به آنها دسترسی پیدا کرد. برای دسترسی پیدا کردن به instance variable ها می‌توانیم از مسیر معتبر کامل آنها که اصطلاحاً تحت عنوان qualified path نیز نامیده می شود، استفاده کرد. این موضوع در کد زیر نشان داده شده است./* First create an object */ObjectReference = new Constructor();/* Now call a variable as follows */ObjectReference.variableName;/* Now you can call a class method as follows */ObjectReference.MethodName();علاوه بر این؛ مثالی که در قسمت زیر مشاهده می کنید، نحوه دسترسی پیدا کردن به instance variable ها و متدهای یک کلاس را نشان می‌دهد.public class Puppy {int puppyAge;public Puppy(String name) {// This constructor has one parameter, name.System.out.println("Name chosen is :" + name );}public void setAge( int age ) {puppyAge = age;}public int getAge( ) {System.out.println("Puppy's age is :" + puppyAge );return puppyAge;}public static void main(String []args) {/* Object creation */Puppy myPuppy = new Puppy( "tommy" );/* Call class method to set puppy's age */myPuppy.setAge( 2 );/* Call another class method to get puppy's age */myPuppy.getAge( );/* You can access instance variable as follows as well */System.out.println("Variable Value :" + myPuppy.puppyAge );}}با کامپایل کردن و سپس اجرا نمودن کدی که در قسمت بالا دیدیم، خروجی زیر تولید خواهد شد.خروجی:Name chosen is :tommyPuppy’s age is :2Variable Value :2منبع: وبسایت پرووید