Skip to content

Commit

Permalink
oop
Browse files Browse the repository at this point in the history
  • Loading branch information
mmcetindag committed May 9, 2021
1 parent 1feccec commit b2d5482
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 7 deletions.
Binary file added oop/abstraction/figures/abstraction.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 15 additions & 0 deletions oop/abstraction/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Soyutlama (Abstraction)

Nesne yönelimli programlamada Soyutlama (Abstraction) ilkesi, eğer bir sınıf için nesne üretmek mantıksız geliyorsa o sınıf soyutlanabilir.Alt sınıfların ortak
özelliklerini ve işlevlerini taşıyan ancak henüz bir nesnesi olmayan bir üst sınıf oluşturmak istenirse bir soyut (abstract) üst sınıf oluşturulur.

Soyutlama, bir sınıfa veya metoda temel görevlerin tanımlanması, detayların ise tanımlanmaması demektir. Temel olarak bir soruna ait çözüme giderken
kullanılacak yöntemlerin, ilk etapta daha genel basit ve soyut bir tanımını yapmaktır.

## Soyutlama Örnek

Bu örnekte, ara sınıf olan "Akademisyen" ve "Memur" sınıfları genel bir yapıyı ifade ediyorlar ve bu sınıflar üzerinden sistemde nesne üretilmesini istemeyiz.
İlgili sınıfları "Abstract Class" olarak tanımlarsak, bu sınıflardan nesne üretilmesini engellemiş oluruz. UML sınıf diyagramlarında bir sınıfın abstract bir
sınıf olduğu , sınıf ismini "İtalik" olarak yazması ile belirtilir.

![](figures/abstraction.jpg)
10 changes: 5 additions & 5 deletions oop/encapsulation/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,25 @@ anlamına gelir. Böylelikle biz değişkenlerimizi sarmalayarak istenmeyen duru

## Erişim Belirleyiciler

Java'da bir sınıfa ait nicelik ve özelliklere ulaşabilmek için Erişim Belirleyiciler kullanılır.Erişim belirleyiciler (Access Modifiers), değişken ,metot ve
Bir sınıfa ait nicelik ve özelliklere ulaşabilmek için Erişim Belirleyiciler kullanılır.Erişim belirleyiciler (Access Modifiers), değişken ,metot ve
sınıfların önüne yazılır ve yazıldıkları konuların erişilebilecekleri alanları belirlerler. Java'da 3 adet Erişim Belirleyiciler vardır bunlar ; public ,
private ve protected.

### Private

Java'da private deyimi yazıldığı öğenin sadece ait olduğu sınıftan doğrudan erişilebilir olduğunu ve o sınıfın dışındaki kod parçacıklarından doğrudan
Private deyimi yazıldığı öğenin sadece ait olduğu sınıftan doğrudan erişilebilir olduğunu ve o sınıfın dışındaki kod parçacıklarından doğrudan
erişilemeyeceğini tanımlar. Nesne Yönelimli Programlama'nın temel ilkelerinden olan Sarmalama ilkesi gereki, sınıf içindeki değişkenler sadece sınıf içinde
doğrudan erişebilir olması gerekir. Bundan dolayı, genellikle değişkenler "private" olarak tanımlanır. Bazı zamanlarda ise sadece o sınıfta çağrılmasını
istediğimiz değişkenler veya metotları da private olarak tanımlarız.

### Public

Java'da "public" deyimi , yazıldığı öğenin sadece olduğu sınıf için değil, diğer sınıflar tarafından doğrudan erişilebilir olmasını sağlar. Sınıflara ait
"public" deyimi , yazıldığı öğenin sadece olduğu sınıf için değil, diğer sınıflar tarafından doğrudan erişilebilir olmasını sağlar. Sınıflara ait
nesnelerin ve diğer nesneler tarafından kullanılması istenilen metotlar için "Public Erişim Düzenleyicisi" kullanılır.

### Protected

Java'da "protected" deyimi , public ve private arasında kalan bir erişim düzenleyicir. Protected ile tanımlanan öğeler, kendisi ile aynı package(paket) bulunan
"protected" deyimi , public ve private arasında kalan bir erişim düzenleyicidir. Protected ile tanımlanan öğeler, kendisi ile aynı package(paket) bulunan
sınıflar tarafından doğrudan erişebilinir.

### Varsayılan (Default)
Expand All @@ -48,7 +48,7 @@ negatif bir değer girseydik ne olurdu ? Hiç bir kitabın sayfa sayısı negati

![](figures/c2.jpg)

