SlideShare a Scribd company logo
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

What's hot

core java
core javacore java
core java
Roushan Sinha
 
Inheritance and polymorphism
Inheritance and polymorphism   Inheritance and polymorphism
Abstract class
Abstract classAbstract class
Abstract class
Tony Nguyen
 
Java Comments | Java course
Java Comments | Java courseJava Comments | Java course
Java Comments | Java course
RAKESH P
 
Learn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat ShahriyarLearn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat Shahriyar
Abir Mohammad
 
Basics of Java Concurrency
Basics of Java ConcurrencyBasics of Java Concurrency
Basics of Java Concurrency
kshanth2101
 
Object Oriented Programming with Java
Object Oriented Programming with JavaObject Oriented Programming with Java
Object Oriented Programming with Java
backdoor
 
หน่วยที่ 2 เรื่อง บ้านน่าอยู่
หน่วยที่ 2 เรื่อง บ้านน่าอยู่หน่วยที่ 2 เรื่อง บ้านน่าอยู่
หน่วยที่ 2 เรื่อง บ้านน่าอยู่
Beerza Kub
 
ITFT-Classes and object in java
ITFT-Classes and object in javaITFT-Classes and object in java
ITFT-Classes and object in java
Atul Sehdev
 
Fundamental of electrical ไฟฟ้าเบื้องต้น-r2
Fundamental of electrical ไฟฟ้าเบื้องต้น-r2Fundamental of electrical ไฟฟ้าเบื้องต้น-r2
Fundamental of electrical ไฟฟ้าเบื้องต้น-r2
MaloNe Wanger
 
Classes and Nested Classes in Java
Classes and Nested Classes in JavaClasses and Nested Classes in Java
Classes and Nested Classes in Java
Ravi_Kant_Sahu
 
Java - Interfaces & Packages
Java - Interfaces & PackagesJava - Interfaces & Packages
Java - Interfaces & Packages
Arindam Ghosh
 
Var arg methods
Var arg methodsVar arg methods
Var arg methods
Rahul Sharma
 
String Builder & String Buffer (Java Programming)
String Builder & String Buffer (Java Programming)String Builder & String Buffer (Java Programming)
String Builder & String Buffer (Java Programming)
Anwar Hasan Shuvo
 
OCA Java SE 8 Exam Chapter 5 Class Design
OCA Java SE 8 Exam Chapter 5 Class DesignOCA Java SE 8 Exam Chapter 5 Class Design
OCA Java SE 8 Exam Chapter 5 Class Design
İbrahim Kürce
 
Oops concept on c#
Oops concept on c#Oops concept on c#
CH04:認識物件
CH04:認識物件CH04:認識物件
CH04:認識物件
Justin Lin
 
Presentation on java
Presentation  on  javaPresentation  on  java
Presentation on java
shashi shekhar
 
OOPS In JAVA.pptx
OOPS In JAVA.pptxOOPS In JAVA.pptx
OOPS In JAVA.pptx
Sachin33417
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An Introduction
Sam Brannen
 

What's hot (20)

core java
core javacore java
core java
 
Inheritance and polymorphism
Inheritance and polymorphism   Inheritance and polymorphism
Inheritance and polymorphism
 
Abstract class
Abstract classAbstract class
Abstract class
 
Java Comments | Java course
Java Comments | Java courseJava Comments | Java course
Java Comments | Java course
 
Learn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat ShahriyarLearn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat Shahriyar
 
Basics of Java Concurrency
Basics of Java ConcurrencyBasics of Java Concurrency
Basics of Java Concurrency
 
Object Oriented Programming with Java
Object Oriented Programming with JavaObject Oriented Programming with Java
Object Oriented Programming with Java
 
หน่วยที่ 2 เรื่อง บ้านน่าอยู่
หน่วยที่ 2 เรื่อง บ้านน่าอยู่หน่วยที่ 2 เรื่อง บ้านน่าอยู่
หน่วยที่ 2 เรื่อง บ้านน่าอยู่
 
