Ana içeriğe geç

Programlama Paradigmalarına Giriş

Nesne yönelimli, fonksiyonel, yordamcı (prosedürel) ve bildirime dayalı paradigmalar da dahil olmak üzere başlıca programlama paradigmalarının temel kavramlarını Python örnekleriyle keşfedin.
Samuel Shaibu
Samuel Shaibu

Ücretsiz Hesabınızı Oluşturun

Alıştırma and program your progress.

Google ile devam edinDevam ederek, Kullanım Koşullarımızı ve Gizlilik Politikamızı kabul etmiş ve verilerinizin ABD'de saklandığını onaylamış olursunuz.

Veri alanında çalışanlar için farklı türde programlama paradigmalarını anlamak çok önemlidir. Yeni başlıyor olun ya da becerilerinizi geliştirmek istiyor olun; bu bilgi, üretkenliğinizi artırmanıza yardımcı olur. Bu yazıda, bazı temel programlama paradigmalarına ve bunların önemine bakacağız.

Ayrıca bu makalede, bu paradigmaların sadeliği ve okunabilirliğiyle tanınan son derece çok yönlü ve güçlü bir dil olan Python programlama dili kullanılarak nasıl uygulanabileceğine de değineceğiz.

Programlama Paradigmaları Nedir?

Programlama paradigmaları, geliştiricilerin kodlarını nasıl kavramsallaştırıp yapılandırdığını belirleyen temel programlama yaklaşımlarıdır. Onları, sorunları görme ve çözme biçimimize benzersiz bir bakış açısı sunan, kod yazmanın yol gösterici felsefeleri veya planları olarak düşünebiliriz.

Bu paradigmalar, programcıların kod hakkında düşünme ve onu yapılandırma şeklini şekillendirir. Farklı paradigmaları anlayarak, daha verimli, okunabilir ve sürdürülebilir kod yazma konusunda yeni içgörüler kazanabilirsiniz.

Programlama Paradigmalarını Bilmek Neden Önemlidir?

Programlama paradigmalarını anlamanız için çeşitli nedenler vardır; burada bunları tek tek ele alacağız.

  • Gelişmiş Problem Çözme Becerileri: Farklı paradigmalar, problemlere yaklaşmak ve onları çözmek için benzersiz yollar sunar.
  • Kodun Anlaşılabilirliği ve Sürdürülebilirliği: Belirli bir görev için en uygun paradigmayı bilmek, kodunuzu daha anlaşılır ve daha kolay bakım yapılabilir hale getirir.
  • Yeni Çatılar Öğrenme Kolaylığı: Birden fazla paradigmaya aşina olmak, yeni programlama dillerini öğrenmeyi kolaylaştırır. 
  • Ekip İçi Etkili İletişim ve İşbirliği: Ekibinizin benimsediği paradigmaları anlamak, daha etkili iletişim kurmanıza ve işbirliği yapmanıza yardımcı olur.

Farklı Programlama Paradigmaları

Bu bölümde, veri öğrenme yolculuğunuz ve kariyeriniz boyunca karşınıza çıkacak en yaygın programlama paradigması türlerine bakacağız. Bu paradigmalar hakkında daha derinlemesine bilgi için Programming Paradigm Concepts kursumuza göz atın.

Yüksek derecede çok yönlü bir dil olan Python, çeşitli programlama paradigmalarını destekleme konusunda başarılıdır ve onu farklı programlama görevleri için güçlü bir araç haline getirir. İster nesne yönelimli, ister fonksiyonel, yordamcı (prosedürel) ya da bildirime dayalı programlama ile çalışın, Python bu paradigmaları etkili bir şekilde uygulamak için gereken özellikleri ve esnekliği sağlar.

Farklı programlama paradigmaları. Görsel: Yazar

Nesne yönelimli programlama

Nesne yönelimli programlama zorunlu (emredici) programlama ailesinin bir parçasıdır ve adından da anlaşılacağı gibi, veriyi ve davranışı kapsülleyen nesneler aracılığıyla belirli bir sonuca ulaşmak için bir programın izlemesi gereken adımların ayrıntılandırılmasına odaklanır. 

