# Πώς να ορίσετε και να χρησιμοποιήσετε τις κλάσεις TypeScript

Οι κλάσεις TypeScript παρέχουν έναν σαφή και δομημένο τρόπο οργάνωσης των δεδομένων και της συμπεριφοράς σε ένα **αντικείμενο**. Αυτό σας διευκολύνει στη μοντελοποίηση οντοτήτων και εννοιών στον κώδικά σας.

## Τι είναι οι κλάσεις TypeScript;

Οι κλάσεις είναι μια βασική έννοια του TypeScript, μιας γλώσσας προγραμματισμού βασισμένης στο JavaScript. Οι κλάσεις αντιπροσωπεύουν μια **δομημένη μέθοδο για τον ορισμό αντικειμένων** και την εφαρμογή αντικειμενοστρεφούς προγραμματισμού (OOP). Οι κλάσεις TypeScript είναι σαν σχέδια για τη δημιουργία αντικειμένων που συγκεντρώνουν δεδομένα και μεθόδους που σχετίζονται λογικά μεταξύ τους.

[Το TypeScript](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/ti-einai-to-typescript/) περιέχει όλες τις λειτουργίες του JavaScript και περιλαμβάνει επίσης **στατική τυποποίηση**. Αυτό σας επιτρέπει να καθορίσετε τύπους δεδομένων για [λειτουργίες](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/synartiseis-typescript/), μεταβλητές και κλάσεις [TypeScript](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/synartiseis-typescript/), ώστε να μπορείτε να εντοπίσετε σφάλματα κατά τη διάρκεια της μεταγλώττισης. Εκτός από την ασφάλεια τύπων, οι κλάσεις TypeScript υποστηρίζουν επίσης έννοιες όπως η κληρονομικότητα και η αφαίρεση, οι οποίες διευκολύνουν την ανάπτυξη σύνθετων εφαρμογών.

Με τις κλάσεις TypeScript, μπορείτε να δημιουργήσετε μια σαφή **ιεραρχία κλάσεων** που κληρονομούν ιδιότητες και μεθόδους. Αυτό προάγει την επαναχρησιμοποίηση και τη δομή του κώδικα. Οι κατασκευαστές κλάσεων επιτρέπουν την αρχικοποίηση των περιπτώσεων και εξασφαλίζουν τη συνεπή δημιουργία αντικειμένων.

## Ποια είναι η σύνταξη για τις κλάσεις TypeScript;

Η σημειογραφία των κλάσεων TypeScript είναι παρόμοια με αυτή του **ECMAScript 6 (ES6)** και αποτελεί μια εκτεταμένη έκδοση της σύνταξης κλάσεων JavaScript. Μια κλάση TypeScript μπορεί να περιέχει διάφορα στοιχεία για τον ορισμό της δομής και της συμπεριφοράς των αντικειμένων. Τα κύρια στοιχεία είναι:

- **Ιδιότητες**
- **Κατασκευαστές**
- **Μέθοδοι**

### Ιδιότητες

Οι ιδιότητες καθορίζουν την **κατάσταση ενός αντικειμένου**. Αποθηκεύουν τιμές δεδομένων και μπορούν να συνοδεύονται από τύπους δεδομένων, έτσι ώστε να έχουν μόνο έγκυρες τιμές.

```typescript
class ClassName {
    propertyName: propertyType;
}
```

- **ClassName**: το όνομα της κλάσης
- **propertyName**: το όνομα της ιδιότητας που θέλετε να ορίσετε
- **propertyType**: ο τύπος δεδομένων της ιδιότητας

Ακολουθεί ένα συγκεκριμένο παράδειγμα:

```typescript
class Person {
    name: string;
}
```

Πρώτα, ορίζεται μια κλάση `Person` με μια ιδιότητα `name` τύπου `string`. Αυτό σημαίνει ότι οι παρουσίες της κλάσης `Person` έχουν μια ιδιότητα `name` που αποθηκεύει **συμβολοσειρές**.

### Κατασκευαστής

Ο κατασκευαστής στο TypeScript είναι μια ειδική μέθοδος που καλείται όταν δημιουργείται μια παρουσία κλάσης (αντικείμενο). Χρειάζεται για **την αρχικοποίηση των ιδιοτήτων ενός αντικειμένου**. Ο κατασκευαστής ουσιαστικά ορίζει την αρχική κατάσταση μιας παρουσίας. Μπορείτε να καθορίσετε παραμέτρους στον κατασκευαστή για να μεταβιβάσετε τιμές κατά την παρουσίαση κλάσεων TypeScript.

