JAVA OOP
OBJECT ORIENTED PROGRAMMING
(NESNEYE DAYALI PROGRAMLAMA)
Muhammed Yalçın
26.07.2019
Konular
● Reserve Edilmiş Kelimeler
● Package nedir? Ne işe yarar?
● Sınıflar(Class), Nesneler(Object) ve
Özellikler(Property)
● Constructor ve Methodlar
● Bellek Kullanımı (Heap ve Stack Alanlar)
● Access Modifiers (Erişim Değiştiricileri)
● Static ve Final Özelliği
● Encapsulation(Getter and Setter)
● Inheritance(Kalıtım)
● Polymorphism(Çok biçimcilik)
● Interface
● Abstraction(Soyutlama)
● Object Casting
Rezerve Edilmiş Kelimeler
Bu kelimeler Java kütüphanesindedir ve bir operasyonu gerçekleştirebilmek için
kullanılan kelimelerdir. Bu kelimeleri tanımlayıcı olarak kullanamayız.
Package nedir? Ne işe yarar?
Package: Anlamsal olarak aynı işi tanımlayan class gruplarını, interface gruplarını
veya alt package ları bir araya alıp kapsayan mekanizmadır. Örnek package ismi:
● Tanımlarken package com.sirketadi.projeadi;
● Kullanırken import java.util.*;
Neden package kullanmalıyız? Ne işe yarar?
● İsim karmaşasını önlemek için.
● Proje içerisinde aradığımız bir dosyayı(class, interface, enum vb.) rahatça bulup
erişebilmek için.
● Kontrollü erişimi sağlayabilmek için. Bu durum bir projede birden fazla package
varsa kullanılır.
Sınıflar ve Nesneler
Sınıf(Class): Nesne oluşturmak, veri tipi ve method tanımlamalarında
kullanılabilecek şablon veya kalıplardır.
● Sınıf isimleri singular(tekil) olmalıdır.
Nesne(Object): Mevcut veri içerisinde çalışan veri ve prosedürlerdir. Her nesne bir
duruma ve bir davranışa sahiptir.
● Bu durumlar properties(özellikler(değişkenler)) olarak mevcuttur.
● Davranışlar ise o nesneye ait methodlardır.
Not: Nesneler oluşturulurken new sözcüğü ile oluşturulur.
Constructor, Methodlar ve Property
● Constructor, bir class içerisinde default(varsayılan) olarak bulunan inşaatçı
methodlardır.
● Methodlar, bir class tan oluşan nesnenin davranışını belirten özellikleridir.
○ Geri dönüş tipleri olabilir(return statement(ifade)) veya olmayabilir(void statement(ifade)).
○ Methodlar tanımlamaları bir fiil(eylem) ile başlamalıdır ve sonuçta bir eylem belirtmelidir.
● Property (Özellik), primitive type (ilkel tip) veya herhangi bir Nesne(Object)
olabilirler. Bunun amacı sahip olduğumuz class’tan oluşacak nesne için özellik
tanımlamaktır.
○ Örnek property: private int color; private WheelModel wheel;
Bellek Kullanımı
Heap Memory: Java Runtime tarafından oluşturulan nesnelere ve JRE(Java Runtime
Environment) tarafından oluşturulan classlar hafızanın bu bölümünde tutulur.
Stack Memory: Method içerisinde tanımlanan değişkenler hafızanın bu bölümünde
tutulur. Ayrıca Heap Memory içerisinde bulunan nesnelerin referansları da bu
bölümde tutulur. Heap ile karşılaştırıldığında oldukça az bir boyutu vardır.
Buradaki önemli nokta ise Garbage Collector(Çöp Toplayıcı) adını verdiğimiz işlem
herhangi bir referansa ait olmayan nesneleri temizlemek için Heap Memory
üzerinde çalışır. Kısaca bize Runtime boyunca hafızada yer açar.
Heap Memory vs Stack Memory
● Heap Memory’deki değişkenler tüm uygulama tarafından ulaşılabilirken, Stack Memory’dekilere
sadece aynı Thread içerisinden ulaşılabilir.
● Stack Memory’ deki bellek yönetimi basit ve LIFO(Last In First Out) yani son giren ilk çıkar mantığı ile
çalışırken, Heap Memory’deki bellek yönetimi daha büyük ve karmaşık olduğu için içerisinde Garbage
Collector adını verdiğimiz bir işlem çalışır.
● Stack Memory kısa ömürlüdür, Heap Memory ise uygulamanın başından sonuna kadar tutulur.
● Stack Memory hem boyut olarak hem de bellek yönetimi olarak basit olduğundan Heap Memory’ e
göre daha hızlı hareket eder.(Değişkene erişim hızı olarak düşünebiliriz)
● Stack Memory dolarsa alınacak olan hata:
● Heap Memory dolarsa alınacak olan hata:
Örnek Bellek Kullanımı
Access Modifiers
Bir classın, constructorın, değişkenin (variable), methodun veya bir datanın(verinin)
ulaşılabilecek kapsamını kısıtlamaya yardımcı olur.
Java’da kullanılan 4 tip access modifers mevcuttur.
1. Default - Herhangi bir kelime yok.
2. Private
3. Protected
4. Public
Access Modifiers Devam
default private protected public
Aynı Class Evet Evet Evet Evet
Aynı Package
SubClass
Evet Hayır Evet Evet
Aynı Package
SubClass Değil
Evet Hayır Evet Evet
Farklı Package
SubClass
Hayır Hayır Evet Evet
Farklı Package
SubClass Değil
Hayır Hayır Hayır Evet
Erişim durumları gösterilmiştir
Static Özelliği
Static:
● Class’tan nesnesi üretilmeden ulaşılabilen method ve değişkenler yapmaya
yarar.
● O class oluşan her bir nesne için sürekli aynı özelliği gösterir. Öğrenci class’ının
içinde “mevcut” isminde bir static property olsun ve constructor’da +1 artsın. Bu
bize her öğrenci oluşturduğumuzda toplamda öğrenci class’ımızdan kaç
öğrenci oluşturduğumuzu verecektir.
● Static değişkenler Runtime boyunca memory’de tutulur.
● Static class’lar Java’da ana class olarak tanımlanamazlar. Fakat ana class
içinde class tanımlanırsa o class static tanımlanabilir.
Final Özelliği
final kelimesinin Java’da 4 alanda kullanımı mevcuttur.
1. Class içindeki final değişkenleri:
a. Bu değişkenlere sadece bir kez atama yapılabilir ve Runtime’da değiştirilemez. Bu atama işlemi
o sınıf içinde yapılır. Örnek olarak Pİ sayısının değerini bilindiği için doğrudan atama yapılabilir.
2. Method’a gönderilen final parametresi:
a. Bunun amacı ise fonksiyona veya methoda gönderdiğimiz değişkenin değiştirilmemesini
istiyorsak kullanırız.
3. Final Methodlar:
a. Üst sınıftaki methodun ondan türeyen subclass’lar içerisinde override edilmesini engeller.
4. Final Class’lar:
a. Final tanımlı class’lardan yeni bir class türetilebilmesini engeller.
Encapsulation(Getter and Setter)
Encapsulation işlemi bir class’ımız içindeki değişkenlere diğer class’lar tarafından
doğrudan müdahale edilmesini engellemek için kullanılır.
Eğer bir property’e encapsulation uygulayacaksak onu private yapıp o değişkeni
kotrol eden public bir get ve bir set methodu tanımlamamız yeterli olacaktır.
Encapsulation ile yapılabilecekler ise:
● Data Hiding,
● Read Only, Write Only property
Inheritance(Kalıtım)
● extends kelimesi kullanılarak gerçekleştirilir.
● Bir class birden fazla class’tan türetilemez. Ancak B classı A’dan türesin ve C
class’ı da B class’ından türeyebilir. Bir nevi Dede(A)->Baba(B)->Oğul(C) gibi.
● Bir class’tan birden fazla class türetilebilir.
● Reusability’i kod içerisinde sağlar. Aynı değişkenler tanımlanmaz. Üst
sınıflardan aktarılır.
● OOP’nin mihenk taşlarından diyebiliriz.
Polymorphism(Çok Biçimcilik)
Polymorphism bir class’tan farklı biçimlerde nesneler üretebilmektir.
Java’da polymorphism 2 şekilde olabilir.
1. Overloading(Aşırı yükleme)
a. Compiletime Polymorphism olarak adlandırılır.
i. Sebebi daha program çalışmadan hangi methodun çağrılması gerektiği bilinir.
2. Overriding(Ağır basma veya ezme)
a. Runtime Polymorphism olarak adalandırılır.
i. Sebebi daha program çalışmadan hangi methodu çalıştıracağını bilmez. Bunun sebebi
interface kullanımından veya abstract methodlardan kaynaklanmaktadır.
Overloading Polymorphism
Bu yöntem bir class’a ait constructor sayısını artırarak gerçekleştirilir.
Buradaki önemli nokta bu constructor’lar farklı sayıda parametreye sahip olmalı
veya farklı tiplerde olmalıdır.
Siz aynı zamanda o class’a ait diğer method’lara da overload yapabilirsiniz.
Overriding Polymorphism
Bu yöntem inheritance özelliği kullanılarak yapılmaktadır.
Örnek verirsek: Shape(Şekil) Class’ınız olsun ve bundan türeyen bir Circle(Daire)
Class’ınız ve Square(Kare) Class’ınız olsun. Son olarak bu üç class’ınızın içerisinde
de draw() isminde bir methodunuz olsun. Amacımız bu methoda polymorphism
kullanarak ulaşmak.
Interface
Interface’lerde aynı classlar gibi değişkenlere ve methodlara sahip olabilirler.
Aradaki temel farklar:
● class sözcüğü yerine interface sözcüğü yazılarak kullanılır.
● Interface’ler isimlendirilirken genelde “I” harfi ilk harf olur.
● interface’ler içerisindeki methodların body denilen kısımları yazılmaz. Bu durum default
abstract(soyut) olmalarından gelir. Ayrıca public’tirler.
● değişkenler initialize edilmelidir. Bu durum interface içerisinde kullanılan değişkenlerin
default final olarak tanımlanmasından gelir.
● Tanımlanan değişkenler default olarak public, static ve final türündedir.
● Java 8’ den beri interface’lerde static ve default anahtar sözcükleri ile kullanılan
methodların body’si olmalıdır.
● Interface’lerde final anahtar sözcüğü kullanılmaz.
Interface Devam
Java’da Interface ile ilgili diğer bilmemiz gerekenler ise şunlardır:
● implements anahtar sözcüğü ile bir class’a eklenirler.
● Interface’ler new anahtar sözcüğü ile kullanılırsa anonymous bir class’ a
implemente olurlar.
● Interface’ler class’lara implement olup o class’ın sözleşmesi niteliği taşırlar.
● Bir class bir interface’i implement eder ise o interface’e dair tüm method’ları
implement etmek zorundadır.
● Interface’ler kendi aralarında inheritance’ daki kurallara uyarak kalıtım
gerçekleştirebilirler.
● Bir class birden fazla interface’i implemente edebilir.
● Polymorphism interface’ler kullanılarak ta yapılabilmektedir.
Abstraction(Soyutlama)
abstract anahtar kelimesi ile oluşturulur.
İsminden anlaşılacağı üzere amaç class içerisindeki methodları class dışı çağrılırken
soyutlayabilmektir. Bu olayı şu şekilde özetleyebiliriz.
Bir arabanız var gaz ve fren pedalı var. Siz sadece o ikisini bilirsiniz. Fakat araba siz
o ikisinden birine basınca ne yapacağını bilir. Hızı artırır veya azaltır.
● Abstract ile yapılabilecek tüm senaryoları interface kullanarak ta yapabilirsiniz.
● Abstract kullanmak kodun complexity(karmaşıklık)’sini artıracaktır.
● Eğer bir class abstract class ise içerisinde abstract method tanımı yapılabilir ancak body’ si olamaz.
● Abstract class’lar implements değil extends edilirler.
● Ana class’ta abstract bir method var ise kalıtım alan sınıf bu methodu override etmek zorundadır.
● Abstract class’lar kullanılarak ta polymorphism yapılabilir
Object Casting
Java’da casting işlemi cast yapılmak istene objenin class isminin parantezler
içerisine yazılıp atanması ile gerçekleşir.
Java’da aralarında inheritance ilişkisi bulunan classlardan oluşan nesneler
birbirlerine upcasting veya downcasting yapabilirler.
Bu duruma örnek vermek gerekirse Hayvan isimli bir sınıfımız var ve bundan kalıtım
alan Kedi isimli bir sınıfımız olsun. Oluşturulan Hayvan nesnesine doğrudan Kedi
nesnesi herhangi bir cast işlemi yapılmadan ataması yapılabilir. Bu duruma
upcasting denir.
Object Casting Devam
Yine bir önceki örnekten gidelim. Bu seferde Hayvan sınıfına ait bir nesneye yeni bir
Kedi oluşturup atayalım. Ardından Kedi sınıfımızın içindeki miyav() isimli methodu
çağırmaya çalışalım. miyav() methodunu çağırabilmemiz için Hayvan nesnemizi Cat
nesnemize downcasting yapıp çağırabiliriz.
Object Casting Devam
Örnek Object Casting
Sorusu Olan ?

