Java Nesneler ve Sınıflar
Java nesne tabanlı programlama dilidir. Java aşağıdaki temel kavramları içerir;
- Çok biçimlilik (Polymorphism)
- Miras (Inheritance)
- Kapsülleme (Encapsulation)
- Soyutlama (Abstraction)
- Sınıflar (Classes)
- Nesneler(Objects)
- Instance
- Metod (Method)
- Mesaj Ayrıştırma (Message Parsing)
Bu bölümde, sınıflar ve nesneler konularına bakacağız.
Nesneler : Nesneler durum ve davranışlara sahiptirler. Örneğin bir köpek renk, isim gibi durumlara ve yemek, havlamak gibi davranışlara sahiptir. Nesneler bir sınıfın örnekleridir.
Sınıflar : Sınıflar nesnenin durumlarını ve davranışlarını tanımlayan şablon olarak tanımlanabilir.
Java’da Nesneler
Gerçek dünyayı düşünürsek, çevremizde bir çok nesne buluruz. Örneğin arabalar, köpekler, insanlar durum ve davranışlara sahip olan nesnelerdir.
Yazılım nesnelerini ve gerçek dünyadaki nesneleri karşılaştırırsak, birbirlerine çok benzer karakteristik özellikler görürüz.
Yazılım nesneleri de ayrıca durum ve davranışlarına sahiptir. Yazılım nesnesinin durumları alanlarda (fields) tutulur ve davranışları metotlar ile gösterilir.
Java’da sınıflar
Sınıflar nesnelerin oluştuğu şablonlardır.
Sınıf örneği ;
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(){
}
}
|
Bir sınıf aşağıdaki değişken tiplerini içerebilir :
- Yerel Değişkenler (Local Variables) : Değişkenler metot, yapılandırıcı veya bloklar içinde tanımlanır. Metot içerisinde bir değişken tanımlanabilir ve ilk değer atanabilir. Bu değişken metot tamamlandığında yok edilir.
- Instance Değişkenler : Bir sınıf içerisinde ama metot dışarısında tanımlanır. Bu değişkenler sınıf yüklendiğinde oluşturulur. Herhangi bir metot, yapılandırıcı metot veya blok içerisinden ulaşılabilir.
- Sınıf Değişkenleri : Bu değişkenler sınıf içerisinde, metot dışında, static kelimesi ile tanımlanır.
Bir sınıf herhangi sayıda metot ve değişken içerebilir. Yukarıda ki örnekte, barking(), hungry(), ve sleeping() metotlardır.
Yapılandırıcı metotlar (Constructors)
Sınıflar hakkında ki en önemli alt konulardan biri yapılandırıcı metotlardır. Her sınıf yapılandırıcı metoda sahiptir. Eğer sınıf oluşturulduğunda yapılandırıcı metot yazılmazsa Java compiler bu sınıf için default yapılandırıcı tanımlar.
Her zaman yeni nesne oluşturulduğunda, en az bir yapılandırıcı metot çağrılır. Temel kural yapılandırıcının ismi sınıf ismi ile aynı olmalıdır. Bir sınıf birden fazla yapılandırıcı metoda sahip olabilir.
Yapılandırıcı metot örneği ;
1
2
3
4
5
6
7
8
|
public class Puppy{
public puppy(){
}
public puppy(String name){
//Bu yapılandırıcı metot bir parametreye sahiptir, name.
}
}
|
Nesne oluşturma
Bir sınıf nesneler için şablon olarak kullanılır. Basitçe bir nesne bir sınıftan oluşturulur. Java’da new kelimesi yeni nesne oluşturmak için kullanılır.
Bir sınıftan nesne oluştururmanın 3 adımı vardır ;
- Declaration : Nesne tipinde bir değişken tanımlanır.
- Instantiation : ‘new’ kelimesi nesne oluşturmak için kullanılır.
- İnitialization : ‘new’ kelimesi kullanıldığında yapılandırıcı metot çağrılır. Yeni obje oluşturulmuş olur.
Nesne oluşturma örneği ;
1
2
3
4
5
6
7
8
9
10
11
|
public class Puppy{
public Puppy(String name){
// Bu yapılandırıcı metot bir parametre almıştır, name.
System.out.println(“Puppy Name is :” + name );
}
public static void main(String []args){
// myPuppy isminde nesne oluşturuluyor
Puppy myPuppy = new Puppy( “tommy” );
}
}
|
Yukarıda ki örnek yazılıp çalıştırıldığında aşağıda ki çıktı alınır :
1
|
Puppy Name is :tommy
|
Instance Değişkenlere ve Metotlara Erişim
Instance değişkenlere ve metotlare oluşturulan nesneler üzerinden erişilir. Örnek ;
1
2
3
4
5
6
7
8
|
/* Oluşturulan ilk nesne */
ObjectReference = new Constructor();
/* instance değişkene erişim */
ObjectReference.variableName;
/* metota erişim */
ObjectReference.MethodName();
|
Örnek :
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
|
public class Puppy{
int puppyAge;
public Puppy(String name){
// Bu yapılandırıcı metot bir parametrelidir, name.
System.out.println(“Passed Name 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){
/* Nesne oluşturma */
Puppy myPuppy = new Puppy( “tommy” );
/* Sınıf metoduna nesne ile erişip nesnenin yaşını değiştirme */
myPuppy.setAge( 2 );
/* Sınıf metoduna nesne ile erişip nesnenin yaşına erişme */
myPuppy.getAge( );
/* nesne üzerinden sınıf değişkenine erşim*/
System.out.println(“Variable Value :” + myPuppy.puppyAge );
}
}
|
Yukarıda ki kodu çalıştırdığımızda aşağıda ki çıktı görülür ;
1
2
3
|
Passed Name is :tommy
Puppy‘s age is :2
Variable Value :2
|
Kaynak Dosya Bildirim Kuralları
Bu bölümün son kısmında kaynak dosyanın bildirim kurallarına bakılacaktır. Bu kurallar kaynak dosya içindeki sınıfları, import statementları ve paket statementları bildirirken zorunludur. Bunlar;
- Her kaynak dosyada sadece 1 tane public sınıf olabilir.
- Kaynak dosya birden fazla non public sınıfa sahip olabilir.
- Public sınıf ismi sonu .java uzantısı ile biten kaynak dosyanın ismi ile aynı olmalıdır. Örneğin;
- Sınıf ismi public class Emploee() ise, kaynak dosya ismi Employee.java olmalıdır.
- Bir sınıf paket (package) içerisinde tanımlanmışsa, paket statementlar kaynak dosya içerisinde ki ilk statement olmalıdır.
- İmport statementlar paket statement ve sınıf bildirimi arasında yazılmalıdır. Eğer paket statement yoksa import statement ilk satırda yazılabilir.
- İmport ve paket statementlar o kaynak dosya içindeki tüm sınıflara uygulanabilir.
Sınıflar birkaç erişim seviyesine sahiptir. Sınıfların farklı tipleri vardır. Bunlar abstract (soyut) sınıflar, final sınıflar , vb. Bu erişim düzenleyicileri ilerleyen derslerde gösterilecektir.
Yukarıda ki sınıf tiplerinden başka Java özel sınıflara da sahiptir. Bunlar inner (iç) sınıflar ve anonymous sınıflar olarak adlandırılır.
Java Paketleri (Package)
Sınıfları ve interfaceleri kategorize etmektir. Java’da uygulama geliştirirken, yüzlerce sınıf ve interface yazılabilir, bu yüzden kategorize işlemi bu sınıfları yazmayı ve okumayı kolaylaştırır.
İmport Statements
İmport statement verilen sınıfı bulması için derleyiciye konumu bildirme yoludur. Örneğin ;
1
|
import java.io.*;
|
Küçük Bir Örnek :
Bu örnekte iki tane sınıf oluşturulacaktır. Bunlar Employee ve EmployeeTest’tir.
Employee sınıfı public sınıftır. Employee dört instance değişkene sahiptir ; name, age, designation ve 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
|
import java.io.*;
public class Employee{
String name;
int age;
String designation;
double salary;
// Employee sınıfının yapılandırıcı metodu.
public Employee(String name){
this.name = name;
}
// Employee’nin yaşını atayan metot.
public void empAge(int empAge){
age = empAge;
}
/* Tayin değişkenine atama yapan metot.*/
public void empDesignation(String empDesig){
designation = empDesig;
}
/* maaş değişkenine atama yapan metot.*/
public void empSalary(double empSalary){
salary = empSalary;
}
/* Employee’nin bilgilerini ekrana yazdıran metot */
public void printEmployee(){
System.out.println(“Name:”+ name );
System.out.println(“Age:” + age );
System.out.println(“Designation:” + designation );
System.out.println(“Salary:” + salary);
}
}
|
Daha önceden de söylendiği gibi program main metottan başlar. Bu yüzden Employee sınıfını çalıştırmak için main metot olmalı ve nesneler oluşturulmalıdır. Bu işlem için ayrı sınıf oluşturulacaktır.
Aşağıda ki EmployeeTest sınıfı Employee sınıfından iki tane nesne oluşturur ve metotlarla her nesnenin değişkenlerine atama yapar.
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[]){
/* Yapılandırıcı metotlar kullanarak 2 nesne oluşturulur.*/
Employee empOne = new Employee(“James Smith”);
Employee empTwo = new Employee(“Mary Anne”);
// Metotlar çağırılarak her nesnenin değişkenlerine atama yapılır.
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();
}
}
|
Kodlar çalıştırıldığında şu sonuç elde edilir :
1
2
3
4
5
6
7
8
|
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0
|