8. Bölüm Java Nesneleri: Organizasyon

Transkript

8. Bölüm Java Nesneleri: Organizasyon
rg
rk
.o
Java ile Nesne Merkezli Programlamaya Giriş w
.ja
va
tu
8. Bölüm
Java Nesneleri: Organizasyon
w
w
Akın Kaldıroğlu www.javaturk.org Mayıs 2015 rg
Küçük Ama Önemli Bir Konu rk
.o
Ø  Bu dosya ve beraberindeki tüm, dosya, kod, vb. eğiAm malzemelerinin tüm w
w
w
.ja
va
tu
hakları Akın Kaldıroğlu’na aiEr. Ø  Bu eğiAm malzemelerini kişisel bilgilenme ve gelişiminiz amacıyla kullanabilirsiniz ve isteyenleri hIp://www.javaturk.org adresine yönlendirip, bu malzemelerin en güncel hallerini almalarını sağlayabilirsiniz. Ø  Yukarıda bahsedilen amaç dışında, bu eğiAm malzemelerinin, Acari olsun/
olmasın herhangi bir şekilde, toplu bir eğiAm faaliyeAnde kullanılması, bu amaca yönelik olsun/olmasın basılması, dağıRlması, gerçek ya da sanal/
Internet ortamlarında yayınlanması yasakRr. Böyle bir ihAyaç halinde lüTen benimle, [email protected] adresinden ileAşime geçin. Ø  Bu ve benzeri eğiAm malzemelerine katkıda bulunmak ya da düzeltme ve eleşArilerinizi bana iletmek isterseniz çok sevinirim. Ø  Bol Java’lı günler dilerim. www.javaturk.org
2
rg
rk
.o
tu
va
Organizasyon w
w
w
.ja
www.javaturk.org
3
rg
Kod Organizasyonu: Paketler rk
.o
Ø Java’da oluşturulan sınıfları (ve arayüzleri), manRksal .ja
va
tu
açıdan kategorize etmek, bu kategoriler arasında erişim kuralları koymak ve isim uzayı oluşturup çakışmaları önlemek amacıyla paketler vardır. Ø Paket "package" anahtar kelimesiyle oluşturulur. Ø Her sınıf tanımından önce yazılacak bir package cümlesiyle o pakete ait olur. w
w
package myPackage;
w
ya da
package org.javaturk.oofp.ch01.car;
www.javaturk.org
4
rg
package I rk
.o
Ø Bir Java kaynak kodunda ancak bir tane paket ifadesi olabilir. tu
Ø Her sınıf, arayüz ya da enumın sadece bir tane pakeA olabilir. Ø Bir kaynak dosyasında birden fazla sınıf/arayüz varsa hepsi va
aynı pakete dahil olur. Ø package ifadesi bir Java kaynak kodunda çalışan ilk cümle .ja
olmalıdır. w
Ø package ifadesinden önce boşluk ve yorum saRrları olabilir. w
Ø Paket yapısı, .class dosyaları için geçerli ve gereklidir, .java w
kaynak kodları için değil! Ø Fakat genelde kaynak kodları da paketleriyle düzenlenir. www.javaturk.org
5
rg
package II rk
.o
Ø İç içe paketlerle paket hiyerarşisi oluşturulabilir. tu
Ø Böylece bir kökten (root) başlayarak dallanan alt paketlerle, .ja
va
çok sayıda sınıf ve arayüzden oluşan yapılar, anlamlı kategorizasyona ve buna karşılık gelen fiziksel organizasyona sahip olur. w
gelir. w
Ø Paketler, işleAm sistemindeki dizinlere (directory) karşılık w
Ø Dolayısıyla aynı pakeIeki yapılar aynı dizinde bulunurlar. www.javaturk.org
6
rg
rk
.o
tu
va
.ja
w
w
package shipping.domain;
package shipping.domain;
w
package shipping.gui;
package shipping.reports;
www.javaturk.org
// Company.java
// Vehicle.java
// MainMenu.java
// DailyReport.java
7
rg
package III rk
.o
Ø Kategorizasyon kriteri olarak amaç seçilebilir. va
tu
Ø Amaçtan kasıt, fonksiyonellikAr. Ø Aynı amaca yönelik oluşturulan sınıf ve arayüzler aynı .ja
pakeIe olur. Ø  Grafik arayüz, entegrasyon ya da veri gibi katmanlar, w
Ø  Müşteri ve banka hesabı gibi iş alanı grupları, w
Ø  Loglama veya transacAon gibi farklı vecheler (aspects), w
paket oluşturmak için aday kategorizasyonlardır. www.javaturk.org
8
rg
rk
.o
tu
va
.ja
w
...
w
package org.javaturk.oop.ch07.university;
package org.javaturk.oop.ch07.university;
// Course.java
// Course.java
w
package org.javaturk.oop.ch07.thisKeyword.bank; // Bank.java
package org.javaturk.oop.ch07.thisKeyword.bank; // Account.java
package org.javaturk.oop.ch07.thisKeyword.bank; // Customer.java
www.javaturk.org
9
rg
package IV rk
.o
Ø PakeAn bir diğer amacı da bir isim uzayı (namespace) w
.ja
va
tu
oluşturarak, muhtemel çakışmaları önlemekAr. Ø Bir projede yazılan bir kaç tane farklı Printer ya da Date sınıfnın, birbileriyle ya da saRn alınan bileşenlerdeki aynı isimdeki sınıflarla karışmasını önlemenin yolu, her bir Printer ya da Date sınıfnın apayrı pakete sahip olmasıdır. Ø Bu amaçla, Internet domain adresini tersinden kullanarak paketler oluşturduğunda çakışma olmayacakRr. w
w
com.myCompany.myProject.mySubPackage
org.javaturk.oop
org.javaturk.advancedJava
org.javaturk.javaee
org.javaturk.dp
www.javaturk.org
10
rg
package IV rk
.o
Ø java.* ve javax.* şeklindeki paketler ayrılmışRr, bu şekilde va
tu
yeni paket oluşturulamaz. Ø Bu şekildeki bir pakeIe bir sınıf oluşturulup çalışRrılırsa, aşağıdaki hata alınır: .ja
Ø ExcepAon in thread "main" java.lang.SecurityExcepAon: w
w
w
Prohibited package name: java www.javaturk.org
11
rg
Tam İsim rk
.o
Ø Bir pakete sahip olan bir sınıfn tam ismi (fully qualified .ja
va
tu
name) arRk "paket.sınıfİsmi" olarak değişmişAr. Ø JVM’e (java) geçilirken arRk tam ismiyle geçilmesi gereklidir. Ø Daha önce de belirAldiği gibi bu durum .class dosyaları yani derlenmiş sınıflar için geçerlidir, .java dosyalarındaki kaynak kodlar için geçerli değildir. w
w
package shipping.domain;
javac Company.java
java shipping.domain.Company
w
package shipping.gui;
javac MainMenu.java
java shipping.gui.MainMenu
www.javaturk.org
// Company.java
// Compiling
// Running
// MainMenu.java
// Compiling
// Running
12
rg
Paketler Arası Erişim rk
.o
Ø Aynı paketlerdeki yapılar birbirlerine doğrudan erişebilirler. Ø Farklı paketlerdeki yapıların birbirlerine doğrudan va
tu
erişebilmeleri, ancak tam isim kullanmakla gerçekleşir: package org.javaturk.oop.ch08.packaging.packageX;
.ja
public class ClassX {}
w
package org.javaturk.oop.ch08.packaging.packageA;
w
public class ClassA {
org.javaturk.oop.ch08.packaging.packageX.ClassX x;
}
w
public ClassA(org.javaturk.oop.ch08.packaging.packageX.ClassX x) {
this.x = x;
}
www.javaturk.org
13
rg
import I tu
rk
.o
Ø Tam isim kullanarak erişimin sıkınRlı olduğu açıkRr: Ø Bu durumda farklı paketlerdeki yapılar birbirlerini import ederler. Ø import cümlesi, Java kaynak kodunda varsa package va
cümlesinden sonra gelir. .ja
package org.javaturk.oop.ch08.packaging.packageB;
w
import org.javaturk.oop.ch08.packaging.packageX.ClassX;
w
w
public class ClassB {
ClassX x;
public ClassB(ClassX x) {
this.x = x;
}
}
www.javaturk.org
14
rg
import II rk
.o
Ø Bir kaynak kodda birden fazla yapı import edilebilir. toptan import edilebilir. tu
Ø Bu durumda yapılar tek tek import edilebileceği gibi, "*" ile Ø "*" ile alt paketler import edilemez. va
package org.javaturk.oop.ch08.packaging.packageB;
w
.ja
import org.javaturk.oop.ch08.packaging.packageX.ClassX;
import org.javaturk.oop.ch08.packaging.packageX.ClassZ;
// ya da
import org.javaturk.oop.ch08.packaging.packageX.*;
w
w
public class ClassB {
ClassX x;
ClassZ z;
public ClassB(ClassX x, ClassZ z) {
this.x = x;
this.z = z;
}
}
www.javaturk.org
15
rg
Paketler ve Dizinler rk
.o
Ø Paketler, işleAm sistemindeki dizinlere karşılık gelir. Ø Dolayısıyla bir yapının pakeAnin org.javaturk.oop.ch02 w
w
.ja
va
tu
olması örneğin Windows işleAm sistemine bir yerde fiziksel olarak org\javaturk\oop\ch02\ şeklinde bir dizin yapısının bulunduğunu gösterir. Ø BelirAlen pakete sahip olan sınıfn .class dosyasının fiziksel olarak, pakete karşılık gelen dizinde olması şaror. Ø Bu şart .java kaynak kodu için geçerli değildir. Ø Dolayısıyla paket aslında bir çalışma zamanı yapısıdır ve .class dosyalarını ilgilendirir. Ø .java kaynak kodları tamamen farklı bir dizin yapısında w
olabilir. www.javaturk.org
16
rg
Bir Dizine Derlemek rk
.o
Ø Java kaynak kodları derlenirken "-­‐d" seçeneği ile bir dizin tu
geçilirse, javac, paket yapısına uygun olarak .class dosyalarını belirAlen dizine koyacakRr. .ja
va
package org.javaturk.oop.ch08;
...
public class Bulp{...}
w
w
w
C:> javac –d C:\classes Bulp.java
www.javaturk.org
17
rg
rk
.o
tu
va
Classpath w
w
w
.ja
www.javaturk.org
18
rg
CLASSPATH rk
.o
Ø Bir yapının pakeAnin org.javaturk.oop.ch02 olması örneğin w
w
w
.ja
va
tu
Windows işleAm sisteminde bir yerde org\javaturk\oop
\ch02\ şeklinde bir dizin yapısının bulunmasını gerekArir. Ø Yukarıda bahsedilen "bir yer”, CLASSPATH’dir. Ø Yani JVM, kendisine geçilen .class dosyalarını sadece, CLASSPATH sistem değişkenine eklenmiş dizinlerde arar. Ø Dolayısıyla bir A sınıfnın pakeA x.y ise, .class dosyası y dizininde ve y dizini de x dizininin alRndadır. Eğer x dizini de örneğin "C:\"de ise bu durumda CLASSPATH’de "C:\" dizini bulunmalıdır. Ø Bu durumda JVM, CLASSPATH’de bulunan dizinlerde önce x dizinini, onu bulunca da içinde y dizinini, onu bulunca da içinde A.class dosyasını arar. www.javaturk.org
19
rg
CLASSPATH’e Dizin Ekleme -­‐ I va
tu
rk
.o
Ø dizin 3 şekilde eklenir: Ø javac ve java komutlarında -­‐classpath seçeneğiyle Ø CMD (ya da TERM/XTERM vb. CLASSPATH’e konsollarda) Ø System değişkeni olarak ekleyerek Ø "." ile bulunduğunuz dizini CLASSPATH’e eklemek kolaylık .ja
sağlar. w
C:> java -classpath C:\bin org.javaturk.oop.ch08.Bulp
w
C:\>set CLASSPATH=C:\bin
w
C:\>java org.javaturk.oop.ch08.Bulp
www.javaturk.org
20
rk
.o
Ø Windows rg
CLASSPATH’e Dizin Ekleme -­‐ II C:\>set CLASSPATH=C:\bin
/Users/akin >export CLASSPATH=/Users/akin/bin
va
Ø Mac OS tu
C:\>java org.javaturk.oop.ch08.Bulp
w
akin: ~$ export CLASSPATH=C:\bin // bash/ksh
akin: ~$ setenv CLASSPATH C:\bin // csh/tcsh
w
Ø Linux .ja
/Users/akin >java org.javaturk.oop.ch08.Bulp
w
akin: ~$ java org.javaturk.oop.ch08.Bulp
www.javaturk.org
21
rg
rk
.o
Microsov Windows 5
2
w
w
w
4
.ja
va
tu
1
3
www.javaturk.org
22
rg
Mac OS ve Linux tu
rk
.o
Ø Mac OS için Ø launchctl setenv variable "value” ya da Ø /Users/akin/.bash_profile dosyasında export CLASSPATH=... w
w
w
.ja
va
Ø Linux için Ø .bashrc dosyasında export CLASSPATH=... Ø .cshrc dosyasında setenv CLASSPATH ... www.javaturk.org
23
rg
Uygulama rk
.o
Ø Daha önce basit bir editör kullanarak yazdığınız Selam ve .ja
va
tu
SelamTest sınıflarına gerekli "package" ve "import" cümlelerini koyarak, aşağıdaki gibi bir paket yapısına sahip olmalarını sağlayın. Ø javac ile derlerken "–d" seçeneğini kullanın. Ø Gerekli CLASSPATH ayarlarını 3 farklı şekilde yaparak SelamTest’i çalışRrın. w
w
w
package x.y;
...
public class Selam{...}
ve
package u.v;
...
public class SelamTest{...}
www.javaturk.org
24
rg
Uygulama rk
.o
Ø Aynı paket yapısını Eclipse üzerinde kurun ve SelamTest’i tu
çalışRrın. Ø Projenin özelliklerine giderek CLASSPATH ayarlarını w
w
w
.ja
va
gözlemleyin. www.javaturk.org
25
rg
rk
.o
tu
va
Java Paketleri w
w
w
.ja
www.javaturk.org
26
rg
Java Paketleri w
w
.ja
va
tu
rk
.o
Ø Java’da pek çok pakete sahipAr: Ø java.lang: Java’nın en temel yapılarını barındırır. Ø java.io: Giriş-­‐çıkış ve dosya işlemlerine yönelik yapılar bulunur. Ø java.sql: Java’nın veri tabanı ileAşimi yapılarını barındırır. Ø java.uAl: Torba altyapısı, date ve Ame gibi araç yapıları bulunur. Ø javax.net: Ağ yapıları bulunur. Ø Bu paketlerden java.lang her Java kaynak koduna daima otomaAk olarak import edilir. w
Ø Java’nın paketleri ve içerikleri, Java API’sini oluşturur. www.javaturk.org
27
rg
Java Development Kit rk
.o
Ø Java Development Kit (JDK), Java SE implementaAonudur. Ø JDK, içinde javac ve java gibi araçlarla birlikte Java w
w
w
.ja
va
tu
programlamada kullanılacak yapıların bulunduğu paketleri barındırır. www.javaturk.org
28
rg
rk
.o
tu
va
Sarmalama (Encapsulation) w
w
w
.ja
www.javaturk.org
29
rg
Sarmalama (EncapsulaAon) I rk
.o
Ø Verinin, o veri üzerinde çalışacak metotlarla birlikte bir yapı tu
alRnda toplanmasına sarmalama ya da encapsulaCon denir. Ø Sarmalama, soyutlamayı tasarlanmış halidir. va
Ø Programlama dillerinde eskiden bu yana, soyut veri yapılası w
w
w
.ja
(abstract data type) ya da kullanıcı tarafndan oluşturulmuş veri Api (user-­‐defined data type) adları alRnda var olan bir kavramdır. Ø Fakat bu yapılar, sarmalama örneği olmakla birlikte nesne-­‐
merkezli dillerin “nesne” kavramından farklı olarak daha teknik bir çıkış noktasına sahipArler. www.javaturk.org
30
rk
.o
Ø Nesne-­‐merkezli dillerde en temel rg
Sarmalama (EncapsulaAon) II Ø Sınıflar, soyutlamaların tu
sarmalama mekanizması sınıvır (class). va
gerçekleşArildiği yapılardır. Ø Nesneler ise soyutlamaların gerçek Soyutlama Sarmalama Sınıf Somut w
w
w
.ja
örnekleri, sınıfların nesneleridir. Ø Sarmalama ile bir sınıvan üreAlecek olan nesnelerin veri yapıları ile davranışları, manRksal bir birim haline geArilir. Soyut www.javaturk.org
31
rg
Bilgi Saklama (InformaAon Hiding) I rk
.o
Ø Bu yapıya sarmalama ya da encapsulaAon denmesinin .ja
va
tu
sebebi, bu teknik ile sarmalanan yapının iç mekanizmasının dışarıdan saklanmasıdır. Ø Bu durum, bilgi saklama (informaAon hiding) ile ifade edilir ve bazılarınca sarmalamanın içinde bir teknik olarak görülürken, bazılarınca sarmalamaya ek, tamamlayıcı bir teknik olarak ele alınır. w
Ø Bazen gerçekleşArme saklama (implementaAon hiding) ile birlikte anılır. w
Ø Sarmalama, bilgi saklama prensibiyle birlikte, bir sınıfn iç w
yapısını dışarıdan saklarken, arayüzü üzerinden dışarıya yani istemcilerine hizmet vermesini sağlar. www.javaturk.org
32
rg
"Ne"lik ile "Nasıl"lık rk
.o
Ø Sarmalama ve bilgi saklama sayesinde, nesneler, iç tu
yapılarını dışarıdan koruyarak, metotları vasıtasıyla sorumluluklarını yerine geAriler. Ø Bu ise "nasıl"lık ile "ne"lik arasındaki ayırımdır. va
Ø "Ne"lik verilen hizmeA tanımlar .ja
Ø "Nasıl"lık ise verilen hizmeAn nasıl gerçekleşArildiğini açıklar. Ø "Ne"lik arayüz, "Nasıl"lık ise gerçekleşArme yani arayüzün w
w
w
arkasında veri yapıları ve koddur. Ø Bu durum arayüz (interface) ile gerçekleşArme (implementaAon) ayrımı olarak adlandırılır. www.javaturk.org
33
rg
Yazılım ve Karmaşıklık rk
.o
Ø Yazılım, kavramsal ve zihin-­‐yoğun, kendine has özellikleri tu
olan bir disiplindir. Ø Yazılımın çıkRsı ile diğer mühendisliklerin çıkRsı çok farklıdır. va
Ø ÜreAmi daha doğrusu gelişArilmesi de farklı süreçlerle yöneAlir. .ja
Ø Yazılımların büyümesindeki kendine has unsurlar, w
w
w
durumlarının (state) sayısının ölçülebilir ve kontrol edilebilir olmaması, var olan ortama ayak uyduranın daima yazılım olması vb. özelliklerden dolayı yazılımlar, pek çok mühendislik ürününden daha karmaşık yapıdadırlar. www.javaturk.org
34
rg
Yazılım ve Değişim I rk
.o
Ø Yazılım sistemlerinin hayatları insanların kafasında tu
kavramsal bir çekirdek ile başlar ve en temelde gelişArme ve bakım olmak üzere iki temel sa~aya ayrılır. va
Ø Pek çok mühendislik ürününün tersine, yazılım ürünlerinin .ja
bakım sa~ası, gelişArme sa~asından daha uzun ve pahalıdır. w
Ø Yeni ihAyaçlar, yeni teknolojiler, yeni kullanıcılar, yeni w
w
entegrasyon noktaları vs., temelde iş ortamının dinamik yapısına uygun olarak yazılım sistemleri devamlı sureIe değişime tabi tutulur. www.javaturk.org
35
rg
Yazılım ve Değişim II rk
.o
Ø Dolayısıyla yazılımlar, bir kere yapılan ve temel yapısıyla va
tu
alakalı hiçbir değişime girmeden senelerce yaşayan diğer mühendislik ürünlerinin tersine, çok sık değişebilecek ve ancak bu şekilde hayaIa kalacak şekilde gelişArilmelidirler. Ø Yazılımın tamamen soyut ve kavramsal yapısı ele w
.ja
alındığında, zaten var olan algının da yazılımın değişiminin çok kolay olacağı yönündedir. w
Ø Bir sistemin değişimini kolay ya da zor oluşunu belirleyen w
en temel şey, değişecek kısmın, diğer kısımlardan ne derece yalıRlmış olduğudur. www.javaturk.org
36
rg
Bağımlılık rk
.o
Ø Yazılım sistemlerindeki yapıların birbirleriyle olan w
w
w
.ja
va
tu
ilişkilerinin derecesine bağımlılık (coupling) denir. Ø Bir yazılım sisteminde, bağımlılığı az olan yapılarda yapılacak değişikliklerin, diğer yapılara olan etkisi, bağımlılığın daha çok olduğu durumlara göre çok daha kolay olacakRr. Ø Elemanlarının birbirlerine olan bağımlılığı az (lowly-­‐
coupled) olan yazılım yapıları, yazılımın değişebilirliğini kolaylaşRran en temel etkendir. Ø hIp://en.wikipedia.org/wiki/
Coupling_(computer_programming) www.javaturk.org
37
rg
İç Bütünlük rk
.o
Ø Yazılım yapılarının bağımlılığını azaltan en temel şey, iç w
.ja
va
tu
bütünlük’tür (cohesion). Ø Eğer bir sınıf, sadece bir şeyi soyutlar ve onunla ilgili sistemde olabilecek her türlü bilgi ve sorumluluğu kendi içinde barındırısa, bu yapının iç bütünlüğü yüksek (highly-­‐
cohesive), dışarıyla olan ilişkileri ise nispeten az olacakRr. Ø İç bütünlüğü düşük yapılarda, bilgi ve sorumluluk, bir yerde toplanacağına birden fazla yapıya dağılmış durumdadır. w
Ø Bu durum da iç bütünlüğü azalRp, bağımlılığı arorır. w
Ø hIp://en.wikipedia.org/wiki/Cohesion_(computer_science) www.javaturk.org
38
rg
w
w
w
.ja
va
tu
rk
.o
DataOnlyElevator.java www.javaturk.org
39
w
w
w
.ja
va
tu
rk
.o
rg
UnEncapsulatedElevator.java www.javaturk.org
40
rg
Bilgi Saklama (InformaAon Hiding) II rk
.o
Ø Bağımlılığı düşük ve iç tutarlılığı (lowly-­‐coupled and highly-­‐
va
tu
cohesive) yüksek sınıflar oluşturmak için nesne merkezli dillerde bilgi ve gerçekleşArme saklamayı (informaAon and implementaAon hiding) sağlayan erişim niteleyiciler (access modifiers) vardır. .ja
Ø Bu yapılar sayesinde sınıflar ve sınıfların iç yapıları, w
w
dışarıdan doğrudan erişimden saklanabilir. Ø Law of Demeter w
hIp://en.wikipedia.org/wiki/Law_of_Demeter www.javaturk.org
41
rk
.o
tu
Ø İki tür erişim niteleyici vardır: Ø Sınıf erişim niteleyicileri Ø Üye erişim niteleyicileri rg
Erişim Niteleyiciler (Access Modifiers) Ø private w
Ø public .ja
mevcuIur: va
Ø Erişim niteleyiciler için aşağıdaki anahtar kelimeler w
w
Ø protected www.javaturk.org
42
rg
Sınıf Erişim Niteleyicileri rk
.o
Ø Sınıflar için 2 seviyeli erişim söz konusudur. Ø Bu iki seviye public anahtar kelimesinin var oluduğu ve tu
olmadığı 2 durumla belirlenir: Ø public: Public sınıflara her yerden erişilebilir. public sınıflar, kendi ismine sahip .java kaynak dosyalarında bulunmalıdırlar. va
Ø 
.ja
Ø Varsayılan (public kelimesi yok): Bu durumda sınıfa sadece Bu erişime paket erişimi (package accessibility), varsayılan erişim (default accessibility) ya da arkadaşça erişim (friendly access) denir. w
w
Ø 
w
içinde bulunduğu pakeIen ulaşılabilinir. www.javaturk.org
43
w
w
w
.ja
va
tu
rk
.o
rg
ClassA.java, ClassXX.java ve ClassZZ.java www.javaturk.org
44
rg
Üye Erişim Niteleyicileri I .ja
va
tu
rk
.o
Ø Üyelere erişim için 4 seviye vardır: Ø public Ø protected Ø Varsayılan (default), hiç bir niteleyicinin kullanılmadığı durumdur. Ø private Ø public olan üyelere her yerden erişilir. Ø private olan üyelere, sadece içinde bulunduğu sınıvan w
w
w
erişilir, dışarıdan erişime tamamen kapalıdır. Ø Varsayılan halde erişim sadece paket içindeki sınıflara açıkRr. Ø protected, devralan alt sınıflarca erişime açıkRr. www.javaturk.org
45
public Herkes (Farklı Pakette) + + + -­‐ + + -­‐ -­‐ + -­‐ -­‐ -­‐ w
w
w
-­‐ (varsayılan) private Çocukları (Farklı Pakette) .ja
protected + + + + Paketi tu
Kendisi va
Niteleyici rk
.o
rg
Üye Erişim Niteleyicileri II www.javaturk.org
46
w
w
w
.ja
va
tu
rk
.o
rg
ClassP.java ve ClassA.java www.javaturk.org
47
rg
public, protected, Varsayılan ve private rk
.o
Ø public: Genel olarak metotlar public yapılır. Çünkü metotlar nesnenin arayüzüdür. tu
Ø staAc ve final olan değişkenler de genelde public olurlar. Ø protected: Başkasının ulaşamayıp, sadece devralan va
sınıfların ulaşabilecekleri protected yapılır. .ja
Ø protected, farklı pakeIeki devralmayan sınıflara private’dır. Ø Varsayılan: Sadece aynı pakeIekilerin ulaşabileceği şeyler, w
w
w
varsayılan erişime tabi olur. Ø private: Bütün üye verilerle sadece iç çalışma için oluşturulmuş metotlar private yapılır. www.javaturk.org
48
w
w
w
.ja
va
tu
rk
.o
rg
EncapsulatedElevator.java www.javaturk.org
49
rg
Uygulama rk
.o
Ø Sadece bir nesnesi olan sınıflara "singleton" denir. Bu va
tu
durumda bütün bilgi ve hizmet sadece, singleton olan sınıfn var olan tek nesnesi üzerinden verilir. Bunun için de diğer nesnelerin tek olan bir nesneye ulaşmaları gereklidir. Ø Bir sınıvan sadece bir nesne oluşturulabilmesi için gerekli w
w
.ja
yapıyı kurun ve daha fazla oluşturulmasını engelleyin. Sonra da oluşturulan bu nesneye genel bir erişim noktası sağlayın. Ø Singleton sınıf yapmak yerine staAk metotları olan bir sınıf w
yapmayı düşünür müsünüz? TarRşın. www.javaturk.org
50
rg
public Erişim ve API rk
.o
Ø API, ApplicaCon Programming Interface’in kısaltmasıdır. tu
Ø API, bir sınıfn ya da sistemin (bileşen, çerçeve vs.) public olan üyelerine denir. .ja
va
Ø Miras amacıyla protected olan üyeler de API’ye dahildirler. w
Ø API, bir yazılım yapısının arayüzüdür, tek ileAşim noktasıdır. w
Ø Sınıflar ya da sistemler, ancak arayüzleri yani API’leri ile w
ulaşılır ve hizmet alınır. www.javaturk.org
51
rg
Arayüz ve GerçekleşArme rk
.o
Ø İyi bir soyutlama, sadece basit bir kavramı ya da fiziksel nesneyi soyutlamalıdır. Ø O şey ile ilgili her türlü gerekli bilgiyi bilmeli ve sorumluluğu tu
yerine geArmeli, o şeyle ilgili olmayan hiçbir bilgiyi bilmemeli ve sorumluluğu yerine geArmemelidir. va
Ø Soyutlamaların karmaşıklaşmaya başladığı her noktada yeni w
w
w
.ja
soyutlamalar oluşturulmalıdır. Ø Karmaşık bir sistemin hiç bir parçası, bir diğer parçanın iç yapısına bağımlı olmamalıdır. Ø Nesneler birbirlerinin arayüzlerine bağlı olmalılar, veri yapıları ile gerçekleşArmelerine bağlı olmamalıdırlar. Ø Program to an interface, not an implementaCon. www.javaturk.org
52
w
w
w
.ja
va
tu
rk
.o
rg
Date.java ve Calendar.java www.javaturk.org
53
rg
Yazılım Bileşeni (Sovware Component) I rk
.o
Ø Yazılım bileşeni (soMware component), tanımlı (specified), tu
kendi kendine yeten (selv-­‐contained) ve bir işi yerine geAren yazılım birimidir. Ø Yazılım bileşenleri, sadece bir sınıvan ibaret olabildiği gibi çok Ø 
va
daha fazla sayıda sınıf vb. yazılım yapılarını içerebilir. Genelde pek çok sınıvan bir araya gelirler. .ja
Ø Yazılım bileşenleri, görsel olabildiği gibi olmayabilir de. Ø Yazılım bileşenlerinin yapRğı iş basit bir hesaplamadan ibaret w
w
w
olabildiği gibi karmaşık bir sürecin yöneAmi de olabilir. Ø Yazılım bileşenleri, tanımlı bir API üzerinden özelliklerini dışarıya açarlar. Ø Yazılım bileşenleri birbirlerini içerebilirler. www.javaturk.org
54
rg
Yazılım Bileşeni (Sovware Component) II rk
.o
Ø Yazılım bileşenleri, farklı uygulamalarda, değişArilmeden tu
kullanılmak amacıyla tasarlanıp gerçekleşArilirler. Ø Amaç, diğer pek çok mühendislik ürününde olduğu gibi, .ja
va
yeni yazılımları, var olan bileşenlerden tekrar kullanım (reusability) yoluyla gelişArmekAr. w
Ø Bu anlamda yazılım bileşenleri, kara kutu tekrar kullanımı w
(black-­‐box reusability) sağlarlar. w
Ø Kutunun içini bilmeye gerek kalmadan sadece API’si üzerinden kutudan hizmet alınır. www.javaturk.org
55
rg
JavaBean I rk
.o
Ø Java’nın yazılım bileşeni "JavaBean"dir. Ø JavaBean, Sun’ın JavaBean tanımına uygun bir şekilde va
tu
oluşturulmuş bir yazılım bileşenidir (soMware component). Ø Bu anlamda JavaBean, Java’nın en temel bileşen mimarisidir (component architecture). .ja
Ø En temeldir çünkü, JavaBean tanımı özel bir sınıf tanımıdır. w
Ø Tanımında, JavaBean bileşenlerinin nasıl oluşturulacağı, API w
w
ve isimlendirme standartları yanında görsel araçlarla nasıl yöneAleceği, nasıl kalıcı hale (persistent) geArileceği gibi pek çok farklı bileşen vechesi ayrınRlı olarak açıklanmışRr. www.javaturk.org
56
rg
JavaBean II rk
.o
Ø Diğer özelliklerini bir kenara bırakırsak, bir sınıfn JavaBean olabilmesi için: tu
Ø Bir public varsayılan kurucusunun olması. Ø Varsa, durum bilgisini oluşturan değişkenlerin özellik Bir nesne değişkeninin özellik olabilmesi için, sınıfnda private olarak tanımlanmış olup, public set/get metotlarıyla ulaşılabilir olması gereklidir. .ja
Ø 
va
(property) olarak tanımlanmış olması. w
w
w
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
www.javaturk.org
57
rg
Nesne mi Basit Veri mi? rk
.o
Ø Soyutlamaların karmaşıklaşmaya başladığı her noktada yeni soyutlamalar oluşturulmalıdır. Ø Basit Aplerle ifade edilen yapıların karmaşıklaşmaya va
tu
başlaması, bu yapıların basit Aplerle değil de nesne olarak ifade edilmesini gerekli kılar. w
w
.ja
Ø Karmaşıklaşma, daha detaylı bilgiden kaynaklanır. Örneğin: Ø Format Ø YerelleşArme vs. w
Ø Address, PhoneNumber ya da Date bu duruma Apik örnekArler. www.javaturk.org
58
rg
rk
.o
tu
va
API ve Java API’si w
w
w
.ja
www.javaturk.org
59
rg
Java API I Ø public ve va
Ø protected üyeleridir. tu
kütüphanelerinin arayüzüdür: rk
.o
Ø API, ApplicaCon Programming Interface’in kısaltmasıdır. Ø Java API’si, Java’nın sanal makinasının ve standart Ø Windows için JDK kurulumundaki jre dizinindeki lib .ja
dizinindeki rt.jar dosyasındaki yapıların arayüzlerini içerir. Ø Sadece JRE kurulmuşsa lib dizininde bulunur. w
w
Ø Mac için JDK 1.6’da "classes.zip” 1.7’de rt.jar’dır. Ø Java SE DocumentaAon olarak w
hIp://www.oracle.com/technetwork/java/javase/
downloads/index.html adresinden indirilebilir. www.javaturk.org
60
rg
Java API II rk
.o
Ø Java API’sinde var olan pek çok sınıf ve benzeri yapılar, tu
tekerleği tekrardan keşfetmeden programlama yapmamızı sağlarlar. w
w
w
.ja
va
Ø İyi bir Java’cı, Java API’sini sık ve etkin bir şekilde kullanır. www.javaturk.org
61
rg
JDK Kaynak Kodu rk
.o
Ø Java SE’nin standart uygulaması olan JDK açık kaynak kodlu tu
olduğu için istenirse ilgili sayfadan o da indirilebilir. Ø hIp://www.oracle.com/technetwork/java/javase/
w
w
w
.ja
va
downloads/index.html www.javaturk.org
62
rg
Uygulama rk
.o
Ø Java SE’nin API’sini Internet’ten indirip açın. va
tu
Ø Java API’sinde var olan paketleri ve içeriklerini inceleyin. Ø Java API’sinde aşağıdaki sınıfları inceleyin: .ja
Ø java.lang.System w
Ø java.lang.Math w
w
Ø java.lang.String www.javaturk.org
63
rg
Özet rk
.o
Ø Bu bölümde, bir önceki bölümde detaylandırılan sınıf ve tu
nesne yapılarının organizasyonel tarafları ele alındı. va
Ø package, import anahtar kelimeleri ile CLASSPATH işlendi. .ja
Ø Sarmalama ve bilgi saklama prensipleri ile bunları w
w
uygulamak için gerekli olan erişim kontrol mekanizmaları ele alındı. w
Ø API kavramından bahsedildi ve Java API’si incelendi. www.javaturk.org
64
rg
rk
.o
tu
va
Uygulamalar w
w
w
.ja
www.javaturk.org
65
rg
Uygulamalar I rk
.o
Ø Java API’sinde bulunan bir sınıf kullanarak, bir meAnde geçen tüm kelimeleri bulun, ya da İngilizce olarak: tu
Ø Find all of the tokens in a string using a class found in Java API. Ø Bunun için Java API’sinden bu iş için java.u:l pakeAnden .ja
va
uygun bir sınıf bulup, API’sini kullanarak uygun kurucu ve metotların neler olduklarını belirleyin. Ø Daha sonra bu kurucu ve metotları çağırarak verilen bir String w
w
w
nesnesinin kelimelerini tek tek bulup ekrana yazın. Ø Daha sonra ayıraç olarak ‘a’ harfini kullanarak String nesnesini parçalayın. Ø String nesnesini, ayıraç olan ‘a’ harfini de basacak şekilde parçalayın. www.javaturk.org
66
rg
Uygulamalar II rk
.o
Ø Daha sonra aynı şeyi java.lang pakeAndeki String sınıf ile w
w
w
.ja
va
tu
yapın. www.javaturk.org
67