More Related Content

PDF
C# OOP
PPTX
Lecture - 2 Environment setup & JDK, JRE, JVM
PDF
Basics of reflection in java
PDF
Non-regression testing in web app development
PDF
BKK16-110 A Gentle Introduction to Trusted Execution and OP-TEE
PDF
OpenShift Virtualization - VM and OS Image Lifecycle
PPTX
Assemblies
PDF
A deep dive about VIP,HAIP, and SCAN
C# OOP
Lecture - 2 Environment setup & JDK, JRE, JVM
Basics of reflection in java
Non-regression testing in web app development
BKK16-110 A Gentle Introduction to Trusted Execution and OP-TEE
OpenShift Virtualization - VM and OS Image Lifecycle
Assemblies
A deep dive about VIP,HAIP, and SCAN

What's hot (20)

PPTX
Classes and Objects in C#
PDF
Infrastructure as Code with Terraform and Ansible
PDF
Strings in java
PPTX
Java Input Output (java.io.*)
PDF
Kubernetes networking & Security
PDF
An Introduction to OpenStack
PDF
Osic tech talk presentation on ironic inspector
PPTX
Java static keyword
PDF
Device Tree for Dummies (ELC 2014)
PPT
ClearCase Basics
PDF
Git and Github slides.pdf
PPTX
Linux Initialization Process (1)
PPTX
Basics of shell programming
PDF
Course 102: Lecture 4: Using Wild Cards
ODP
PPTX
Java version 11 - les 9 nouveautes
PPT
Git installation and configuration
PPTX
Java 17 features and implementation.pptx
PPTX
Jenkins, pipeline and docker
PDF
Exadata SMART Monitoring - OEM 13c
Classes and Objects in C#
Infrastructure as Code with Terraform and Ansible
Strings in java
Java Input Output (java.io.*)
Kubernetes networking & Security
An Introduction to OpenStack
Osic tech talk presentation on ironic inspector
Java static keyword
Device Tree for Dummies (ELC 2014)
ClearCase Basics
Git and Github slides.pdf
Linux Initialization Process (1)
Basics of shell programming
Course 102: Lecture 4: Using Wild Cards
Java version 11 - les 9 nouveautes
Git installation and configuration
Java 17 features and implementation.pptx
Jenkins, pipeline and docker
Exadata SMART Monitoring - OEM 13c
Ad

