TypeScript'te Sınıflar

TypeScript'te Sınıflar

Bu makale TypeScript'teki sınıfları açıklar.

YouTube Video

TypeScript'te Sınıflar

TypeScript'teki sınıflar, JavaScript'in ES6 sınıflarına dayanır ve tür açıklamaları ve erişim belirteçleri gibi ek özellikler sunar. Bu, nesneye yönelik programlama kavramlarını kullanmanıza olanak tanırken daha sağlam ve net tür güvenliği sağlar.

Aşağıda TypeScript'teki sınıfların temel kullanım ve özelliklerinin açıklamaları bulunmaktadır.

Temel Sınıf Tanımı

 1class Person {
 2    name: string;  // Member variable
 3    age: number;   // Member variable
 4
 5    // Constructor
 6    constructor(name: string, age: number) {
 7        this.name = name;
 8        this.age = age;
 9    }
10
11    // Method
12    greet(): void {
13        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
14    }
15}
16
17const person = new Person("Alice", 25);
18person.greet();  // Hello, my name is Alice and I am 25 years old.
  • name ve age, sınıfın özellikleridir (üye değişkenlerdir).
  • constructor, bir sınıf örneği oluştururken çağrılan ve argümanları alıp özelliklere değer atayan bir yöntemdir.
  • greet, sınıfın bir yöntemidir ve void tipi olarak herhangi bir dönüş değeri olmadığını gösterir.

Erişim Belirteçleri

TypeScript'te, sınıf özelliklerine ve yöntemlerine erişimi kontrol etmek için erişim belirteçlerini (public, private, protected) kullanabilirsiniz.

public

Varsayılan olarak, tüm özellikler ve yöntemler publictir. Bu, sınıfın dışından erişilebileceği anlamına gelir.

 1class Animal {
 2    public species: string;
 3
 4    constructor(species: string) {
 5        this.species = species;
 6    }
 7
 8    public makeSound(): void {
 9        console.log(`${this.species} makes a sound.`);
10    }
11}
12
13const animal = new Animal("Dog");
14console.log(animal.species);  // Dog
15animal.makeSound();           // Dog makes a sound.
  • species özelliği ve makeSound yöntemi public olarak tanımlanmıştır ve sınıfın dışından erişilebilir.

private

private belirtecini kullanmak, özelliklere veya yöntemlere sınıfın dışından erişimi engeller.

 1class Car {
 2    private brand: string;
 3
 4    constructor(brand: string) {
 5        this.brand = brand;
 6    }
 7
 8    public getBrand(): string {
 9        return this.brand;
10    }
11}
12
13const car = new Car("Toyota");
14// console.log(car.brand);  // Error: 'brand' is private and cannot be accessed.
15console.log(car.getBrand());  // Toyota
  • brand özelliği private olarak tanımlanmıştır, bu nedenle sınıfın dışından erişilemez.
  • Veriyi kapsüllemek, özellikleri private anahtar kelimesiyle gizleyerek sağlanabilir.

protected

protected belirteci, sınıfın dışından erişimi kısıtlar ancak alt sınıflarda (türetilmiş sınıflarda) erişime izin verir.

 1class Vehicle {
 2    protected model: string;
 3
 4    constructor(model: string) {
 5        this.model = model;
 6    }
 7}
 8
 9class Truck extends Vehicle {
10    public getModel(): string {
11        return this.model;
12    }
13}
14
15const truck = new Truck("Ford F-150");
16console.log(truck.getModel());  // Ford F-150
17
18// console.log(truck.model);
19// Error: Property 'model' is protected and only accessible within class 'Vehicle' and its subclasses.
  • model özelliği protected olarak tanımlanmıştır, bu nedenle sınıfın dışından erişilemez, ancak alt sınıflardan erişilebilir.

Getters ve Setters

TypeScript'te, get ve set anahtar kelimelerini kullanarak özellik değerlerini almak ve ayarlamak için getter ve setter tanımlayabilirsiniz.

 1class Employee {
 2    private _salary: number;
 3
 4    constructor(salary: number) {
 5        this._salary = salary;
 6    }
 7
 8    // Getter
 9    get salary(): number {
10        return this._salary;
11    }
12
13    // Setter
14    set salary(newSalary: number) {
15        if (newSalary > 0) {
16            this._salary = newSalary;
17        } else {
18            console.log("Salary must be positive.");
19        }
20    }
21}
22
23const employee = new Employee(50000);
24console.log(employee.salary);  // 50000
25employee.salary = 60000;
26console.log(employee.salary);  // 60000
27employee.salary = -100;        // Salary must be positive.
  • Bu örnekte, salary özelliğine dışarıdan erişimi ve güncellemeleri kontrol etmek için getter ve setter kullanılır. Setter, negatif değerleri önlemek için doğrulama yapar ve geçersiz bir değer girildiğinde uyarı mesajı gösterir.

