1 / 10
SOLID PRENSİPLERİ
1 - Single Responsibility
Her Class her method yalnızca tek bir işi/görevi yapmalıdır. (Matematiksel Hesaplamalar,
Dosya İşlemleri)
2 - Open/Closed
Class ve methodlar gelişime açık, kodlar ise değişime kapalı olmalıdır. (Alan Hesabı,
Dikdörtgen, Daire)
3 - Liskov’s Substitution
Türetilmiş sınıflar kodda değişiklik yapılmadan türedikleri sınıfın yerine kullanılabilmelidir.
4 - Interface Segregation
Genel amaçlı tek bir Interface yerine özelleşmiş birden çok Interface kullanımı tercih
edilmelidir. (IFootballer, IGoalKeeper, IForward)
5 - Dependency Inversion
Üst seviye Class’lar(miras alınan) alt seviye Class’lara(miras alan) bağımlı olmamalıdır. Alt
Class ta yapılan değişiklikler üst Class’ı etkilememelidir. (Sender, SendMail, SendSMS)
API GATEWAY
Tek bir request/response ile birden çok servise bağlanmayı ve bu servislerden veri
alınmasını sağlar.
Ayrıca aşağıdaki işlemler api gateway üzerinde yapılabilir;
• Authentication
• Authorization
• Logging
• Security/Firewall
• Routing
• Load Balancing
DEPENDENCY INJECTION (DI)
Dependency Injection, S.O.L.I.D prensiplerinin 5. ayağını oluşturan “Dependency
Inversion” prensibinin uygulanmasını içeren bir patterndir.
A = Class
B = A Class’ından türetilmiş bir nesne
Bu durumda A Class’ı B’ye bağlı olmuş olur. B’de yapılan bir değişikliğin A’yı etkilememesi
için DI pattern’i kullanılır.
Bağımlılıkların enjeksiyonu 3 şekilde yapılabilmektedir.
- Constructor
- Setter
- Interface
2 / 10
NGINX
Nginx; yüksek eş zamanlı çalışma kabiliyeti, yüksek performans ve düşük hafıza
kullanımına odaklanılarak tasarlanmış bir Web sunucusudur.
Farklı amaçlar içinde kullanılabilmektedir. Bunlar;
- Web Server
- Proxy Server
- Load Balancer
- Caching
PATH VARIABLES VS QUERY STRING
1- Query String
Örnek kullanım aşağıdaki gibidir. Sıralama ve filtreleme işlemleri yapan API
endpointlerinde kullanımı tercih edilmektedir.
/users?id=123
2- Path Variables
Örnek kullanım aşağıdaki gibidir. Genelde CRUD işlemi yapan API endpointlerinde
kullanılmaktadır.
/users/123
LIBRARY VS FRAMEWORK
Framework ve Library 'in ortak noktası, birileri tarafından yazılan ve başkaları tarafından
kullanılabilen ortak kod yapılarıdır.
- Library istediğin yerde istediğin gibi kullan
- Framework seni kısıtlar, kullanırken belirtilen kurallara uymak zorundasın
LOW COUPLING HIGH COHESION
1- Cohesion (Yapışıklık)
Modül iç benzerliği (aynı amaca hizmet edecek kodlar)
Yani matematiksel işlemlerin yapıldığı bir Class’ta dosya işlemleri yapan bir method
olmamalıdır. Class ve methodlar aynı amaca hizmet etmelidir.
2- Coupling (Bağlaşıklık)
Modüllerin birbirine olan benzerliği veya bağımlılığı.
Modüler bir programda Class’ların birbirine olan bağımlılığı minimum olmalıdır.
3 / 10
BOXING VS UNBOXING
1- Boxing
Belleğin STACK(yığın) bölgesinde tutulan değer türünden bir değişkenin, belleğin
HEAP(öbek) bölgesinde tutulan referans türünden bir nesneye aktarılmasıdır.
int degisken = 123;
object nesne = (object) degisken;
2- Unboxing
Unboxing ise boxing işleminin tam tersidir.
int degisken = [Link]();
OOP
Nesne(Object)
Özellikleri(attributes) olan ve bu özelliklere bağlı olarak belirli bir durumda(state) bulunan
somut varlıklardır.
Class(Sınıf)
Sınıflar, ortak özelliklere sahip grup veya kümeleri tanımlamak için kullanılır.
Nesne Yönelimli Programlamanın Temel Prensipleri;
- Inheritance (Kalıtım)
- Abstraction (Soyutlama)
- Encapsulation (Kapsülleme)
- Polymorphism (Çok Biçimlilik)
1- Inheritance(Kalıtım/Miras Alma)
Inheritance (miras alma, kalıtım), bir nesnenin özelliklerinin farklı nesneler tarafından da
kullanılabilmesine olanak sağlayan OOP prensibidir. Yazılan bir base sınıf bir başka sınıf
tarafından miras alınabilir. Bu işlem yapıldığı zaman temel alınan sınıfın tüm özellikleri yeni
sınıfa aktarılır.
Python
class AltClass(UstClass):
…
PHP/JAVA
public class AltClass extends UstClass {
...
}
4 / 10
2- Abstraction(Soyutlama)
Bir sınıfın özelliklerinin ve davranışlarının tanımlanmasına denir. Örneğin: Bir kişinin adı,
soyadı, yaşı, boyu, kilosu, saç rengi gibi özellikleridir. Kişinin yetenekleri davranışları
içerisinde yer alır ve metotlar ile saklanır.
3- Encapsulation(Kapsülleme)
Kapsülleme (Encapsulation) bir sınıfın içerisinde bulunan metodların ve değişkenlerin
korunmasıdır. İçerisinde bulunan metod ve değişkenlere dışarıdan yani diğer sınıflardan
ne seviyede erişilebileceğini kapsülleme ile sağlayabiliriz.
Bu erişim belirleyiciler (access modifiers);
• Public: Her yerden erişilebilir.
• Private: Sadece tanımlandığı sınıf içerisinden erişilebilir.
• Internal: Sadece bulunduğu projede erişilebilir.
• Protected: Sadece tanımlandığı sınıfta ya da o sınıfı miras alan sınıflardan
erişilebilir.
• Protected Internal: Sadece tanımlandığı sınıfta ya da o sınıfı miras alan sınıflardan
erişilebilir. Ayrıca tanımlamanın aynı proje içerisinde olma şartı yoktur.
Protected’dan farkı budur.
• Eğer erişim belirleyici belirtilmemişse, sınıflar internal’dır.
4- Polymorphism(Çok Biçimlilik)
Farklı işlemler yapan fakat aynı isimdeki özellik ve methodların kullanımına polimorfizm
denir.
Abstract Class
Genelde ortak özellikleri olan nesneleri tek bir çatı altında toplamak ve kod tekrarını
azaltmak için kullanılırlar.
• Yeni instance(nesne) türetilemez.
• Interface’lerden miras alınamazlar.
Abstract Method
Abstract class içerisinde tanımlanırlar.
• Abstract class’ı extend eden class tarafından override edilmek zorundadırlar.
• Private olamazlar.
Sealed Anahtar Sözcüğü
• Sınıflar için kalıtım yapmayı
• Üyeler için override edilmeyi ÖNLER!!
Serialization Nedir?
Nesnenin bir kopyası oluşturularak o kopyanın kullanılabilir bir formata çevrilmesidir.
Nesnenin o anki durumu korunur.
5 / 10
Method Override
Override üst sınıftan gelen bir metotu alıp kendi ihtiyacımıza göre gövdesini değiştirme
işlemine denir.
• Static ve Final methodlar override edilemezler
• Private methodlar override edilemezler
• Override işlemi yapılırken parametreler ve fonksiyonun dönüş tipi değiştirilemez.
• Override methodların access level’ları düşürülemez fakat yükseltilebilir. (public >
protected > default > private)
Overloading(Aşırı Yükleme)
Method Overloading; aynı isimli fonksiyonların farklı tip ve sayıda parametlerle
kullanılmasıdır. (JAVA)
Class Overloading; class içerisinde tanımlanmayan bir özelliğe, nesne oluşturduktan
sonra değer ataması yapılmasıdır.(PHP)
INTERFACE ABSTRACT CLASS
Implemente eden class tüm elemanları Extend eden class sadece abstract olan
kullanmak zorunda methodları override etse yeter
Sadece içi boş method tanımlaması yapılır Method ve değişken tanımlamaları
yapılabilir
Bir sınıf birden fazla Interface kullanabilir Bir sınıf sadece 1 tane abstract class’ı
extend edebilir
Erişim belirleyicileri barındırmaz Erişim belirleyecileri (public, private,
protected) barındırır
Static Class
• Yeni instance(nesne) oluşturularak çağrılamazlar.
• Sadece static üyeleri içerirler.
• Başka bir sınıftan miras yoluyla oluşturulamazlar.
Stored Procedure
• Belirli bir işi yapan kod parçasıdır.
• DB serverinde tutulurlar.
• İlk kullanımda derlenirler bir daha derlenmeye ihtiyaç duymazlar.
• SQL query’lere göre daha hızlı çalışırlar.
Trigger
• Tetikleyici.
• DB’de bir işlem yapıldıktan sonra başka bir işleminde otomatik olarak yapılması için
kullanılır.
6 / 10
Index
• Sorguların geç cevap vermesi durumunda kullanılır.
• Veriler indexlenen alana göre sıralı bir şekilde tutulur.
Python Veri Tipleri
String(Metin) str
Numeric(Sayı) int, oat, complex
Sequence(Sıralama) list, tuple, range
Mapping(Haritalama) dict
Set Veri Tipleri set, frozenset
Boolean(Mantıksal) bool
Binary bytes, bytarray, memoryview
FLASK DJANGO
Micro bir framework Full Stack
Küçük çaplı karmaşıklığı az projeler için uygun Büyük projeler için uygun
Geliştiriciye bağlı Statik ve kurallı
Performans olarak Django’dan daha iyi
Design Patterns
Yazılım geliştirme esnasında karşılaşılan sorunların çözümü için kullanılan çözümler ve
yaklaşımlardır.
Yazılım tasarım kalıpları 3 kategori altında incelenir.
1 - Creational Patterns (Yaratımsal)
Nesnelerin oluşturulmasında ve yönetilmesinde kullanılan bir desendir. Bu program
akışında hangi nesneye ihtiyaç varsa onu oluşturmada esneklik ve kolaylık sağlar.
• Singleton Pattern *
Bir nesnenin application pool kapanana kadar bir kez üretilmesini ve tek bir instance’ının
olmasın kontrol altında tutar.
- Aynı zamanda bu nesne sınıf dışından da erişilebilinir olur.
- Bir sınıfın bir anda sadece bir örneğinin olması istenildiği zamanlarda kullanılır.
- Örneğin veritabanı uygulamalarında bir anda bir bağlantı nesnesinin olması sistem
kaynaklarının verimli bir şekilde kullanılmasını sağlar.
fl
7 / 10
• Factory Pattern *
Factory Method(Fabrika Yöntemi) kendisini alt sınıflarla genişleterek (subclassing) farklı
biçimlerde nesne oluşturabilmeyi sağlar.
• Abstract Factory Pattern *
İlişkisel olan birden fazla nesnenin üretimini tek bir ara yüz tarafından değil her ürün ailesi
için farklı bir arayüz tanımlayarak sağlamaktadır.
• Builder Pattern
• Prototype Pattern
2 - Structural Patterns (Yapısal)
Birden fazla sınıfın bir işi yerine getirirken nasıl davranacağını belirlemek için kullanılan
desenlerdir.
• Adapter Pattern *
Adaptör Tasarım deseni mevcut bir sınıfı veya arayüz sınıfını, eldeki farklı bir arayüz
sınıfına uygun hale getirerek tekrar kullanmak amacıyla uygulanır.
• Bridge Pattern *
Bridge tasarım deseni implementasyonları abstractlardan ayırabilmek için kullanılır.
• Proxy Pattern *
Proxy tasarım deseni, oluşturduğumuz bir Proxy sınıf üzerinden, başka bir sınıfı temsil
etmemizi sağlar. Böylelikle Proxy sınıf, esas sınıfa müdahale etmeden istediği işlem veya
işlemler bütününü gerçekleştirebilir.
• Filter Pattern
• Compozite Pattern
• Decorator Pattern
• Facade Pattern
• Flyweight Pattern
3 - Behavioral Patterns (Davranışsal)
Nesnelerin birbirleri ile ilişkisini düzenleyen desenlerdir.
• Observer Pattern *
Observer tasarım deseni, bir nesnede meydana gelen değişikliği içinde bulunduğu
listedeki tüm elemanlara bildiren tasarım desenidir.
Örneğin; Finans - Borsadaki anlık değişimlerin borsacılara bildirim olarak gitmesi.
• Command Pattern
• Interpreter Pattern
8 / 10
• Iterator Pattern
• Mediator Pattern
• Memento Pattern
• Null Object Pattern
• Strategy Pattern
• State Pattern
• Visitor Patter
Compiler
• Herhangi bir programlama dilindeki kaynak kodları makine diline çeviren uygulamadır.
HTTP
• İnternette sunucular ve son kullanıcılar arasında bilgilerin nasıl aktarılacağına dair
kuralları ve yöntemleri düzenleyen sistemdir.
Authentication
• Kullanıcının kimliğini kontrol etmektir. Sisteme giriş yapmak için kullanılır.
Authorization
• Kullanıcının kaynaklara erişimini doğrulamaktır. Sistemde işlem yapmak için kullanılır.
API
• Herhangi bir uygulamanın belli işlevlerini diğer uygulamalarında kullanabilmesi için
oluşturulan modüldür.
SOAP
• Simple Object Access Protocol'ün kısaltmasıdır.
• Türkçe olarak Basit Nesne Erişim Protokolü anlamındadır.
• İnternet üzerinden küçük miktarda bilgileri aktarma protokolüdür.
• Veriler genelde HTTP, bazen de TCP/IP ile gönderilir.
• XML formatındadır. XML kullanmaya mecbur bırakır.
REST
• İstemci ve sunucu arasında veri alışverişinin basit bir yoludur.
• JSON, XML, Text gibi formatlarda veri alışverişi yapılabilir.
• HTTP ile gönderilir.
• SOAP'a göre daha hızlı çalışır.
Middleware
• Ara katmandır.
• Örneğin bir Rest Api tasarlıyoruz. Token ile authentication işlemlerini hallediyoruz. Token
gerektiren birkaç tane Api yazdık. Bu Api'lere gelen isteklerde Token'ın geçerliliğini
kontrol etmek adına bir Middleware oluşturabiliriz. Böylece gelen istek Middleware'daki
kontrolden geçemezse direkt olarak kesilir. Geçerse yoluna devam eder.
Lazy Loading
• Bir kod bloğu, nesne veya program parçasının sadece ihtiyaç duyulunca çalıştırılmasıdır.
SSL
• Sunucu ve istemci arasında verilerin şifrelenerek gönderilmesidir.
9 / 10
FTP
• Bir bilgisayardan, başka bir bilgisayar ya da sunucu arasında bağlantı kurup dosya
paylaşma protokolüdür.
CI (Continuous Integration)
• Sürekli entegrasyon, kod üzerinde yapılan her değişikliğin ardından, tüm sistemin çalışır
durumda olduğunu, yapılan değişikliğin sistemin bazı bölümlerinde kırılmalara yol açıp
açmadığını tespit etmek için kullanılan yöntemdir.
CD (Continuous Delivery/Deployment)
• CD, başarılı olan bir yapıyı (build) bir ortama atmanın otomatik bir yoludur.
• Continuous Delivery(teslimat) manual olarak yapılır
• Continuous Deployment(dağıtım) ise otomatik olarak yapılır
PHP ECHO PHP PRINT
Return olarak değer döndürmez Return olarak 1 değerini döndürür
Birden fazla parametre ile çalışabilir Tek parametre ile çalışır
Daha hızlıdır Daha yavaştır
PHP ERROR
Warning Uyarı Kod çalışmaya devam eder
Notice Bildirim Hataları Kod çalışmaya devam eder
Parse Error(Syntax) Syntax Hataları Kod durur
Fatal Error Ölümcül Hatalar Program çöker
PHP KOMUT GÖREVİ
explode() String to Array
implode() Array to String
unlink() Dosya silme
fopen() Dosya açma
strip_tags() String içerisindeki HTML,XML ve PHP etiketlerini
temizler
substr() String dilimleme
strstr() String içerisinde arama yapma
trim(), ltrim(), rtrim() String içerisinde boşluk silme
mysqli_real_escape_string() SQL içerisinde özel karakterleri silme
de ne(‘PI’, 3.14) Sabit tanımlama
fi
10 / 10
PHP KOMUT GÖREVİ
Const PI = 3.14 Sabit tanımlama
mysqli_connect DB bağlantı kontrolü yapar / bağlantı yoksa bağlantı
kurar / işin bitince bağlantı sonlandırılır
mysqli_pconnect DB ile kalıcı bağlantı kurar
require() Yüklenmesi öncelikli/zorunlu. Yüklenmez ise FATAL
ERROR verir.
include() Yüklenmez ise WARNING verir, kod çalışmaya
devam eder.
“==“ Değer olarak eşitlik kontrolü yapar
“===“ Değer ve veri tipi olarak eşitlik kontrolü yapar
@ Hataları görmezden gel
set_time_limit(9) Betiğin azami çalıştırılma süresinin belirlemek için
kullanılır
[Link] max_execution_time Betiğin max yürütme süresi
count($array) Dizi uzunluğu
php [Link] Konsoldan php kodu çalıştırma komutu
Single Inheritance PHP tekil kalıtsaldır
Değer PHP de nesneler değer ile geçer
PHP PEAR PHP dilinin bir uzantısıdır. Standart PHP sürümüne
göre çok daha fazla ayar ve fonksiyonellik sunar.
PHP VERSIONS 5.6 / 7 / 7.1 / 7.2 / 7.3 / 7.4 / 8.0 / 8.1
PHP Hypertext Preprocessor, internet için üretilmiş,
sunucu tara ı, çok geniş kullanımlı, genel amaçlı,
içerisine HTML gömülebilen betik ve programlama
dilidir.
Açık kaynak kodludur.
fl