Daha iyi anlamak için şimdi bazı OOP kavram ve tanımlarına hızlıca göz atacağız.

  • Sınıf (Class): Bir sınıf, niteliklerini (attributes) ve metotlarını belirterek nesneler oluşturmak için bir plandır. Veriyi ve o veriyi işlemek için metotları kapsüller; bu da modüler ve yeniden kullanılabilir kodu teşvik eder. Yemek yapma analojisini kullanırsak, bir yemeği hazırlamak için gereken malzemeleri ve adımları ayrıntılandıran bir tarif gibidir.
  • Nesne (Object): Nesneler, OOP’nin temel yapı taşlarıdır. Bir nesne, bir sınıfın örneğidir; hem veriyi hem de o veri üzerinde işlem yapan metotları bir arada barındırır. Tarif benzetmesini genişletirsek, nesne tariften ortaya çıkan yemektir.
  • Metotlar (Methods): Metotlar, nesnelerin gerçekleştirebildiği eylemlerdir. Tarif benzetmemizde bunlar, bir yemeği hazırlamak için gereken adımlardır. Fonksiyonlar gibi, nesnelere aittirler ve genellikle nesnenin verisi üzerinde işlem yaparlar.
  • Öznitelikler (Attributes): Öznitelikler, bir nesnenin içinde saklanan veridir; özelliklerini veya niteliklerini temsil eder. Tarif benzetmemizde bunlar, yemeği yapmak için kullanılan malzemelerdir.

Buraya kadar, bir tarif benzetmesi kullanarak OOP’deki temel terimleri inceledik. Şimdi OOP ile bir uygulama kullanım senaryosuna bakalım. Her bir yemeğin kendi özellik ve davranışlarına sahip bir nesneyi temsil ettiği çeşitli yemekler hazırlamakla görevlendirildiğinizi hayal edin.

# Define a class named Dish
class Dish:
    # Constructor method to initialize instances of Dish with a name and main ingredient
    def __init__(self, name, main_ingredient):
        self.name = name  # Assign the 'name' parameter to the instance variable 'self.name'
        self.main_ingredient = main_ingredient  # Assign the 'main_ingredient' parameter to 'self.main_ingredient'

    # Method to prepare the dish
    def prepare(self):
        print(f"Preparing {self.name} using {self.main_ingredient}.")

    # Method to serve the dish
    def serve(self):
        print(f"Serving {self.name}.")

# End of class definition

Yukarıdaki Python kodu, OOP’nin tanımlı özellik ve davranışlara sahip gerçek dünya varlıklarını modellemenize nasıl olanak tanıdığını gösterir. Dish sınıfı, farklı yemekleri temsil eden nesneler oluşturmak için bir plan görevi görür. Her yemeğin öznitelikleri (name ve main_ingredient) ve metotları (prepare ve serve) vardır. OOP bu şekilde, modülerliği ve kodun yeniden kullanılmasını teşvik eder.

Fonksiyonel programlama

Fonksiyonel programlama, fonksiyonları uygulayarak ve birleştirerek programlar oluşturan bir paradigmadır. Bu yaklaşım, durumların ve değiştirilebilir verinin kullanımından kaçınır; bu da daha net ve öngörülebilir koda yol açar. 

Fonksiyonel programlamada, tek bir işi çok iyi yapan küçük ve yeniden kullanılabilir kod parçaları oluşturur ve veriyi doğrudan değiştirmekten kaçınırsınız. Şimdi bazı temel kavramlara bakarak bunu örnekleyelim.

  • Saf Fonksiyonlar (Pure Functions): Saf fonksiyonlar, FP’nin yapı taşlarıdır. Aynı girdi için her zaman aynı çıktıyı üretirler ve yan etkileri yoktur; yani harici bir durumu veya veriyi değiştirmezler.
  • Birinci Sınıf Fonksiyon (First-Class Function): FP’de fonksiyonlar birinci sınıf vatandaşlardır. Değişkenlere atanabilir, argüman olarak geçirilebilir ve diğer fonksiyonlardan döndürülebilirler.
  • Yüksek Mertebeden Fonksiyonlar (Higher-Order Functions): Yüksek mertebeden fonksiyonlar, diğer fonksiyonları argüman olarak alır veya sonuç olarak fonksiyon döndürür.
  • Değişmezlik (Immutability): FP’de veri değişmezdir; yani oluşturulduktan sonra değiştirilemez. Mevcut veriyi değiştirmek yerine yeni veri yapıları oluşturulur.
  • Fonksiyon Bileşimi (Function Composition): Bu süreç, iki veya daha fazla fonksiyonun birleştirilerek yeni bir fonksiyon oluşturulmasını içerir. Daha karmaşık işlemlerin basit olanlardan inşa edilmesini sağlar.

