Mehmet Ethem SULAN :: Java Programlama Dili :: Java

OOP (object oriented Programming)
(Nesne Yönelimli Programlama)
1. Her şey bir nesnedir.
2. Bir program ne yapılması gerektiği hakkında birbirlerine mesajlar gönderen nesneler topluluğudur.
3. Her nesne, temel veri yapıları ve diğer nesnelerden oluşabilen bir bilgi bankasına sahiptir.
4. Belirli bir sınıfa ait nesneler aynı mesajları alıp, tepki verebilir.

James Gosling tarafından geliştirilmiş ve 1991’de java olarak Sun Microsystems tarafından duyurdu.

Java programı .java uzantısıdır. Derlenerek bytecode dönüşür. Bu java derleyicisi tarafından derlenerek bytecode heline gelir ve uzantısı .class olur. Bu .class Java Sanal Makinesi yorumlanarak çalıştırılır. Bu da taşınabilirliği sağlıyor. Çünkü java sanal makinesi farklı sistemlerde farklı olduğundan ve sisteme özel olduğundan bir nevi tercüman görevi üstlenir. Işte bu şekilde taşınabilirlik meydana gelir. Örnek verecek olsak İngilizce bilmeyen bir başbakana başka bir başbakanla konuşurken tercümanalr aracığıyla anlaşmaları yani sohbet etmeleri sağlanılır.
Işte buradaki o dil tercümanı farklıdırlar biri İngilizce diğeri Rusça … bilir.

Java Sürümleri
J2SE: Standart sürüm. Ilk çıkan yani bu jsf felan teknolojilerini içermeyen sürüm.
J2ME:Mikro sürüm. Son zamanlarda yaygın olan telefon ve uyd teknolojilerini destekler.
J2EE:Tüm yenilikleri içeren ve özellikle web için çok iyi özellik barındıran(üst düzey güvenlik) bir teknolojidir.

Javada en önemli şey hangi sınıfın hangi paket altında olduğunu bilmektir.
Paket:Birbirleriyle mantıksal olarak ilişkili sınıfların aynı klasör altında toplanmasdır.

Bazı java paketlerini açıklayalım;
Paketi uygulamalarımıza ekleyip içindeki sınıf ve metodları kullanmak için kendi
bulunduğumuz uygulamanın başına
import java.io.*;–>”*” io altındaki tüm sınıflar demek. “*” yerine tek bir sınıf lazımsa onu import ekleyebiliriz.
import java.io.CharArrayWriter;
Bu eğer tek bir sınıfa ihtiyacımız varsa tüm paketteki sınıfları eklemek performansı düşürür.

Paket oluşturmanın nedenlerinden bazıları karmaşıklığı azaltmak ve aynı isim de birden çok sınıf(farklı paketlerde olamk kaydıyla) tanımlamaya imkan sağlar.
Her sonıfın başına
package paketIsmi;(Hangi paket altındaysa sınıfımız onun ismi olmalı paketIsmi)
eklenmelidir.

Java.lang–>Dil ile ilgili sınıfları kapsar ve tanımlanmasa da otomatik olarak kullanılır.
Java.io–>Girdi/çıktı ile ilgili paketler.
Java.net–>Ağ işlemleri için gerekli sınıflar.
Java.sql–>Veritabanı uygulamları için gerekli sınıflar.
Javax.swing–>Javanın yeni görsel uygulama geliştirme sınıfları.
Java.awt–>Ilk görsel uygulama geliştirme sınıflar(import java.awt.color.*;).
Java.math–>Matematik için kullanılan sınıflar.
Java.security–>Güvenlik ile ilgili sınıflar.
Java.util–>Kullanışlı sınıflar(import java.util.zip.*;).

Java bir dilden çok bir teknolojidir.Bundan dolayı başka dillerle karşılaştırılmamalıdır.
Asıl çıkış sebebi web tir. En büyük özelliği tam bir nesne yönelimli olmasıdır.
Taşınabilir bir dildir ve platforumdan bağımsızdır. Bu da yavaş olmasına neden olur. Diğer önemli bir özelliği güvenliğin ön planda tutulmasıdır. Java web için oluşturulmuş bir dildir.
wepte de en önemli olan şey güvenliktir.

Java da en tepede object sınıf var ve tüm sınıflar bu sınıftan türemiştir. Kök sınıf ta denilir.
Biz extends ifadesiyle türetme yapmazssak bile otomatik türetiliyor kök sınıftan.

küçük bir örnek verelim.
// tek satırlık yorum yazmak içindir
package paketim; //Paketimizi ekledik ismi paketim
import javax.swing.border.MatteBorder; //MatteBorder sınıfını kullanmak için uygulamaya ekledik.
public class umlKavrami extends MatteBorder{ //MatteBorder sınıfdan kalıtım aldık.(extends ifadesi türetmeyi sağlar.)
public static void main(String[] args) {

System.out.println(“Merhaba ethemsulan.com”);
}
}

Java da zar atma oyunu aşağıdaki UML ye dayanarak yazıyorum. UML yapılacak işi şekilsel olrak şemalaştırılmasıdır. Şekli anlamaya çalışalım.
Die sınıfına ait integer tipinde faceValue isminde bir değişken tanımlamamız gerekiyor ve getFaceValue isminde int tipinde bir de metodu var son olarak ta son olarak ta roll isimin de void tipinde ikinci metoda sahip. () metoto anlamına geliyor.

Okun ucundaki 2 de bu Die class nın iki sefer çağrılacağını söylüyor.
DiceGame sınıfın da ise Die tipinde iki tane nesne üretmemizi istiyor die1 ve die2 isminde.
play() isimnde bir de metodu du var bu sınıfının.,

