OOP ehk Objektorienteeritud programmeerimine

Mis on OOP?

Objektorienteeritud programmeerimine (OOP) on viis koodi korraldamiseks klasside ja objektide kaudu. See on tänapäeva programmeerimise alus — suurem osa professionaalsetest programmidest on kirjutatud OOP põhimõtteid kasutades.

  • Klass on mall ehk “joonis” — see kirjeldab, millised omadused ja tegevused on objektil
  • Objekt on konkreetne eksemplar klassi alusel — see on “päris asi”

Näide: Auto on klass (mall). Sinu punane Toyota on objekt (konkreetne auto).

class Opilane
{
    // Väljad (fields) — omadused
    public string Nimi;
    public int Vanus;
    public double Hinne;
}

Objekti loomine ja kasutamine

// Loome objekti
Opilane opilane1 = new Opilane();

// Määrame väärtused
opilane1.Nimi = "Anna";
opilane1.Vanus = 20;
opilane1.Hinne = 4.8;

// Kasutame väärtusi
Console.WriteLine($"Nimi: {opilane1.Nimi}");
Console.WriteLine($"Vanus: {opilane1.Vanus}");
Console.WriteLine($"Hinne: {opilane1.Hinne}");

Konstruktor

Konstruktor on erikomeetod, mis kutsutakse välja objekti loomisel. See võimaldab kohe loomisel väärtused määrata. Konstruktori nimi on alati sama mis klassi nimi.

class Opilane
{
    public string Nimi;
    public int Vanus;
    public double Hinne;

    // Konstruktor
    public Opilane(string nimi, int vanus, double hinne)
    {
        Nimi = nimi;
        Vanus = vanus;
        Hinne = hinne;
    }
}

// Loome objekti konstruktoriga — väärtused kohe kaasa
Opilane opilane1 = new Opilane("Anna", 20, 4.8);
Opilane opilane2 = new Opilane("Jaan", 22, 3.5);

Meetodid klassis

Klassidel võivad olla oma meetodid — tegevused, mida objekt oskab teha.

class Opilane
{
    public string Nimi;
    public int Vanus;
    public double Hinne;

    public Opilane(string nimi, int vanus, double hinne)
    {
        Nimi = nimi;
        Vanus = vanus;
        Hinne = hinne;
    }

    // Meetod — kuvab õpilase info
    public void KuvaInfo()
    {
        Console.WriteLine($"Nimi: {Nimi}, Vanus: {Vanus}, Hinne: {Hinne}");
    }

    // Meetod — kontrollib, kas õpilane on läbinud
    public bool OnLabinud()
    {
        return Hinne >= 3.0;
    }
}

// Kasutamine
Opilane opilane = new Opilane("Marta", 21, 4.2);
opilane.KuvaInfo();

if (opilane.OnLabinud())
    Console.WriteLine(opilane.Nimi + " on aine läbinud!");
else
    Console.WriteLine(opilane.Nimi + " ei ole läbinud.");

Mitu objekti — listi kasutamine

OOP-i suur eelis on see, et saame luua palju objekte sama klassi alusel ja neid kogumisse salvestada.

List<Opilane> opilased = new List<Opilane>();
opilased.Add(new Opilane("Anna", 20, 4.8));
opilased.Add(new Opilane("Jaan", 22, 3.5));
opilased.Add(new Opilane("Marta", 21, 2.5));
opilased.Add(new Opilane("Peeter", 23, 5.0));

Console.WriteLine("=== Kõik õpilased ===");
foreach (Opilane op in opilased)
{
    op.KuvaInfo();
}

// Leiame parimad õpilased
Console.WriteLine("\n=== Läbinud õpilased ===");
foreach (Opilane op in opilased)
{
    if (op.OnLabinud())
        Console.WriteLine(op.Nimi);
}

Täielik koodinäide

using System;
using System.Collections.Generic;

class Auto
{
    public string Mark;
    public string Mudel;
    public int Aasta;
    public double Labisoidu; // km

    public Auto(string mark, string mudel, int aasta, double labisoidu)
    {
        Mark = mark;
        Mudel = mudel;
        Aasta = aasta;
        Labisoidu = labisoidu;
    }

    public void KuvaInfo()
    {
        Console.WriteLine($"{Aasta} {Mark} {Mudel} — {Labisoidu} km");
    }

    public bool OnVana()
    {
        return (2024 - Aasta) > 10; // vanem kui 10 aastat
    }

    public string Seisund()
    {
        if (Labisoidu < 50000) return "Suurepärane";
        else if (Labisoidu < 150000) return "Hea";
        else return "Kulunud";
    }
}

class Program
{
    static void Main()
    {
        List<Auto> autod = new List<Auto>();
        autod.Add(new Auto("Toyota", "Corolla", 2018, 85000));
        autod.Add(new Auto("Volkswagen", "Golf", 2010, 210000));
        autod.Add(new Auto("BMW", "320i", 2022, 15000));
        autod.Add(new Auto("Ford", "Focus", 2013, 130000));

        Console.WriteLine("=== Autode nimekiri ===");
        foreach (Auto auto in autod)
        {
            auto.KuvaInfo();
            Console.WriteLine($"   Seisund: {auto.Seisund()}");
            if (auto.OnVana())
                Console.WriteLine("   ⚠ See auto on vanem kui 10 aastat.");
            Console.WriteLine();
        }
    }
}