Aşağıdaki kod örneği, Python’da fonksiyonel programlamayı inceler.

# Pure function example
def square(x):
    return x * x  # Calculate square of x

# First-class function example
def cube(x):
    return x * x * x  # Calculate cube of x

# Higher-order function example
def apply_operation(func, num):
    return func(num)  # Apply func to num

# Function composition example
def add_one(x):
    return x + 1  # Increment x by 1
def square_and_increment(y):
    return add_one(square(y))  # Compose square and add_one

# Immutable data example
def add_to_tuple(original_tuple, new_element):
    new_tuple = original_tuple + (new_element,)  # Create a new tuple with new_element
    return new_tuple

# Using these functions
result_square = apply_operation(square, 5)
print("Result of applying square function:", result_square)

result_cube = apply_operation(cube, 3)
print("Result of applying cube function:", result_cube)

result_composed = square_and_increment(3)
print("Result of function composition:", result_composed)

my_tuple = (1, 2, 3)
new_tuple = add_to_tuple(my_tuple, 4)

print("Modified tuple with immutability:", new_tuple)
print("Original tuple remains unchanged:", my_tuple)

Bu örnek, FP ilkelerinin Python’da nasıl uygulandığını gösterir ve bu ilkelerin programlamaya getirdiği açıklık ve verimliliği sergiler. FP’nin fonksiyonlara, değişmezliğe ve bileşime yaptığı vurguya sadık kalarak, modern programlama uygulamalarında sağlamlığı sağlayan, sürdürülebilir ve güvenilir kod tabanları inşa edebilirsiniz.

Yordamcı (prosedürel) programlama

Bu da prosedür çağrısı kavramına dayanan bir zorunlu programlama paradigmasıdır. Rutin, alt program veya fonksiyon olarak da bilinen prosedürler, yürütülmesi gereken bir dizi hesaplama adımıdır. Bu yaklaşım, bir görevi yerine getirmek için adım adım talimatlar dizisini vurgular.

Bir kek pişirmek için bir tarifiniz olduğunu hayal edin. Tarifin her adımı, nihai ürüne ulaşmak için belirli bir sırayla izlenmelidir. Yordamcı programlamada, süreçteki her adım bir prosedürle temsil edilir. Bu prosedürler ardışık olarak yürütülür.

Yukarıdaki Python kodu, yordamcı programlamayı örneklemek için iyi bir örnektir.

# Function to orchestrate the process of baking a cake
def bake_cake():
    # Step 1: Mix the ingredients
    mix_ingredients()
    # Step 2: Preheat the oven
    preheat_oven()
    # Step 3: Bake the cake
    bake()
    # Step 4: Decorate the cake
    decorate()

# Function to mix ingredients
def mix_ingredients():
    print("Mixing ingredients")

# Function to preheat the oven
def preheat_oven():
    print("Preheating oven")

# Function to bake the cake
def bake():
    print("Baking the cake")

# Function to decorate the cake
def decorate():
    print("Decorating the cake")

# Call the main function to bake the cake
bake_cake()

Yukarıdaki kodu biraz daha inceleyelim.

  • Prosedürler/Fonksiyonlar: Her fonksiyon (mix_ingredients(), preheat_oven(), bake(), decorate()) pişirme sürecindeki bir yordam adımını temsil eder.
  • Ana Prosedür: bake_cake() fonksiyonu bu adımları sırayla çağırır. Tüm sürecin doğru şekilde izlenmesini sağlar.
  • Yürütme: bake_cake() çağrıldığında, tıpkı bir tarifi takip eder gibi, belirtilen sırada her adımı yürütür.

Bildirime dayalı programlama

