با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن. و کاربرانی که دوره کامل آموزش برنامه نویسی جاوا را دنبال می کنند. جاوا به عنوان یک زبان سطح بالا و جامع از قابلیت Object-Oriented (شی گرایی) پشتیبانی می کند. و در واقع خود یک زبان شی گرا محسوب می شود. قابلیت شی گرایی به شما امکان ایجاد کلاس و آبجکت ها را می دهد، هر کلاس خود از مجموعه ای متغیر و متد تشکیل شده که یک موجودیت را با یک رفتار خاص ایجاد می کند.این قابلیت در تمرکز کدهای برنامه و کنترل حجم کدها بسیار موثر عمل می کند. برای آشنایی بیشتر با مباحث آبجکت و کلاس در جاوا ادامه ی آموزش فوق را دنبال کنید.
در ابتدای آموزش شما را با مفاهیم پایه ی آبجکت و کلاس در جاوا آشنا می کنیم.
جاوا به عنوان یک زبان شیءگرا، از مفاهیم اساسی زیر را پشتیبانی می کند:
در این بخش شما را با دو مفهوم Classe (کلاس) و Object (اشیاء) آشنا خواهیم کرد.
اگر ما دنیای واقعی را در نظر بگیریم، می توانیم بسیاری از اشیاء را در اطراف ما، اتومبیل ها،انسان ها و غیره پیدا کنیم.
تمام آبجکت ها در دنیای واقعی دارای ویژگی ها و رفتارهای خاصی می باشند.
به عنوان مثال اگر یک سگ را در نظر بگیریم :
مشخصات آن می تواند نام ، نژاد ، رنگ ، وزن و… باشد.
رفتارهای آن می تواند دویدن ، پارس کردن ، حرکات دم و… باشد.
حالا اگر شما شیء نرم افزار را با یک شیء دنیای واقعی مقایسه کنید، آنها ویژگی های بسیار مشابه دارند.
اشیاء نرم افزاری نیز مشخصات و حالت هایی دارند، مشخصات در خود شی تعریف شده و رفتارها نیز با متدها مشخص می شود.
بنابراین در توسعه نرم افزار متدها بر وضعیت یک شی تاثیر گذاشته و ارتباط اشیاء نیز از طریق متدها صورت می پذیرد.
کلاس یک طرح کلی است که آبجکت هایی از آن طرح ایجاد می شود.
در زیر به یک مثال ساده از یک کلاس اشاره شده است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class Dog { String breed; int age; String color; void barking() { } void hungry() { } void sleeping() { } } |
یک کلاس می تواند هر نوع از متغیرهای زیر را داشته باشد:
یک کلاس می تواند شامل متدهای متعددی برای دسترسی به مقادیر و ایجاد یک رفتار خاص باشد.
در کد مثال بالا ()barking(), hungry() and sleeping متدهای کلاس Dog محسوب می شوند.
یکی از مباحث مهم یک کلاس ساختار آن کلاس است. هر کلاس یک ساختار کلی دارد.
هر بار که یک شیء جدید از یک کلاس ایجاد کنید از ساختار آن کلاس در آن شیء استفاده می شود.
نکته ی مهم در ساختارها این است که باید همنام کلاس خود باشند.
یک کلاس می تواند ساختارهای متعددی داشته باشد.
مثال:
1 2 3 4 5 6 7 8 | public class Puppy { public Puppy() { } public Puppy(String name) { // This constructor has one parameter, name. } } |
جاوا همچنین از ویژگی Class Singleton پشتیبانی می کند که به شما اجازه تعریف فقط یک کلاس را می دهد.
توجه – ما دو نوع ساختار داریم. ما در بخش های بعدی جزئیات ساختارها را مورد بحث قرار خواهیم داد.
همانطور که قبلا ذکر شد، یک کلاس طرح هایی را برای اشیا فراهم می کند.
بنابراین اساسا یک شیء از یک کلاس ایجاد می شود.
در جاوا، از کلمه کلیدی new برای ایجاد اشیاء جدید استفاده می شود.
برای ایجاد یک شیء از روی یک کلاس سه مرحله وجود دارد:
۱- اعلام متغیر با یک نام متغیر و نوع شی.
۲- کلمه کلیدی new برای ایجاد شی مورد استفاده قرار می گیرد.
۳- کلمه کلیدی “new ” با برقراری ارتباط با یک ساختار ایجاد شیء جدید را آغاز می کند.
مثال:
1 2 3 4 5 6 7 8 9 10 11 | 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 myPuppy Puppy myPuppy = new Puppy( "tommy" ); } } |
اگر ما برنامه فوق را کامپایل و اجرا کنیم، نتیجه ی زیر تولید خواهد شد:
خروجی:
1 | Passed Name is :tommy |
متغیرها و متدهای نمونه از طریق اشیاء ایجاد شده قابل دسترس هستند.
مثال زیر چگونگی دسترسی به متغیر و متدها در یک شیء را نشان می دهد:
1 2 3 4 5 6 7 8 | /* 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(); |
مثال:
این مثال نحوه دسترسی به متغیرها و متدهای یک کلاس را توضیح می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 ); } } |
اگر ما برنامه فوق را کامپایل و اجرا کنیم، نتیجه ی زیر تولید خواهد شد:
خروجی:
1 2 3 | Name chosen is :tommy Puppy's age is :2 Variable Value :2 |
اکنون به قوانین اعلام فایل منبع نگاهی می اندازیم. این قوانین هنگام اعلام کلاس ها، اظهارات واردات و اظهارات بسته در یک فایل منبع ضروری هستند.
کلاس ها دارای سطوح مختلف دسترسی هستند،همچنین انواع مختلفی از کلاس ها از جمله کلاس های انتزاعی، کلاس های نهایی و … وجود دارد.
همچنین جاوا شامل کلاس های ویژه ای است که دسته های Inner و Class Anonymous نامیده می شود.
به عبارت ساده، این یک روش طبقه بندی کلاس ها و اینترفیس ها است.
در برنامه های کاربردی در حال توسعه در جاوا، صدها کلاس و رابط نوشته خواهد شد.
بنابراین طبقه بندی کلاس ها برای دسترسی ساده و سریع تر ، حائز اهمیت است.
کدهای ورودی یک روش مناسب برای ارتباط کامپایلر به آدرس کلاس مورد نظر است.
به عنوان مثال، خط زیر از کامپایلر می خواهد تمام کلاس های موجود در دایرکتوری java_installation/java/io را بارگذاری کند:
1 | import java.io.*; |
برای درک بهتر مباحث فوق ما یک برنامه ی نمونه که شامل مباحث فوق باشد را ایجاد می کنیم:
۱- ابتدا notepad را باز کرده و کدهای ادامه ی این مثال را در آن وارد کنید.
۲- به خاطر داشته باشید که این یک کلاس عمومی با نام Employee است پس نام فایل باید بصورت Employee.java باشد.
کلاس Employee شامل چهار متغیر name, age, designation و salary بوده و یک ساختار نیز دارد که یک پارامتر ورودی می پذیرد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import java.io.*; public class Employee { String name; int age; String designation; double salary; // This is the constructor of the class Employee public Employee(String name) { this.name = name; } // Assign the age of the Employee to the variable age. public void empAge(int empAge) { age = empAge; } /* Assign the designation to the variable designation.*/ public void empDesignation(String empDesig) { designation = empDesig; } /* Assign the salary to the variable salary.*/ public void empSalary(double empSalary) { salary = empSalary; } /* Print the Employee details */ public void printEmployee() { System.out.println("Name:"+ name ); System.out.println("Age:" + age ); System.out.println("Designation:" + designation ); System.out.println("Salary:" + salary); } } |
همانطور که در ابتدای آموزش اشاره کردیم کدنویسی باید در متد اصلی فایل شروع شود.
بنابراین برای ایجاد کلاس Employee ابتدا باید متد اصلی برنامه و اشیاء مربوطه ایجاد شود.
در زیر کلاس EmployeeTest تعریف شده که دو نمونه از کلاس Employee را ایجاد می کند.
کد زیر را در فایل EmployeeTest.java ذخیره کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import java.io.*; public class EmployeeTest { public static void main(String args[]) { /* Create two objects using constructor */ Employee empOne = new Employee("James Smith"); Employee empTwo = new Employee("Mary Anne"); // Invoking methods for each object created empOne.empAge(26); empOne.empDesignation("Senior Software Engineer"); empOne.empSalary(1000); empOne.printEmployee(); empTwo.empAge(21); empTwo.empDesignation("Software Engineer"); empTwo.empSalary(500); empTwo.printEmployee(); } } |
حالا، هر دو کلاس را کامپایل کنید و سپس EmployeeTest را اجرا کنید تا نتیجه را به صورت زیر مشاهده کنید:
خروجی:
1 2 3 4 5 6 7 8 9 10 11 | C:\> javac Employee.java C:\> javac EmployeeTest.java C:\> java EmployeeTest Name:James Smith Age:26 Designation:Senior Software Engineer Salary:1000.0 Name:Mary Anne Age:21 Designation:Software Engineer Salary:500.0 |
زبان جاوا مانند بسیاری از زبان های محبوب دیگر از ویژگی Object-Oriented (شی گرایی) پشتیبانی می کند، بنابراین جاوا یک زبان شیء گرا بوده که به ما اجازه ی تعریف کلاس ها و اشیاء با سطوح دسترسی مختلف را می دهد. از این رو برای آشنایی شما با این مباحث، آموزش این بخش را به آشنایی با آبجکت و کلاس در جاوا اختصاص دادیم.
در بخش بعدی شما را با انواع داده در جاوا آشنا خواهیم کرد.