Similar to Java OOP (20)

PPTX
BilgeAdam Nesne Yönelimli Programlama
PPTX
Java Classes.pptx
PPTX
Base presentation
PPTX
Oop’nin temel ilkeleri
PPTX
PPTX
Design Patterns - Tasarım Şablonları Sunumu
PDF
Ankara JUG Şubat 2014 Etkinliği - Design Patterns
PPTX
Javascript Programming with OOP
PPTX
Object Oriented Programming BASIC DESIGN PRINCIPLES
PPTX
Effective Java - Madde 1: Yapılandırıcılar yerine statik fabrika(factory) met...
PPTX
Introduction to Java programming
PPTX
CSharp Programlama Dili ve Net Framework
PPTX
Azerbaycan Qafqaz Üniversitesi - (Java Persistence API) JPA ve Hibernate ile ORM
PPTX
Design Patterns (Tasarım Kalıpları)
PDF
Bilginç IT Academy - JPA (Java Persistence API)
ODP
JavaScript sunumu
PPTX
Kordsa Design Pattern Eğitimi
ODP
Hibernate ve jpa
PPT
Hibernate ve jpa
PPTX
Nedir Bu Java ?
BilgeAdam Nesne Yönelimli Programlama
Java Classes.pptx
Base presentation
Oop’nin temel ilkeleri
Design Patterns - Tasarım Şablonları Sunumu
Ankara JUG Şubat 2014 Etkinliği - Design Patterns
Javascript Programming with OOP
Object Oriented Programming BASIC DESIGN PRINCIPLES
Effective Java - Madde 1: Yapılandırıcılar yerine statik fabrika(factory) met...
Introduction to Java programming
CSharp Programlama Dili ve Net Framework
Azerbaycan Qafqaz Üniversitesi - (Java Persistence API) JPA ve Hibernate ile ORM
Design Patterns (Tasarım Kalıpları)
Bilginç IT Academy - JPA (Java Persistence API)
JavaScript sunumu
Kordsa Design Pattern Eğitimi
Hibernate ve jpa
Hibernate ve jpa
Nedir Bu Java ?
Ad