ITFT-Classes and object in java
ITFT-Classes and object in javaITFT-Classes and object in java
ITFT-Classes and object in java
 
Fundamental of electrical ไฟฟ้าเบื้องต้น-r2
Fundamental of electrical ไฟฟ้าเบื้องต้น-r2Fundamental of electrical ไฟฟ้าเบื้องต้น-r2
Fundamental of electrical ไฟฟ้าเบื้องต้น-r2
 
Classes and Nested Classes in Java
Classes and Nested Classes in JavaClasses and Nested Classes in Java
Classes and Nested Classes in Java
 
Java - Interfaces & Packages
Java - Interfaces & PackagesJava - Interfaces & Packages
Java - Interfaces & Packages
 
Var arg methods
Var arg methodsVar arg methods
Var arg methods
 
String Builder & String Buffer (Java Programming)
String Builder & String Buffer (Java Programming)String Builder & String Buffer (Java Programming)
String Builder & String Buffer (Java Programming)
 
OCA Java SE 8 Exam Chapter 5 Class Design
OCA Java SE 8 Exam Chapter 5 Class DesignOCA Java SE 8 Exam Chapter 5 Class Design
OCA Java SE 8 Exam Chapter 5 Class Design
 
Oops concept on c#
Oops concept on c#Oops concept on c#
Oops concept on c#
 
CH04:認識物件
CH04:認識物件CH04:認識物件
CH04:認識物件
 
Presentation on java
Presentation  on  javaPresentation  on  java
Presentation on java
 
OOPS In JAVA.pptx
OOPS In JAVA.pptxOOPS In JAVA.pptx
OOPS In JAVA.pptx
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An Introduction
 

Similar to Java OOP

Oop’nin temel ilkeleri
Oop’nin temel ilkeleriOop’nin temel ilkeleri
Oop’nin temel ilkelerimetehanates
 
BilgeAdam Nesne Yönelimli Programlama
BilgeAdam Nesne Yönelimli ProgramlamaBilgeAdam Nesne Yönelimli Programlama
BilgeAdam Nesne Yönelimli Programlama
Sinan Bozkuş
 
Typescript
TypescriptTypescript
Typescript
Cem Topkaya (MSc)
 
Hibernate ve jpa
Hibernate ve jpaHibernate ve jpa
Hibernate ve jpa
Orçun Çolak
 
Hibernate ve jpa
Hibernate ve jpaHibernate ve jpa
Hibernate ve jpa
Orçun Çolak
 
OOP & SOLID
OOP & SOLIDOOP & SOLID
OOP & SOLID
Ahmet Kucukoglu
 
Introduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFrameworkIntroduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFramework
Anıl Sözeri
 
Effective Java - Madde 1: Yapılandırıcılar yerine statik fabrika(factory) met...
Effective Java - Madde 1: Yapılandırıcılar yerine statik fabrika(factory) met...Effective Java - Madde 1: Yapılandırıcılar yerine statik fabrika(factory) met...
Effective Java - Madde 1: Yapılandırıcılar yerine statik fabrika(factory) met...
İbrahim Kürce
 
Bileşke Türler
Bileşke TürlerBileşke Türler
Bileşke Türler
Tevfik AKTUĞLU
 
Sonraki Yazılımcıya Anlatır Gibi Kod Yazmak
Sonraki Yazılımcıya Anlatır Gibi Kod YazmakSonraki Yazılımcıya Anlatır Gibi Kod Yazmak
Sonraki Yazılımcıya Anlatır Gibi Kod Yazmak
Muhittin Özer
 
Yazılım Prensipleri ve Code Review Check List
Yazılım Prensipleri ve Code Review Check ListYazılım Prensipleri ve Code Review Check List
Yazılım Prensipleri ve Code Review Check List
Dilaver Demirel
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculu
mustafa sarac
 