Kalıtım

TypeScript'te sınıflar devralınabilir. extends anahtar kelimesini kullanarak bir üst sınıftan işlevsellik devralabilirsiniz.

 1class Animal {
 2    constructor(public name: string) {}
 3
 4    public move(): void {
 5        console.log(`${this.name} is moving.`);
 6    }
 7}
 8
 9class Bird extends Animal {
10    public fly(): void {
11        console.log(`${this.name} is flying.`);
12    }
13}
14
15const bird = new Bird("Sparrow");
16bird.move();  // Sparrow is moving.
17bird.fly();   // Sparrow is flying.
  • Bu örnekte, Bird sınıfı Animal sınıfından kalıtım alır ve böylece Animal sınıfının move yöntemi kullanılabilir. Ayrıca, kendi fly yöntemini tanımlar ve üst sınıftan özellikler devralırken yeni işlevsellik ekler.

Soyut Sınıflar

Soyut sınıflar (abstract), doğrudan örneklenemez ve alt sınıflarda somut uygulamalar sağlamak için şablon olarak kullanılır.

 1abstract class Shape {
 2    abstract getArea(): number;
 3
 4    public describe(): void {
 5        console.log("This is a shape.");
 6    }
 7}
 8
 9class Circle extends Shape {
10    constructor(private radius: number) {
11        super();
12    }
13
14    public getArea(): number {
15        return Math.PI * this.radius * this.radius;
16    }
17}
18
19const circle = new Circle(5);
20console.log(circle.getArea());  // 78.53981633974483
21circle.describe();  // This is a shape.
  • Bu örnekte, Shape soyut bir sınıf olarak tanımlanır ve getArea, alt sınıflar tarafından uygulanması gereken soyut bir yöntemdir. Circle sınıfı bu soyut sınıftan türetilir ve bir dairenin alanını hesaplamak için kendi getArea yöntemini uygular. Ayrıca, describe gibi somut yöntemler ortak işlevler olarak kalıtılır ve olduğu gibi kullanılabilir.

Arayüzlerle İlişki

Sınıflar, belirli özelliklere ve yöntemlere sahip olmalarını sağlamak için arayüzleri uygulayabilir.

 1interface Flyable {
 2    fly(): void;
 3}
 4
 5class Airplane implements Flyable {
 6    public fly(): void {
 7        console.log("The airplane is flying.");
 8    }
 9}
10
11const airplane: Flyable = new Airplane();
12airplane.fly();  // The airplane is flying.
  • Bu örnekte, Flyable arayüzü fly yöntemi için bir gereksinim tanımlar ve Airplane sınıfı, fly yöntemi için somut bir tanım sağlayarak bu arayüzü uygular. Bu sayede, Flyable türünde kabul edilen herhangi bir nesnenin fly yöntemi olacağı garanti edilir.

Statik Üyeler

Bir sınıfta statik üyeler tanımladığınızda, bu yöntemler ve özellikler doğrudan sınıfın kendisiyle ilişkilendirilir. Statik üyelere, sınıfın bir örneğini oluşturmadan erişilebilir.

 1class MathUtils {
 2    static PI: number = 3.14;
 3
 4    static add(a: number, b: number): number {
 5        return a + b;
 6    }
 7}
 8
 9console.log(MathUtils.add(10, 20)); // 30
10console.log(MathUtils.PI); // 3.14
  • Statik yöntemleri static anahtar kelimesiyle tanımlarsınız.
  • Bu örnekte, MathUtils sınıfı add adlı statik bir yöntem ve PI adlı statik bir özellik tanımlar.
  • Statik üyeler, sınıf örneklerine ait değildir; doğrudan sınıf üzerinden çağrılabilir.

Özet

TypeScript sınıfları, JavaScript sınıf işlevselliğine tür güvenliği, erişim belirleyicileri ve soyut sınıflar gibi özellikler ekler. Bu, daha güçlü ve daha güvenli nesne yönelimli programlamaya olanak tanır.

Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.

YouTube Video