Hem nesne yönelimli programlamadan hem de yordamcı programlamadan farklı olarak, bildirime dayalı programlamada veriniz için istenen sonucu belirtmeye odaklanırsınız. Bu yaklaşım, buna ulaşmak için atılacak adımların ayrıntılandırılmasından kaçınır.

Bir restoranda olduğunuzu hayal edin. Ne yemek istediğinizi belirterek sipariş verirsiniz. Şefin yemeği nasıl hazırlaması gerektiğine dair ayrıntılı talimatlar vermezsiniz. Şef, pişirme süreciyle ilgilenir ve istediğiniz yemeği size sunar. Bildirime dayalı programlama tam olarak budur!

Kodda iki farklı yaklaşımı göstereceğiz:

  • Zorunlu (Emredici) Yaklaşım: Bu bölüm, açık bir kontrol akışı tanımını gösterecek. Bir liste üzerinde yineleme yapılacak, her sayı kontrol edilecek ve çift sayılar yeni bir listeye eklenecek.
  • Bildirime Dayalı Yaklaşım: Ardından, kod aynı sonuca ulaşmak için liste kavrayışı (list comprehension) kullanacak. Burada, nasıl yapılacağını ayrıntılandırmadan ne istediğinizi (çift sayılardan oluşan bir liste) belirteceksiniz. Python, yinelemeyi ve koşullu kontrolü arka planda otomatik olarak yönetecek.

Bu kavramların Python kullanılarak pratik örneklere nasıl dönüştürülebileceğine bakalım.

# Imperative approach
# Define a list of numbers from 1 to 10
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Initialize an empty list to store even numbers
even_numbers = []

# Iterate over each number in the 'numbers' list
for number in numbers:
    # Check if the current number is even
    if number % 2 == 0:
        # If the number is even, append it to the 'even_numbers' list
        even_numbers.append(number)

# Print the list of even numbers
print(even_numbers)

# Declarative approach
# Use a list comprehension to create a new list of even numbers
# The list comprehension iterates over each number in 'numbers' and includes the number in the new list if it is even
even_numbers = [number for number in numbers if number % 2 == 0]

# Print the list of even numbers
print(even_numbers)

Python, özellikle liste kavrayışları aracılığıyla bildirime dayalı stiller sunar. Buna karşılık, bildirime dayalı programlamanın daha yaygın olduğu veya birincil paradigma olduğu diller de vardır. Bazı programlama dili örnekleri SQL, HTML ve CSS’dir.

Özet tablo

Her şeyi toparlamak için, bildiklerimizi kullanışlı bir başvuru tablosunda toplayalım. 

Programlama Paradigması

Açıklama

Temel Kavramlar

Avantajlar

Nesne yönelimli Programlama 

Veriyi ve metotları temsil etmek için nesneleri kullanır.

Sınıf
Nesne
Metotlar
Öznitelikler

Modülerliği ve yeniden kullanılabilirliği teşvik eder

Fonksiyonel Programlama 

Programları fonksiyonlarla inşa eder.

Saf Fonksiyonlar
Birinci Sınıf Fonksiyonlar
Yüksek Mertebeden Fonksiyonlar
Değişmezlik

Daha net ve öngörülebilir koda yol açar
Hata ayıklama ve test etmeyi kolaylaştırır

Yordamcı (Prosedürel) Programlama

Prosedür çağrılarına, ardışık adımlara dayanır.

Prosedürler/Fonksiyonlar
Ana Prosedür

Basit ve anlaşılması kolaydır

Bildirime Dayalı Programlama

Adımları değil, istenen sonucu belirtir.

Sonuç odaklı

Nasıl yapılacağından çok neyin başarılacağına odaklanır
Çoğu zaman daha öz ve okunabilir koda yol açar

Programlama Hakkında Daha Fazla Bilgi Edinin

Programlama paradigmalarını anlamak sadece bir başlangıçtır. Yolculuğunuza devam ederken, farklı paradigmaları keşfetmek anlayışınızı derinleştirecektir. Sadece bu da değil, karmaşık problemleri verimli bir şekilde çözme yeteneğinizi de artıracaktır. Her paradigma benzersiz bakış açıları sunar. Bu bakış açıları ve araçlar, doğru uygulandığında son derece güçlü olabilir.

