#1 Functional vs Object-Oriented vs Procedural

Ezgi Fıstıkçıoğlu
Huawei Developers - Türkiye
5 min readApr 25, 2021

Fonksiyonel Programlama (FP), Prosedürel Programlama(PP) ve Nesne Yönelimli Programlama (OOP) inceleyeceğiz.

Herkese merhaba👋

Bu yazımda, programlama paradigmalarından olan 3 farklı programlama yaklaşımını ele alacağım. Bu uzun bir seri olacak minimum 3 kısımdan oluşacak. Hazırsak başlayalım!💪

Programlama Paradigması Nedir?

Programlama paradigması bir programlama tarzı, yazılımın nasıl yapılacağına dair bir düşünme biçimidir.

Her programlama paradigması, kodunuzun yapısı, organizasyonu ve veri akışı hakkında, mantıksal bir şekilde düşünebilmek için farklı bir zihinsel çerçeve sunar.

Belirli bir dile atıfta bulunmazlar, daha çok programlama yönteminize atıfta bulunurlar.

En önemli etkilerinden biri, bir programcının elindeki problemlere çözüm üretmesini önemli derecede etkilemeleridir diyebiliriz.

Her paradigma kendi programlama stillerini getirir ve programcıların algoritmalara bakış şeklini değiştirirler.

📌NOT : Paradigmalar, birbirini dışlayan yaklaşımlar anlamına gelmez, tek bir program birden çok paradigmaya sahip olabilir!

Buz dağının görülen kısmı

🟣 Imperative (Zorunlu, Emir Esaslı) Paradigma:

Komuta dayalı olduğu söylenir. Programı tek tek yürüten ifadeler dizisi diyebiliriz. İşlem tabanlı olup, bir program, bir dizi işlem olarak görülür.

Imperative programlamanın güçlü yönlerinden biri, mantık yürütmenin kolay olmasıdır. Bir bilgisayar gibi, adım adım takip edebiliriz.

Program ifadeleri kümesinden oluşur. Her ifade, bilgisayarı belirli bir görevi gerçekleştirmeye yönlendirir. Programcı her bir ifadeyi ayrıntılı olarak ele almalıdır.

Program ifadelerinin yürütülmesine kontrol akışı ifadeleri tarafından karar verilir. Ayrıca programdaki deyimler birbirleriyle değişkenler(variables) aracılığıyla iletişim kurarlar.

Her ifade NE” yapılacığını ve bunun “NASIL“ yapılacağını belirler.

Imperative diller, yaygın olarak kullanılan ilk dil grubudur.

✳️ C, C++, FORTRAN, Pascal, COBOL, Ada, Java vs.

🟣 Declarative (Bildirimsel) Paradigma:

Bildirimsel paradigma programın mantığına ve nihai sonucuna odaklanır.

Imperative paradigmalara kıyasla daha soyuttur. Burada kontrol akışları programın önemli unsurlarından değildir.

Donanım yapısını taklit etmezler ve sonuç olarak programların durumlarını değiştirmezler, onları yeni durumlara dönüştürürler ve matematiksel mantığa daha yakınlardır.

“NASIL“ yerine NE’yi” tercih eder.

✳️ SQL, HTML vs.

🟣Her iki yaklaşımın gerçek hayattaki kullanımına bakalım;

Kendi şehrinizde bir hackathon’a katılacağınızı düşünelim. Ekip arkadaşınız da bu şehre tamamen yabancı olsun. Buluşup gideceksiniz fakat arkadaşınızın buluşma yerine nasıl gideceği hakkında hiçbir fikri yok. Haydi şimdi her iki yaklaşımla nasıl buluşacağınıza bakalım. 🏃‍♀️ 🏃

🟣 Imperative:

✷Merkez İstasyondan 1 numaralı tramvaya bin.

✷Üçüncü durakta tramvaydan in.

✷Üçüncü kavşağa ulaşana kadar sağa, Altıncı Caddeye doğru yürü. Orada bekliyor olacağım.