Η βασική σύνταξη ενός κατασκευαστή στο TypeScript είναι:

```typescript
class ClassName {
    constructor(parameter1: Type1, parameter2: Type2, ...) {
    }
}
```

- **κατασκευαστής**: κάθε κλάση μπορεί να έχει έναν μόνο κατασκευαστή. Εάν δεν έχει οριστεί κατασκευαστής, δημιουργείται από προεπιλογή ένας κενός κατασκευαστής.
- **παράμετρος: Τύπος**: οι παράμετροι είναι προαιρετικές, ανάλογα με την κλάση και τις απαιτήσεις της. Οι παράμετροι πρέπει να φέρουν ετικέτα με τους τύπους δεδομένων τους.

Ένα παράδειγμα κατασκευαστή:

```typescript
class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
```

Στο παραπάνω παράδειγμα, η κλάση `Person` έχει έναν κατασκευαστή που δέχεται δύο παραμέτρους `firstName` και `lastName`. Κατά **τη δημιουργία μιας παρουσίας** αυτής της κλάσης, αυτές οι παράμετροι μεταβιβάζονται και ο κατασκευαστής αρχικοποιεί τις ιδιότητες `firstName` και `lastName` της παρουσίας με τις αντίστοιχες τιμές. `this` αναφέρεται στην τρέχουσα παρουσία της κλάσης στην οποία εκτελείται ο κώδικας.

### Μέθοδοι

Στο TypeScript, οι μέθοδοι είναι συναρτήσεις που μπορούν να οριστούν σε κλάσεις και να εφαρμοστούν στις περιπτώσεις τους. Οι μέθοδοι σας επιτρέπουν να εκτελέσετε **συγκεκριμένες ενέργειες ή λειτουργίες** στο πλαίσιο μιας κλάσης.

```typescript
class ClassName {
    // ...
    methodName(parameter1: Type1, parameter2: Type2, ...): ReturnType {
    }
    // ...
}
```

- **methodName**: όνομα της μεθόδου
- **parameter: Τύπος**: προαιρετικές παράμετροι που δέχεται η μέθοδος
- **ReturnType**: αυτός είναι ο τύπος δεδομένων που καθορίζει την τιμή που επιστρέφει η μέθοδος. Εάν η μέθοδος δεν επιστρέφει τίποτα, μπορείτε να καθορίσετε `void`.

Για να αποκτήσετε πρόσβαση σε μια ιδιότητα ή να καλέσετε μια μέθοδο σε μια παρουσία κλάσης, χρησιμοποιήστε τον τελεστή τελείας `.` ακολουθούμενο από το όνομα της μεθόδου και τα απαιτούμενα ορίσματα, εάν η μέθοδος απαιτεί παραμέτρους.

```typescript
class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    getFullName(): string {
        return this.firstName + " " + this.lastName;
    }
}
const person = new Person("John", "Doe");
const fullName = person.getFullName();
```

Η μέθοδος `getFullName` χρησιμοποιείται για τη δημιουργία και την επιστροφή του πλήρους ονόματος του ατόμου. Έχει πρόσβαση στις τιμές των ιδιοτήτων `firstName` και `lastName` που ορίζονται στην κλάση και αρχικοποιούνται στον κατασκευαστή. Το αντικείμενο `person` δημιουργείται από τη λέξη-κλειδί `new` που ακολουθείται από το όνομα της κλάσης και τις αντίστοιχες παραμέτρους. Η μέθοδος **συνενώνει τις δύο συμβολοσειρές** όταν καλείται και επιστρέφει το πλήρες όνομα ως συμβολοσειρά. Η έξοδος για το αντικείμενο `person` είναι επομένως «John Doe».

## Παραδείγματα κλάσης TypeScript

Οι κλάσεις TypeScript διαθέτουν διάφορους μηχανισμούς για την οργάνωση και τον έλεγχο **της δομής και της συμπεριφοράς των αντικειμένων**. Παρακάτω, παρουσιάζουμε μερικές έννοιες για τη χρήση των κλάσεων TypeScript.

### Πρόσβαση