Artık bu temel kavramları kavradığınıza göre, veri bilimi yolculuğunuzu hızlandırmak için bu bilgiyi nasıl kullanabileceğiniz aşağıda yer alıyor:

  • Farklı Paradigmalarla Deney Yapın: Çeşitli paradigmaları denemekten çekinmeyin. Size hitap edenleri belirleyin ve probleme farklı açılardan yaklaşın.
  • Tutarlı Bir Şekilde Pratik Yapın: Anlayışınızı pekiştirmenin en iyi yolu düzenli pratiktir. Özellikle farklı paradigmaları hedefleyen çevrimiçi kodlama alıştırmaları ve egzersizleri arayın.
  • Portföyünüzü Oluşturun: Uygulamalı becerilerinizi güçlendirmek ve yeteneklerinizi potansiyel işverenlere göstermek için farklı paradigmalar kullanarak veri bilimi ve yapay zeka projeleri oluşturun.

DataLab ile Pratik Yapın

DataLab, farklı programlama paradigmalarını pratik etmek için harika bir platformdur. DataLab ile, yapay zeka tarafından oluşturulan kod ile tam özellikli bir not defteri görünümü arasında geçiş yapabilir; böylece kodunuzu güvenle gözden geçirip düzenleyebilir ve genişletebilirsiniz. Bu esneklik, nesne yönelimli, fonksiyonel, yordamcı ve bildirime dayalı programlama kavramlarını uygulamak için idealdir.

Dahası, DataLab’in çeşitli veri kaynaklarına bağlantısı ve önceden paketlenmiş örnek veri kümeleri, pratik yapmanız ve becerilerinizi geliştirmeniz için fırsatlar sunar. Yerleşik raporlama özellikleri, canlı güncellenen raporları kolayca oluşturmanıza olanak tanır; böylece bulgularınız her zaman güncel ve paylaşılabilir olur.

Ek Kaynaklar

Öğreniminizi ve proje çalışmalarınızı daha da geliştirmek için şu kaynakları yararlı bulabilirsiniz: Tüm Düzeyler için 60 Python Projesi ve Tüm Düzeyler için 7 Yapay Zeka Projesi. DataLab'de oluşturup yönetebilecekleriniz gibi bu projeler, anlayışınızı ve becerilerinizi derinleştirmek için kritik önemde olan uygulamalı deneyim sağlar.

Fonksiyonel programlamada özyineleme ve yordamcı programlamada sınıf kalıtımı gibi ileri konuları pratik etmek istiyorsanız, modüler kod yazmada sizi uzmanlaştıracak Introduction to Programming Paradigms kursunu alın. 

Unutmayın, veri bilimi alanında profesyonel olma yolu kesintisiz bir öğrenme sürecidir. Zorlukları kucaklayın ve ilerlemenizi kutlayın.

Samuel Shaibu

Yazar

Samuel Shaibu

Veri alanında deneyimli bir profesyonel ve yazar; veri dünyasında uzmanlaşmak isteyenleri güçlendirmeye tutkuyla bağlı.

Sıkça Sorulan Sorular

Bir veri bilimci olmak için tüm programlama paradigmalarını öğrenmem gerekir mi?

Tüm paradigmaları öğrenmek faydalı olsa da şart değildir. OOP ve FP gibi yaygın olanlara odaklanabilirsiniz.

Veri bilimi projem için hangi paradigmamı kullanacağıma nasıl karar verebilirim?

Projenizin doğasını ve üzerinde çalıştığınız veri türünü anlayarak başlayabilirsiniz. Karmaşık nesneler ve ilişkilerle uğraşıyorsanız, OOP uygun bir tercih olabilir.

Veri bilimi için en iyi paradigma hangisidir?

En iyi paradigma diye bir şey yoktur. En uygun seçim, çözdüğünüz probleme bağlıdır.

Yordamcı programlama diğer paradigmalarla birleştirilebilir mi?

Evet, Python da dahil olmak üzere birçok modern programlama dili OOP ve FP gibi paradigmaların birleştirilmesini destekler.

Programlama paradigmalarında ustalaşmam ne kadar sürer?

Belirli bir zaman çerçevesi yoktur. Önceki programlama deneyiminize ve hedeflediğiniz anlayış derinliğine bağlıdır.

Konular

İlgili