🟣 Declarative:

✷Arkadaşınıza buluşma yerine nasıl gideceğini adım adım tarif etmek yerine, ona basitçe adresi verin ve oraya nasıl gideceğini kendisinin bulmasına izin verin.

Bu örnekten de anlaşılacağı üzere imperative yaklaşımlarda adım adım problemin ne olduğunu ve nasıl çözüleceğini belirtirken, declarative yaklaşım ile problemin ne olduğuna odaklanırız. Nasıl kısmı ile ilgilenmeyiz.

Imperative ve Declarative’i anladığımıza göre artık ayrıntılara girebiliriz.

Prosedürel Programlama (PP)

Prosedür çağrısı kavramına dayanan, Yapısal programlama(Structured programming)dan türetilen bir programlama paradigmasıdır yani tamamen “prosedürler” yazmakla ilgilidir.

Bir prosedür, yürütme sırasında herhangi bir zamanda başka bir prosedürle veya kendi başına çağrılabilir. Rutinler, alt rutinler veya fonksiyonlar olarak da bilinen prosedürler, gerçekleştirilecek talimatların sıralı bir listesini içerir. Veriler ile fonksiyonları birbirinden tamamen ayırmaya odaklanır.

Prosedürel programlama (PP), yukarıdan aşağıya bir yaklaşım benimser, bu sayede program akışı kolaylıkla izlenebilir. Bu, bilgisayara adım adım ne yapması gerektiğini anlatmak için bir talimat listesi yazmakla ilgilidir.

Kod, kopyalamaya gerek kalmadan programın farklı bölümlerinde yeniden kullanılabilir.

Program boyutu büyüdüğünde (büyük boyutlu ve karmaşık işler), program kodu daha küçük ve basit prosedürler veya fonksiyonlara, küçük programlar grubu şeklinde bölünürler

Her fonksiyon belirli bir görevi yerine getirir. Yandaki resimde, programcı iki veya daha fazla sayı eklemek veya çıkarmak için bir fonksiyon yazabilir.

Prosedürel programlama, yeni başlayanlar için ilk programlama dili olarak tercih edilmeye devam ediyor ve diğer paradigmaların ortaya çıkmasına rağmen hala üniversitelerin çoğunda müfredatın bir parçası olarak popülerliğini koruyor. İlk programlama dillerinin çoğu prosedüreldir. Fortran, C ve COBOL, Ada, PL/I, Pascal örnek olarak verilebilir.

Son olarak kodlama örneğine bakalım. Bu örnek çok basit olarak tutulmuştur. Amaç sadece prosedürel programlamayı kavramaktır. Her üç paradigma için de alan hesabı yapan bir Geometri sınıfı üzerinden ilerleyeceğiz.

Kodları incelediğimizde basitçe her şekil için(Square,Rectangle,Circle) ayrı bir class oluşturup alan hesabı için gerekli value’ları verdik ve sonrasında her class’a bir constructor(yapıcı) tanımladık. (Sınıfları ayrı yapmamın sebebi,büyük projelerde ayırmak zorunda kalacağımuz için aşinalık olsun istedim. Siz tabi ki aynı dosyada da yazabilirsiniz)

Geometry class’ında her şeklin bir instance’nı ürettik ve areaCalculate() metodu ile adım adım programa izlemesi gereken talimatlar listemizi vermiş olduk. Sonuç olarak her şeklin alanını bize istediğimiz şekilde veren basit bir prosedürel kodumuz hazır.

Bu kısmı burada bitiriyorum. Bu yazımda programlama paradigmalarının ne olduğunu, gerçek hayatla birleştirerek anladığımızı düşünüyorum. Prosedürel Programlama ile de ilk paradigmamızı tamamlamış olduk. Umarım faydalı olmuştur. Serinin 2. kısmında Nesne Yönelimli Programlama (OOP) ve Fonksiyonel Proglamaya(FP) değineceğiz.

Eğer kodları görmek isterseniz github hesabıma bakabilirsiniz.

--

--