Objektno programiranje - uvod

Objektno programiranje - uvod

Avtor: Matija Lokar

Objekti

  • Objekt je skupek podatkov, s katerim želimo upravljati kot s celoto.
  • Ima

    • Podatke

      • kaj o objektu vemo/hranimo
    • Metode

      • Kaj objekt "zna"
      • Kakšne metode lahko izvajamo nad njem
  • Vsak objekt pripada nekemu razredu. Če pripada objekt x razredu R, potem pravimo tudi da je x objekt tipa R.

Znani objekti

  • Nekaj primerov objektov iz standardnih knjižnic jezika C# :

    • Objekt tipa StreamReader predstavlja vhodni kanal. Kadar želimo brati s tipkovnice ali z datoteke, naredimo tak objekt in kličemo njegovo metodo ReadLine za branje ene vrstice.
    • Objekt System.Console predstavlja standardni izhod. Kadar želimo kaj izpisati na zaslon, pokličemo metodo WriteLine na objektu System.Console .
    • Objekt tipa Random predstavlja generator naključnih števil.
  • Seveda pa so objekti uporabni predvsem zato, ker lahko programer definira nove razrede in objekte.

Objekti

  • stanja:

    • Lastnosti, podatki, komponente
  • “znanje”

    • Odzivanje na dogodke
  • Združeno v celoto

    • Podatki in metode, ki opisujejo neko stvar/objekt
    • Žoga:

      • Podatki: velikost, barva, položaj v prostoru, …
      • Metode: sprememba velikosti, sprememba položaja, …
    • Ulomek:

      • Podatki: števec, imenovalec
      • Metode: spremeni števec, spremeni imenovalec, seštej, obratna vrednost, lepo izpiši, ...

Programiranje v C#

  • Sestavljanje razredov

    • Opis lastnosti objektov
    • Opis metod (“znanja” objektov)

      • Ustvarjanje objektov in njihova uporaba
      • "Ukazovanje" objektom, kaj naj počnejo
      • Objekt za izpolnitev določene naloge potrebuje druge objekte in njihove metode
  • Začetek

    • Glavni razred (ki ima metodo Main )
    • Izvajanje metode Main – ustvarjanje objektov, proženje dogodkov, odzivanje na dogodke, …

Objekti

  • Objekt je kakršenkoli skupek podatkov, s katerimi želimo upravljati.
  • Osnovni pristop objektnega programiranja

    • objekt = podatki + metode za delo s podatki.
  • Ko želimo kak podatek (objekt) obdelati, objektu (podatku) signaliziramo, kaj naj se zgodi.

    • Pokličemo ustrezno metodo v objektu.
  • Objekt je "črna škatla", ki sprejema in pošilja sporočila. Jedro objekta sestavljajo njegove spremenljivke, okrog katerih se nahajajo njegove metode.