Biz bu sorunu constructor (kurucu) metotumuza yazacağımız bir kontrol ile çözebiliriz. Ama sorunlarımız hala bitmedi , biz sınıfa ait niteliklere hala dışarıdan
Biz bu sorunu constructor (kurucu) metodumuza yazacağımız bir kontrol ile çözebiliriz. Ama sorunlarımız hala bitmedi , biz sınıfa ait niteliklere hala dışarıdan
erişebiliyoruz çünkü erişim belirleyicisi "public". Bu sorunu çözmek için sınıfa ait nitelikleri dışarıdan erişimi kapatmamız gerekir ve oluşturduğumuz
niteliklerin erişim belirleyicilerini (Access Modifiers) değiştirmemiz gerekli. Tüm publicleri private olarak değiştiriyoruz.

Expand Down
Binary file added oop/polymorphism/figures/polimorfizm.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions oop/polymorphism/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Çok Biçimlilik (Polymorphism)

Polymorphism (çok biçimlilik) NYP'de programlama dilinin farklı tip verileri ve sınıfları farklı şekilde işleme yeteneğini belirten özelliğidir. Daha belirgin
olmak gerekirse, metotları ve türetilmiş sınıfları yeniden tanımlama yeteneğidir

Polimorfizm, alt sınıfların ata sınıflardaki metotları geçersiz kılması (method overriding) sayesinde çok biçimli olarak davranmasına denir. Bu sayede alt sınıf
ata sınıfından gelen davranışı kendine göre şekillendirebilir.

Metotlarda Geçersiz Kılma ise bir alt sınıfın içine doğrudan ya da dolaylı ata sınıflarından gelen bir (ya da daha fazla) yöntemin aynısının (aynı yöntem adı ve
aynı parametre listesi) kodlanmasına verilen addır.

Polimorfizm sayesinde uygulamaların genişletilebilirliğini sağlarız ve bir ata sınıfın sunduğu yöntemleri geçersiz kılan alt sınıflar yardımı ile ata sınıfa
göre kodlanmış tek bir kod kesimine farklı davranışlar yüklemek olanaklı olmaktadır. Öyleyse, elimizde esnek bir altyapı var demektir. Bu esneklik altyapıya
yeni türlerin eklenmesi, kalıtım ve geçersiz kılma ilişkileri çerçevesinde oldukça kolaydır.

## Polimorfizm Örneği

![](figures/polimorfizm.jpg)
2 changes: 2 additions & 0 deletions oop/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@
- [Sınıf Diyagram Örnekleri](class-diagram-example/)
- [Encapsulation (Kapsülleme)](encapsulation/)
- [Inheritance (Kalıtım)](inheritance/)
- [Polymorphism (Çok Biçimlilik)](polymorphism/)
- [Abstraction (Soyutlama)](abstraction/)
4 changes: 2 additions & 2 deletions oop/uml-class-diagram/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ türünden başka bir nesneymiş gibi kullanılabilir. Bir sınıfın işlevleri

Bu örnekte "Şekiller" sınıfına ait tüm özellikler altında üretilmiş olan, diğer sınıflara aktarılmıştır.

### Bağımlılık İlişkisi (Dependency) (Aggregation, Composition)
### Bağımlılık İlişkisi (Dependency) ve Birleştirme (Aggregation, Composition)

Birden fazla parçadan oluşan sınıflar arasındaki ilişkiye "Aggregation" denir. Aggregation ilişkisini 'bütün parça' yukarıda olacak şekilde ve bütün parça'nın
ucuna içi boş elmas yerleştirecek şekilde gösteririz. İçi boş elmas ile gösterilen ilişkilerde herbir parça ayrı bir sınıftır ve tek başlarına anlam ifade
Expand All @@ -146,7 +146,7 @@ oluşturulacak ise içi dolu dörtgen dolu olarak gösterilir.
![](figures/c8.jpg)

### Gerçekleştirim (Realization) İlişkisi
Gerçekleştirim lişkisi en çok kullanıcı arayüzlerinin (user interface) modellenmesinde kullanılır. Arayüz yanlızca method
Gerçekleştirim ilişkisi en çok kullanıcı arayüzlerinin (user interface) modellenmesinde kullanılır. Arayüz yalnızca method
adlarını ve bunların parametrelerini içermektedir. Program yazarken, yanlızca arayüzlerin kullanılması ve arayüzü gerçekleştiren sınıfın diğer sınıflardan ayrı
tutulması, yazılımın geliştirilmesi ve bakımında önemli kolaylık sağlar.

Expand Down

0 comments on commit b2d5482

Please sign in to comment.