Java OOP

  • 1. JAVA OOP OBJECT ORIENTED PROGRAMMING (NESNEYE DAYALI PROGRAMLAMA) Muhammed Yalçın 26.07.2019
  • 2. Konular ● Reserve Edilmiş Kelimeler ● Package nedir? Ne işe yarar? ● Sınıflar(Class), Nesneler(Object) ve Özellikler(Property) ● Constructor ve Methodlar ● Bellek Kullanımı (Heap ve Stack Alanlar) ● Access Modifiers (Erişim Değiştiricileri) ● Static ve Final Özelliği ● Encapsulation(Getter and Setter) ● Inheritance(Kalıtım) ● Polymorphism(Çok biçimcilik) ● Interface ● Abstraction(Soyutlama) ● Object Casting
  • 3. Rezerve Edilmiş Kelimeler Bu kelimeler Java kütüphanesindedir ve bir operasyonu gerçekleştirebilmek için kullanılan kelimelerdir. Bu kelimeleri tanımlayıcı olarak kullanamayız.
  • 4. Package nedir? Ne işe yarar? Package: Anlamsal olarak aynı işi tanımlayan class gruplarını, interface gruplarını veya alt package ları bir araya alıp kapsayan mekanizmadır. Örnek package ismi: ● Tanımlarken package com.sirketadi.projeadi; ● Kullanırken import java.util.*; Neden package kullanmalıyız? Ne işe yarar? ● İsim karmaşasını önlemek için. ● Proje içerisinde aradığımız bir dosyayı(class, interface, enum vb.) rahatça bulup erişebilmek için. ● Kontrollü erişimi sağlayabilmek için. Bu durum bir projede birden fazla package varsa kullanılır.
  • 5. Sınıflar ve Nesneler Sınıf(Class): Nesne oluşturmak, veri tipi ve method tanımlamalarında kullanılabilecek şablon veya kalıplardır. ● Sınıf isimleri singular(tekil) olmalıdır. Nesne(Object): Mevcut veri içerisinde çalışan veri ve prosedürlerdir. Her nesne bir duruma ve bir davranışa sahiptir. ● Bu durumlar properties(özellikler(değişkenler)) olarak mevcuttur. ● Davranışlar ise o nesneye ait methodlardır. Not: Nesneler oluşturulurken new sözcüğü ile oluşturulur.
  • 6. Constructor, Methodlar ve Property ● Constructor, bir class içerisinde default(varsayılan) olarak bulunan inşaatçı methodlardır. ● Methodlar, bir class tan oluşan nesnenin davranışını belirten özellikleridir. ○ Geri dönüş tipleri olabilir(return statement(ifade)) veya olmayabilir(void statement(ifade)). ○ Methodlar tanımlamaları bir fiil(eylem) ile başlamalıdır ve sonuçta bir eylem belirtmelidir. ● Property (Özellik), primitive type (ilkel tip) veya herhangi bir Nesne(Object) olabilirler. Bunun amacı sahip olduğumuz class’tan oluşacak nesne için özellik tanımlamaktır. ○ Örnek property: private int color; private WheelModel wheel;
  • 7. Bellek Kullanımı Heap Memory: Java Runtime tarafından oluşturulan nesnelere ve JRE(Java Runtime Environment) tarafından oluşturulan classlar hafızanın bu bölümünde tutulur. Stack Memory: Method içerisinde tanımlanan değişkenler hafızanın bu bölümünde tutulur. Ayrıca Heap Memory içerisinde bulunan nesnelerin referansları da bu bölümde tutulur. Heap ile karşılaştırıldığında oldukça az bir boyutu vardır. Buradaki önemli nokta ise Garbage Collector(Çöp Toplayıcı) adını verdiğimiz işlem herhangi bir referansa ait olmayan nesneleri temizlemek için Heap Memory üzerinde çalışır. Kısaca bize Runtime boyunca hafızada yer açar.
  • 8. Heap Memory vs Stack Memory ● Heap Memory’deki değişkenler tüm uygulama tarafından ulaşılabilirken, Stack Memory’dekilere sadece aynı Thread içerisinden ulaşılabilir. ● Stack Memory’ deki bellek yönetimi basit ve LIFO(Last In First Out) yani son giren ilk çıkar mantığı ile çalışırken, Heap Memory’deki bellek yönetimi daha büyük ve karmaşık olduğu için içerisinde Garbage Collector adını verdiğimiz bir işlem çalışır. ● Stack Memory kısa ömürlüdür, Heap Memory ise uygulamanın başından sonuna kadar tutulur. ● Stack Memory hem boyut olarak hem de bellek yönetimi olarak basit olduğundan Heap Memory’ e göre daha hızlı hareket eder.(Değişkene erişim hızı olarak düşünebiliriz) ● Stack Memory dolarsa alınacak olan hata: ● Heap Memory dolarsa alınacak olan hata:
  • 10. Access Modifiers Bir classın, constructorın, değişkenin (variable), methodun veya bir datanın(verinin) ulaşılabilecek kapsamını kısıtlamaya yardımcı olur. Java’da kullanılan 4 tip access modifers mevcuttur. 1. Default - Herhangi bir kelime yok. 2. Private 3. Protected 4. Public
  • 11. Access Modifiers Devam default private protected public Aynı Class Evet Evet Evet Evet Aynı Package SubClass Evet Hayır Evet Evet Aynı Package SubClass Değil Evet Hayır Evet Evet Farklı Package SubClass Hayır Hayır Evet Evet Farklı Package SubClass Değil Hayır Hayır Hayır Evet Erişim durumları gösterilmiştir
  • 12. Static Özelliği Static: ● Class’tan nesnesi üretilmeden ulaşılabilen method ve değişkenler yapmaya yarar. ● O class oluşan her bir nesne için sürekli aynı özelliği gösterir. Öğrenci class’ının içinde “mevcut” isminde bir static property olsun ve constructor’da +1 artsın. Bu bize her öğrenci oluşturduğumuzda toplamda öğrenci class’ımızdan kaç öğrenci oluşturduğumuzu verecektir. ● Static değişkenler Runtime boyunca memory’de tutulur. ● Static class’lar Java’da ana class olarak tanımlanamazlar. Fakat ana class içinde class tanımlanırsa o class static tanımlanabilir.
  • 13. Final Özelliği final kelimesinin Java’da 4 alanda kullanımı mevcuttur. 1. Class içindeki final değişkenleri: a. Bu değişkenlere sadece bir kez atama yapılabilir ve Runtime’da değiştirilemez. Bu atama işlemi o sınıf içinde yapılır. Örnek olarak Pİ sayısının değerini bilindiği için doğrudan atama yapılabilir. 2. Method’a gönderilen final parametresi: a. Bunun amacı ise fonksiyona veya methoda gönderdiğimiz değişkenin değiştirilmemesini istiyorsak kullanırız. 3. Final Methodlar: a. Üst sınıftaki methodun ondan türeyen subclass’lar içerisinde override edilmesini engeller. 4. Final Class’lar: a. Final tanımlı class’lardan yeni bir class türetilebilmesini engeller.
  • 14. Encapsulation(Getter and Setter) Encapsulation işlemi bir class’ımız içindeki değişkenlere diğer class’lar tarafından doğrudan müdahale edilmesini engellemek için kullanılır. Eğer bir property’e encapsulation uygulayacaksak onu private yapıp o değişkeni kotrol eden public bir get ve bir set methodu tanımlamamız yeterli olacaktır. Encapsulation ile yapılabilecekler ise: ● Data Hiding, ● Read Only, Write Only property
  • 15. Inheritance(Kalıtım) ● extends kelimesi kullanılarak gerçekleştirilir. ● Bir class birden fazla class’tan türetilemez. Ancak B classı A’dan türesin ve C class’ı da B class’ından türeyebilir. Bir nevi Dede(A)->Baba(B)->Oğul(C) gibi. ● Bir class’tan birden fazla class türetilebilir. ● Reusability’i kod içerisinde sağlar. Aynı değişkenler tanımlanmaz. Üst sınıflardan aktarılır. ● OOP’nin mihenk taşlarından diyebiliriz.
  • 16. Polymorphism(Çok Biçimcilik) Polymorphism bir class’tan farklı biçimlerde nesneler üretebilmektir. Java’da polymorphism 2 şekilde olabilir. 1. Overloading(Aşırı yükleme) a. Compiletime Polymorphism olarak adlandırılır. i. Sebebi daha program çalışmadan hangi methodun çağrılması gerektiği bilinir. 2. Overriding(Ağır basma veya ezme) a. Runtime Polymorphism olarak adalandırılır. i. Sebebi daha program çalışmadan hangi methodu çalıştıracağını bilmez. Bunun sebebi interface kullanımından veya abstract methodlardan kaynaklanmaktadır.
  • 17. Overloading Polymorphism Bu yöntem bir class’a ait constructor sayısını artırarak gerçekleştirilir. Buradaki önemli nokta bu constructor’lar farklı sayıda parametreye sahip olmalı veya farklı tiplerde olmalıdır. Siz aynı zamanda o class’a ait diğer method’lara da overload yapabilirsiniz.
  • 18. Overriding Polymorphism Bu yöntem inheritance özelliği kullanılarak yapılmaktadır. Örnek verirsek: Shape(Şekil) Class’ınız olsun ve bundan türeyen bir Circle(Daire) Class’ınız ve Square(Kare) Class’ınız olsun. Son olarak bu üç class’ınızın içerisinde de draw() isminde bir methodunuz olsun. Amacımız bu methoda polymorphism kullanarak ulaşmak.
  • 19. Interface Interface’lerde aynı classlar gibi değişkenlere ve methodlara sahip olabilirler. Aradaki temel farklar: ● class sözcüğü yerine interface sözcüğü yazılarak kullanılır. ● Interface’ler isimlendirilirken genelde “I” harfi ilk harf olur. ● interface’ler içerisindeki methodların body denilen kısımları yazılmaz. Bu durum default abstract(soyut) olmalarından gelir. Ayrıca public’tirler. ● değişkenler initialize edilmelidir. Bu durum interface içerisinde kullanılan değişkenlerin default final olarak tanımlanmasından gelir. ● Tanımlanan değişkenler default olarak public, static ve final türündedir. ● Java 8’ den beri interface’lerde static ve default anahtar sözcükleri ile kullanılan methodların body’si olmalıdır. ● Interface’lerde final anahtar sözcüğü kullanılmaz.
  • 20. Interface Devam Java’da Interface ile ilgili diğer bilmemiz gerekenler ise şunlardır: ● implements anahtar sözcüğü ile bir class’a eklenirler. ● Interface’ler new anahtar sözcüğü ile kullanılırsa anonymous bir class’ a implemente olurlar. ● Interface’ler class’lara implement olup o class’ın sözleşmesi niteliği taşırlar. ● Bir class bir interface’i implement eder ise o interface’e dair tüm method’ları implement etmek zorundadır. ● Interface’ler kendi aralarında inheritance’ daki kurallara uyarak kalıtım gerçekleştirebilirler. ● Bir class birden fazla interface’i implemente edebilir. ● Polymorphism interface’ler kullanılarak ta yapılabilmektedir.
  • 21. Abstraction(Soyutlama) abstract anahtar kelimesi ile oluşturulur. İsminden anlaşılacağı üzere amaç class içerisindeki methodları class dışı çağrılırken soyutlayabilmektir. Bu olayı şu şekilde özetleyebiliriz. Bir arabanız var gaz ve fren pedalı var. Siz sadece o ikisini bilirsiniz. Fakat araba siz o ikisinden birine basınca ne yapacağını bilir. Hızı artırır veya azaltır. ● Abstract ile yapılabilecek tüm senaryoları interface kullanarak ta yapabilirsiniz. ● Abstract kullanmak kodun complexity(karmaşıklık)’sini artıracaktır. ● Eğer bir class abstract class ise içerisinde abstract method tanımı yapılabilir ancak body’ si olamaz. ● Abstract class’lar implements değil extends edilirler. ● Ana class’ta abstract bir method var ise kalıtım alan sınıf bu methodu override etmek zorundadır. ● Abstract class’lar kullanılarak ta polymorphism yapılabilir
  • 22. Object Casting Java’da casting işlemi cast yapılmak istene objenin class isminin parantezler içerisine yazılıp atanması ile gerçekleşir. Java’da aralarında inheritance ilişkisi bulunan classlardan oluşan nesneler birbirlerine upcasting veya downcasting yapabilirler. Bu duruma örnek vermek gerekirse Hayvan isimli bir sınıfımız var ve bundan kalıtım alan Kedi isimli bir sınıfımız olsun. Oluşturulan Hayvan nesnesine doğrudan Kedi nesnesi herhangi bir cast işlemi yapılmadan ataması yapılabilir. Bu duruma upcasting denir.
  • 23. Object Casting Devam Yine bir önceki örnekten gidelim. Bu seferde Hayvan sınıfına ait bir nesneye yeni bir Kedi oluşturup atayalım. Ardından Kedi sınıfımızın içindeki miyav() isimli methodu çağırmaya çalışalım. miyav() methodunu çağırabilmemiz için Hayvan nesnemizi Cat nesnemize downcasting yapıp çağırabiliriz.
  • 24. Object Casting Devam Örnek Object Casting