Menu
Coddy logo textTech

Kapsülleme

Coddy'nin JavaScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 17 / 56.

Kapsülleme, verileri bir sınıf içinde tek bir birim altında birleştirme sürecidir.

Bu, sınıf verilerine doğrudan erişime kısıtlamalar getirmeye yardımcı olur ve nihayetinde verilerin yanlışlıkla değiştirilmesini önlememizi sağlar. 

Kapsüllemeyi basit bir örnekle iş başında görelim. Genel özelliklere sahip temel bir nesne oluşturalım:

const user = {
  name: "John",
  email: "john@example.com"
};

Herkes bu özelliklere doğrudan erişebilir ve bunları değiştirebilir:

user.name = "Jane"; // Dışarıdan değiştirilmesi kolay
console.log(user.email); // Dışarıdan erişilmesi kolay

Daha kapsüllenmiş bir yaklaşım, verileri gizlemek için closure'ları (kapatmaları) kullanır:

function createUser(name, email) {
  // Bu değişkenler özeldir (kapsüllenmiştir)
  let userName = name;
  let userEmail = email;
  
  // Özel verilerle etkileşime girmek için yöntemler içeren bir nesne döndür
  return {
    getName: function() {
      return userName;
    },
    getEmail: function() {
      return userEmail;
    },
    setName: function(newName) {
      userName = newName;
    }
  };
}
const encapsulatedUser = createUser("John", "john@example.com");

Şimdi, verilerle etkileşime geçmek için:

console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"

// Veriye doğrudan erişilemez
console.log(encapsulatedUser.userName); // undefined
challenge icon

Görev

Kullanıcı verilerini korumak için kapsülleme (encapsulation) kullanan bir kod size verilmiştir. Göreviniz, yaşa erişmek için bir getAge() yöntemi eklemektir.

Testler şunları kontrol edecektir:

  • getAge() yöntemi mevcut
  • Doğru yaşı döndürüyor
  • Yaş bilgisi gizli (private) kalıyor

Beklenen Çıktı:

john_doe

25

Kopya kağıdı

Kapsülleme (Encapsulation), verileri bir sınıf içinde tek bir birim altında birleştirme ve bu verilere doğrudan erişimi kısıtlayarak yanlışlıkla değiştirilmesini önleme sürecidir.

Kapsülleme olmadan, nesne özelliklerine herkese açık (public) olarak erişilebilir:

const user = {
  name: "John",
  email: "john@example.com"
};

user.name = "Jane"; // Doğrudan değiştirilebilir
console.log(user.email); // Doğrudan erişilebilir

Verileri kapsüllemek için closure (kapatma) kullanımı:

function createUser(name, email) {
  // Özel değişkenler (kapsüllenmiş)
  let userName = name;
  let userEmail = email;
  
  // Özel verilerle etkileşim kurmak için genel metodlar
  return {
    getName: function() {
      return userName;
    },
    getEmail: function() {
      return userEmail;
    },
    setName: function(newName) {
      userName = newName;
    }
  };
}

const encapsulatedUser = createUser("John", "john@example.com");
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
console.log(encapsulatedUser.userName); // undefined (özel verilere erişilemez)

Kendin dene

import { createUser } from './createUser.js';

// Test kodu - değiştirmeyin
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // "john_doe" çıktısını vermeli
console.log(user.getAge());      // 25 çıktısını vermeli

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler