Java’da soyutlama (Abstraction), nesne yönelimli programlamanın yapı taşlarından biridir. Java’da soyutlama, gereksiz ayrıntıları göz ardı ederek bir nesnenin yalnızca gerekli özelliklerini belirleme işlevi olarak da nitelendirilebilir. Bir bilgisayarı kullanan bir kişiyi düşünün, bilgisayarı kullanan kişi yalnızca bilgisayarı kullanır ancak arka planda ne gibi işlemlerin döndüğünü bilemez. Soyutlama aslında budur. Java’da soyutlama işlemini yapmak için soyut sınıf (abstract class) ve arayüzler (interface) yapılarını kullanırız.
Java’da Soyutlama (Abstraction) Avantajları
- Kod yinelemesini önler ve kodun yeniden kullanılabilirliğini sağlar.
- Kullanıcıya yalnızca gerekli ayrıntılar verildiği için bir uygulama veya programın güvenliğini artırmaya yardımcı olur.
- Kodlardaki karmaşıklığı azaltır.
Konumuzu örnekler ile pekiştirelim ve kullanım mantığını anlayalım:
1. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | abstract class ornek { // soyut sınıf metodu oluşturduk public void cıktı() { System.out.println("Kod kampüsüne hoş geldiniz."); } } //ornek sınıfını miras alan bir main sınıfı oluşturduk class Main extends ornek { public static void main(String[] args) { // main nesnnesi oluşturduk Main main = new Main(); main.cıktı(); } } |
Ekran Çıktısı
1 | Kod kampüsüne hoş geldiniz. |
Yaptığımız 1. örnekte ilk olarak ornek adında soyut bir sınıf oluşturduk. Ornek sınıfımızın içerisine cıktı() metodunu oluşturduk. Sonrasında Main sınıfımızda bir nesne oluşturduk ve bu nesneyi kullanarak cıktı() metodumuzu çağırdık
2. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public abstract class meyve { private String ad; public void adbelirt (String ad) { this.ad=ad; //meyve adı belirttik. } public String adgetir() { return this.ad; //meyvemizin adını döndürecek metot } //soyut metodumuzu tanımladık public abstract String meyveadı(); } |
Soyut sınıfımızı abstract anahtar kelimesiyle belirterek tanımladık. Meyve sınıfımızı miras alacak sınıflar, belirtmiş olduğumuz soyut metodumuzu override edecektir. Soyut metodumuz ise meyveadı(); metodudur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class kiraz extends meyve { private String renk; private double fiyat; public void ozellik(String renk, double fiyat) { //kiraz nesnemizin özelliklerini belirttik. adbelirt("Kiraz"); this.renk=renk; this.fiyat=fiyat; } public String meyveadı() { //return yöntemi ile renk ve fiyatı geri döndürdük. return (renk+fiyat); } } |
Bundan sonra meyvelerimiz için ayrı ayrı sınıflar oluşturduk ve bu kodları tanımladık. Meyve sınıfımızı miras alan bir kiraz sınıfı oluşturduk. Oluşturduğumuz kiraz sınıfımızın içerisinde özelliklerimizi belirttik.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class portakal extends meyve { private String renk; private double fiyat; public void ozellik(String renk, double fiyat) { //portakal nesnemizin özelliklerini belirttik. adbelirt("Portakal"); this.renk=renk; this.fiyat=fiyat; } public String meyveadı() { //return yöntemi ile renk ve fiyatı geri döndürdük. return (renk+fiyat); } } |
meyve sınıfımızı miras alan bir portakal sınıfı oluşturduk. Bu portakal sınıfımızın içerisinde özelliklerimizi belirledik.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class karpuz extends meyve { private String renk; private double fiyat; public void ozellik(String renk, double fiyat) { //karpuz nesnemizin özelliklerini belirttik. adbelirt("karpuz"); this.renk=renk; this.fiyat=fiyat; } public String meyveadı() { //return yöntemi ile renk ve fiyatı geri döndürdük. return (renk+fiyat); } } |
meyve sınıfımızı miras alan bir karpuz sınıfı oluşturduk. Bu karpuz sınıfımızın içerisinde özelliklerimizi belirledik.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class ornek { public class ornek { public static void main (String[] args) { //nesnelerimizi oluşturduk. kiraz kiraz2 = new kiraz(); portakal portakal2 = new portakal(); karpuz karpuz2 = new karpuz(); //meyvelerimizin fiyatlarını ve renklerini yazdık. kiraz2.ozellik("Kırmızı = ", 8.99); System.out.println(kiraz2.adgetir()); System.out.println(kiraz2.meyveadı()); System.out.println("*********************************"); portakal2.ozellik("Turuncu = ", 6.99); System.out.println(portakal2.adgetir()); System.out.println(portakal2.meyveadı()); System.out.println("*********************************"); karpuz2.ozellik("Yeşil = ", 9.99); System.out.println(karpuz2.adgetir()); System.out.println(karpuz2.meyveadı()); } } |
ornek sınıfımızın içerisinde meyvelerimizin rengi ve fiyatları belirtildi meyveadı(); metodumuzu sınıflar içerisinde override ettik ve bunun sonucunda bu metot sınıflar için özel bir duruma geldi.
Ekran Çıktısı
1 2 3 4 5 6 7 8 | Kiraz Kırmızı = 8.99 ********************************* Portakal Turuncu = 6.99 ********************************* karpuz Yeşil = 9.99 |
Karpuzun içi kırmızı deil mi