Princip črne škatle

  • Imamo objekt obj , ki hrani podatke o neki osebi.
  • Zanima nas inteligenčni količnik te osebe.

    • obj.KolikoJeIQ()

      (12.jpg)
  • Objekt se odzove z odgovorom
  • Uporabnika ne zanima, kako je objekt prišel do odgovora, le kaj ga lahko vpraša in v kakšni obliki bo dobil odgovor!
  • Ni važno, kako je objekt odgovoril – kako je prišel do IQ (je to podatek, ki je zapisan nekje v objektu, je to rezultat nekega preračunavanja …

Prednosti "črne škatle"

  • Če kasneje spremenimo notranjost "črne škatle" (razreda)
  • Spremembe v programih, ki razred uporabljajo, niso potrebne

    • Seveda, če je način spraševanja in odgovarjanja ostal nespremenjen
    • Če so metode ostale enake (imajo enaka imena, nabor parametrov in tip rezultata)

Klasično/objektno progr.

  • metoda f na podatku x :
  • Klasično:

    • Izvedi metodo f na podatku x
    • f(x);
  • Objektno:

    • podatku/objektu x signaliziraj, da naj izvede metodo f
    • x.f();

Od kje razredi?

  • Veliko vgrajenih (oziroma v standardnih knjižnicah) v C#

  • Drugi viri

    • Naši “stari” razredi
    • Drugi programerji
  • Potrebujemo dostop do ustrezne datoteke (dll, exe)

Moj prvi razred

Oglejmo si naslednji program:

(15.jpg)

Objekt in ime spremenljivke

  • NekiObjekt a;

    • a je naslov, kjer bo objekt (referenca na objekt)
  • new NekiObjekt();

    • V pomnilniku se je naredil objekt tipa NekiObjekt() / po pravilih, ki so določena z opisom razreda NekiObjekt
  • a = new NekiObjekt();

    • V pomnilniku se je naredil objekt tipa NekiObjekt() in a kaže na ta novo ustvarjeni objekt

Ustvarjanje objektov

  • Razred je šablona, ki definira spremenljivke in metode skupne vsem objektom iste vrste.
  • class

    • Načrt objekta, šablona
  • Primerek razreda (instanca) – konkretni objekt

    • Ustvarimo ga z new
    • Brez tega objekta NE MOREMO uporabiti
    • NekiObjekt a;

      • Objekt NE obstaja
      • a je IME objekta
      • natančneje

        • a je ime spremenljivke, kjer hranimo NASLOV objekta vrste NekiObjekt

C# in objekti

  • Razred (class) je opis vrste objekta (načrt, kako naj bo objekt videti) – opis ideje objekta
  • Primerek razreda (instanca) – konkretni objekt
(18.jpg)

Ustvarjanje objektov

  • Ulomek ime = new Ulomek(3, 4);
  • Rečemo:

    • V objektu ime je shranjen ulomek ¾;
  • Točneje

    • V spremenljivki ime je naslov nekega objekta tipa Ulomek , ki predstavlja ulomek ¾.
    • Spremenljivka ime kaže na objekt tipa Ulomek , ki …
  • Prvi ukaz je dejansko spoj dveh stavkov:

    • deklaracija
    • prireditev
  • Ulomek ime;
  • ime = new Ulomek(3, 4);

Ustvarjanje objektov

  • Ulomek ime;
  • ime = new Ulomek(3, 4);

ime: 2h11b11

2h11b11:
¾

Še en zgled

  • Poglejmo si še en zgled. Denimo, da bi radi napisali program, ki bo prebral nek ulomek in mu prištel 1/2.
  • "klasično" se bomo tega lotili takole

Povečaj ulomek "klasično"


using System;
namespace UlomkiKlasika {
  class Program
  {
    public static void Main(string[] args)
    {
      // vnos podatkov
      Console.Write("Števec ulomka: ");
      string beri = Console.ReadLine();
      int stevec = int.Parse(beri);
      Console.Write("Imenovalec ulomka: ");
      beri = Console.ReadLine();
      int imenovalec = int.Parse(beri);
      // "delo"
      stevec = stevec + 1;
      imenovalec = imenovalec + 2;
      // izpis
      Console.WriteLine("Nov ulomek je: " + stevec + " / " + imenovalec);
      Console.Write("Press any key to continue . . . ");
      Console.ReadKey(true);
    }
  }
}

Povečaj ulomek - objektno

  • Razred Ulomek
  • Hrani podatke o svojem števcu in imenovalcu
  • "se zna" povečati za drug ulomek

    • Vsebuje metodo, ki ta ulomek poveča za drug ulomek

"Objektni" program

(24.jpg)

Ulomki - objektno

(25.jpg)

Ulomki - objektno

(26.jpg)

Primerjava

"klasično"

// "delo"
stevec = stevec + 1;
imenovalec = imenovalec + 2;
"objektno

Ulomek polovica = new Ulomek(1, 2);
moj.Pristej(polovica);

Objektno programiranje

  • Problem

    • Z analizo ugotovimo, kakšne objekte potrebujemo za reševanje
    • Pregledamo, ali že imamo na voljo ustrezne razrede

      • Standardna knjižnica
      • Druge knjižnice
      • Naši stari razredi
    • Sestavimo ustrezne manjkajoče razrede
    • Sestavimo “glavni” program, kjer s pomočjo objektov rešimo problem
0%
0%