Şimdi oyunumuz şu bir zar 2 sefer atılacak zarların yüzeyindeki rakamların toplamı 7 ise oyunu kazanmış oluruz değil ise kaybetmiş olurz.

Eclips te ethemsulan isminde bir projemiz var.Bu projenin iki tane sınıfı var bir de pakete sahipler.
Paket birbiriyle ilişkili birden fazla java klassının bir araya gelmesidir.

Burda kodların ne iş yaptığını yanlarına not düşmüşüm.
Die sınıfı.

Basit bir uygulama. Bu uygulama da yapıcı(nesnelere ilk deger atan ve ismi sınıfın ismiyle aynı olan metod) tanımladık bu yapıcı ad,soyad,ve yas değişkenlerine set ile değer atıp get ile de değerleri okuyor.
private String ad;–>Bu sınıfa özel tanımşlanmış yerel değişkenlerdir. Sadece sınıfa ait metodlarla erişilir(get,set).
private anahtar kelimesi belirtmek zorundayız. Çünkü belirtmezsek java publick olarak kabul eder.
Yani değişkenin ya d ametodun başına “private,protected,public” hiç bir şey yazmazssak otomatik publick kabul eder.
int yas;–>yas değişkeni publick tir.

Bir sınıf oluşturulken eğer paket varsa en başta paket ismi olur.
package paketimiz;
sonra sınıf ismi yazılır.
public class temelBilgiler{
Sınıfımız bu tüm elemanlar bu arada {} içinde yazılır.
}
sınıfa özel olarak iki tane String tipinde, bir tane de int ve private yani o sınıfa özel değişken tanımlanmış.
p
ublick temelBilgiler(){};
Bunu yazmassak ta otomatik oluşturulur.
Fakat public temelBilgiler(String ad, String soyad, int yas){}
yapıcısı tanımladığımız için diğeriden yani parametre alamyan yapıcıdan bahsedemeyiz.
this anahtar kelimesi aynı isim de birden fazla değişken tanımlamamızı sağlıyor.
mesela yukardaki private olarak tanımlanan ad,soyad,yas ile yapıcının içindeki ad,soyad,yas aynı isimde dirler.
public String getAd(){
return ad;
}
Bu ad değişkenine değer atmak için kullanılan bir metottur.
public olması genel yani uygulama içinde her yerden ulaşılabilir.
String olması dizge tipinde bir deger geri döndermelidir. Eğer ki void olsaydı o zaman return kullanamazdık. Yani String,int vs gibi metota bir tip varsa mutlaka return kullanılmalıdır.
getAd ta metodun ismidir.
genelde küçük harfle başlar isim fakat birden fazla kelimeden oluşursa ikinci ve sonraki kelimeler büyük harfle başlarlar.Bu zorunlu değil ama profesyonel kullanıcılar böyle kullanırlar.
() bu da metod olduğunu gösterir.
{} arada kalan kısma da metodun gövdesi denir.Metodun yapacağı işi burda tanımlarız.
public void setYas(int yas){
this.yas=yas;
}
void olduğu için return kullanılmaz yani bir değer geri döndermeyiz.
Metoda int yas diye bir değer atıyacaz o metod
private int yas yani sınıfa ait olan yerel değişkene bu değeri atar.Aynı isim de tanımlanmışlar başka isimde de olabilir o zaman this anahtar kelimesine gerek kamaz.
mesela
public void setYas(int rastgele){
yas=rastgele;
}
public String toString(){

}
Bu da bütün değerleri stringe çevirerek ekrana yazdırır.
getAd() deki return ifadesi geriye ad değişkenin değerini dönderiri.

public statick void main(String[] args){

}
Bu main her programlama dilin başlangıç yeridir.
temelBilgiler adılı sınıfımızdan burdan nesne üretip nesne üzerinden yerel değişknelerimize erişiriz. Buna kapsüleme denir ve güvenliği sağlar.
temelBilgiler nesnem=new temelBilgiler(“ethem”,”sulan”,24);
temelBilgiler(“ethem”,”sulan”,24);–>Bu aslında yukarda yapıcı tanımlamıştık ya değişkenlere ilk değer atsın diye şimdi main() nin için de o yapıcıyı çağırıyoruz.
Dolayısıyla ad=ethem, soyad=sulan ve yas=24 eşit olur.
Ek bilgi;
Bunu da sysout yazip ctrl+space tuşuna basınca
idemiz System.Out.Println();–> şeklini tamamlar.

System.Out.Println(nesnem.toString());
Nesnem üzerinden toString() metodunu çağırıyoruz. O metdo da değişknelere atadığımızı değerleri string olarak ekrana yazar.
Ayrıntı ben nesnem.toString() yerine
nesnem.ad ya da nesnem.soyad ta diyebilirim ama kapsüllemeyi sağlamak dolayısıyla güvenlik için sınıfların private(sınıfa özel) değişkenlerine public metodlarla erişiyorum böylece güvenlik sağlanır. Yani öyle rastgele ben değişkene erişemiyecem.
Eğer böyle olmazssa büyük uygulamada aynı değişkene erişip değerini değiştirebilirim bu da benim programın yanlış sonuç üretmesine neden olacak ve bu tür hataları bulmak ta çok zordur.

Bu şekil daha açıklayıcı olmuştur sanırım.
Dairenin iindeki alan değişkenlerdir sadece metodlarla erişilir değişken programcı hem ve programdan korunmuş yani kapsüllenmiş olur.

Write a Comment

Let me know what you think?