Komut satırı JAVA
Komut satırı JAVAKomut satırı JAVA
Komut satırı JAVA
Ali Rıza SARAL
 
Java icin eclipse_slayt
Java icin eclipse_slaytJava icin eclipse_slayt
Java icin eclipse_slaytArif Özdemir
 
Mobilya ve ev eşyalarının derin öğrenme ile 128 kategoride sınııflandırılması...
Mobilya ve ev eşyalarının derin öğrenme ile 128 kategoride sınııflandırılması...Mobilya ve ev eşyalarının derin öğrenme ile 128 kategoride sınııflandırılması...
Mobilya ve ev eşyalarının derin öğrenme ile 128 kategoride sınııflandırılması...
Muhammed GÖKKAYA
 
JVM ve VisualVm
JVM ve VisualVmJVM ve VisualVm
JVM ve VisualVm
Dilaver Demirel
 

Similar to Java OOP (19)

Oop’nin temel ilkeleri
Oop’nin temel ilkeleriOop’nin temel ilkeleri
Oop’nin temel ilkeleri
 
BilgeAdam Nesne Yönelimli Programlama
BilgeAdam Nesne Yönelimli ProgramlamaBilgeAdam Nesne Yönelimli Programlama
BilgeAdam Nesne Yönelimli Programlama
 
Typescript
TypescriptTypescript
Typescript
 
Hibernate ve jpa
Hibernate ve jpaHibernate ve jpa
Hibernate ve jpa
 
Hibernate ve jpa
Hibernate ve jpaHibernate ve jpa
Hibernate ve jpa
 
Oopjava
OopjavaOopjava
Oopjava
 
OOP & SOLID
OOP & SOLIDOOP & SOLID
OOP & SOLID
 
Introduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFrameworkIntroduction to iOS Programming && About XMPPFramework
Introduction to iOS Programming && About XMPPFramework
 
Effective Java - Madde 1: Yapılandırıcılar yerine statik fabrika(factory) met...
Effective Java - Madde 1: Yapılandırıcılar yerine statik fabrika(factory) met...Effective Java - Madde 1: Yapılandırıcılar yerine statik fabrika(factory) met...
Effective Java - Madde 1: Yapılandırıcılar yerine statik fabrika(factory) met...
 
Bileşke Türler
Bileşke TürlerBileşke Türler
Bileşke Türler
 
Sonraki Yazılımcıya Anlatır Gibi Kod Yazmak
Sonraki Yazılımcıya Anlatır Gibi Kod YazmakSonraki Yazılımcıya Anlatır Gibi Kod Yazmak
Sonraki Yazılımcıya Anlatır Gibi Kod Yazmak
 
Yazılım Prensipleri ve Code Review Check List
Yazılım Prensipleri ve Code Review Check ListYazılım Prensipleri ve Code Review Check List
Yazılım Prensipleri ve Code Review Check List
 
Sorular
SorularSorular
Sorular
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculu
 
Komut satırı JAVA
Komut satırı JAVAKomut satırı JAVA
Komut satırı JAVA
 
Java icin eclipse_slayt
Java icin eclipse_slaytJava icin eclipse_slayt
Java icin eclipse_slayt
 
Mobilya ve ev eşyalarının derin öğrenme ile 128 kategoride sınııflandırılması...
Mobilya ve ev eşyalarının derin öğrenme ile 128 kategoride sınııflandırılması...Mobilya ve ev eşyalarının derin öğrenme ile 128 kategoride sınııflandırılması...
Mobilya ve ev eşyalarının derin öğrenme ile 128 kategoride sınııflandırılması...
 
Ozgur web-gunleri-sunum
Ozgur web-gunleri-sunumOzgur web-gunleri-sunum
Ozgur web-gunleri-sunum
 
JVM ve VisualVm
JVM ve VisualVmJVM ve VisualVm
JVM ve VisualVm
 

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