Benzer belgeler

9. Bölüm Tekrar Kullanım ve Kalıtım

9. Bölüm Tekrar Kullanım ve Kalıtım kullanabilirsiniz  ve  isteyenleri  hIp://www.javaturk.org  adresine  yönlendirip,   bu  malzemelerin  en  güncel  hallerini  almalarını  sağlayabilirsiniz.   Ø  Yukarıda...

Detaylı

1. Bölüm Java`ya Giriş

1. Bölüm Java`ya Giriş kullanabilirsiniz  ve  isteyenleri  hIp://www.javaturk.org  adresine  yönlendirip,   bu  malzemelerin  en  güncel  hallerini  almalarını  sağlayabilirsiniz.   Ø  Yukarıda...

Detaylı

製LЮ いつげ

製LЮ いつげ leslim s0res 10 gon ol€rak k€bul edrlecektr. Teshatta gecrtme durumunda geciken hor gon Ein ,atura tutaflnrn (Kov hari9) 0,001 (Bindebiri) oranlnda gocikme cezasr h6saplanerek tahalkuk 0z6dnd€n k€s...

Detaylı

Java ile Nesne-Merkezli Programlama

Java ile Nesne-Merkezli Programlama Ø  Bu  eğiAm  malzemelerini  kişisel  bilgilenme  ve  gelişiminiz  amacıyla   kullanabilirsiniz  ve  isteyenleri  hIp://www.javaturk.org  adresine  yönlendirip,   bu ...

Detaylı