Το TypeScript προσφέρει τρεις τροποποιητές πρόσβασης: `public`, `private` και `protected` για τον έλεγχο της πρόσβασης σε ιδιότητες και μεθόδους εντός και εκτός της κλάσης.

- **δημόσιο (πρότυπο)**: οι ιδιότητες και οι μέθοδοι που φέρουν την ένδειξη `public` μπορούν να κληθούν από οπουδήποτε, τόσο εντός όσο και εκτός της κλάσης.
- **ιδιωτικές**: `private` αναφέρεται σε ιδιότητες και μεθόδους που μπορούν να κληθούν μόνο μέσα στην ίδια την κλάση. Δεν είναι προσβάσιμες από εξωτερικά τμήματα κώδικα.
- **προστατευμένες**: οι ιδιότητες και οι μέθοδοι που φέρουν την ένδειξη `protected` μπορούν να κληθούν από την ίδια την κλάση και από παράγωγες κλάσεις (στην κληρονομικότητα), αλλά όχι από εξωτερικό κώδικα.

```typescript
class Person {
    private socialSecurityNumber: string;
    constructor(ssn: string) {
        this.socialSecurityNumber = ssn;
    }
    greet() {
        console.log("Hello, I am a person with SSN: " + this.socialSecurityNumber);
    }
}
const person = new Person("123-45-6789");
person.greet();
```

Σε αυτό το παράδειγμα, `socialSecurityNumber` είναι μια ιδιωτική ιδιότητα στην οποία μπορεί να έχει πρόσβαση μόνο η κλάση `Person`. Ωστόσο, μπορείτε να καλέσετε τη μέθοδο `greet` από έξω από την κλάση.

### Κληρονομιά

Η κληρονομικότητα είναι μια θεμελιώδης έννοια στην αντικειμενοστρεφή προγραμματισμό (OOP) που χρησιμοποιείται στο TypeScript και σε πολλές άλλες γλώσσες προγραμματισμού του διαδικτύου. Επιτρέπει τη δημιουργία μιας νέας κλάσης με βάση μια υπάρχουσα **βασική κλάση ή υπερκλάση**. Η παράγωγη κλάση (υποκλάση) κληρονομεί τις ιδιότητες και τις μεθόδους της βασικής κλάσης και μπορεί να τις επεκτείνει ή να τις προσαρμόσει.

```typescript
class Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    makeSound() {
        console.log("Some generic sound");
    }
}
class Dog extends Animal {
    makeSound() {
        console.log(this.name + " barks");
    }
}
const myDog = new Dog("Buddy");
myDog.makeSound();
```

Χρησιμοποιώντας τη λέξη-κλειδί `extends`, η υποκατηγορία `Dog` κληρονομεί τις ιδιότητες και τις μεθόδους από την κατηγορία `Animal`. Η κατηγορία `Dog` αντικαθιστά τη μέθοδο `makeSound` για να προσθέσει μια συγκεκριμένη συμπεριφορά, ενώ κληρονομεί την ιδιότητα `name` από `Animal`.

### Μόνο για ανάγνωση

Μπορείτε να χρησιμοποιήσετε `readonly` για να δηλώσετε ιδιότητες των κλάσεων ή των αντικειμένων TypeScript ως **μόνο για ανάγνωση**. Αυτό σημαίνει ότι μόλις μια ιδιότητα μόνο για ανάγνωση έχει αρχικοποιηθεί, η τιμή της δεν μπορεί πλέον να αλλάξει.

```typescript
class Circle {
    readonly pi: number = 3.14159;
    radius: number;
    constructor(radius: number) {
        this.radius = radius;
    }
    getArea() {
        return this.pi    *this.radius*    this.radius;
    }
}
const myCircle = new Circle(5);
console.log(myCircle.getArea()); // Output: ≈ 78,54
```

Η ιδιότητα `pi` είναι μόνο για ανάγνωση στο παράδειγμά μας και αρχικοποιείται στον κατασκευαστή. Μετά την αρχικοποίηση, `pi` δεν μπορεί πλέον να αλλάξει. Εάν προσπαθήσετε να τροποποιήσετε την τιμή της `pi` μετά την αρχικοποίηση, το TypeScript θα δημιουργήσει ένα σφάλμα σύνταξης.


This is a markdown version of: [https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/taxeis-typescript/](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/taxeis-typescript/) for AI/LLM consumption.