Klasi (forritun)

Úr Wikipediu, frjálsa alfræðiritinu

Klasi er eining í forritun sem er forrituð með eitthvað skilgreint markmið eða hlutverk. Klasar eru notaðir til þess að skipta forriti niður í einingar og eru eitt megineinkenni hlutbundinnar forritunar.

Klasar brjóta niður forritin þannig að það sé auðveldara að vinna með þau. Ákveðnir hlutir um ákveðið efni eru alltaf á sínum stað og við vitum hvar leita þarf að þeim.

Ef við tökum bíl sem dæmi, þá gerum við klasa sem skilgreinir eigindi bílsins, eins og hurðir, dekk, lit og gerð. Eftir að við gerum klasann þá getum við gert eins mörg mismunandi tilvik af honum og við viljum. Við getum t.d. búið til tilvikið „einn grænn bíll með 4 hurðir, 15“ dekk“ eða „rauður bíll með 5 hurðir og 17“ dekk“.

Meginreglan er að skipta forritinu niður í einingar sem eru hannaðar á þann veg að breyting í einum klasa hafi sem minnst áhrif á aðra hluti forritsins til þess að auðvelda okkur smíði stórra kerfa.

Hentugast er að reyna að gera almenna klasa sem hægt er að endurnýta þegar sömu virkni vantar í önnur verkefni. Til þess að ekki þurfi að skrifa klasa sem er þegar til, og einnig til að nýta klasa sem búið er að prófa út í gegn og vitað að virkar mjög vel.

[breyta] Klasaskil

Klasi getur til dæmis séð um tengingu við gagnagrunn. Þá nota aðrir klasar hann til að hafa samskipti við gagnagrunninn. Klasar geta haft samskipti sín á milli beint eða í gegnum skil. Skil eru notuð sem skilgreiningarhluti á klasa til að auðvelda samskipti milli forritunareininga innan forrits.

Dæmi í Java: Klasinn Maður og klasinn KarlMaður sem erfir klasann Maður. Það þýðir að kall í klasann KarlMaður getur nýtt aðferðir sem eru skilgreindar í klasanum Maður:

 public class Maður {
    public void VeifaHöndum(){
    //aðferð til að veifa höndum
    }
 }
 
 public class KarlMaður extends Maður{  //extends er skipunin í java sem segir erfir
  public void LataVaxaSkegg() {
  //Aðferð til að láta skegg vaxa
  }
 }
 
 public static void main(string Args[]) {
   KarlMaður karlMaður = new KarlMaður();
   karlMadur.VeifaHöndum();  
   karlMaður.LataVaxaSkegg();
 }

Klasinn sem erfir getur framkvæmt aðgerðir og notað breytur sem eru í erfðum klasa sem eru skilgreindar sem public eða protected en ekki ef skilgreiningin private er notuð. Í dæminu að ofan ef aðgerðin VeifaHöndum() væri skilgreind svona: private void VeifaHöldum() þá hefði klasinn KarlMaður ekki aðgang að aðgerðinni og forritsstubburinn að ofan væri ólöglegur.

Á sama hátt er hægt að láta skil erfa skil en skil geta ekki erft klasa og klasi getur ekki erft skil.

[breyta] Private, protected, og public

Klasar og klasabreytur geta verið skilgreind sem public, private or protected. Þessir valmöguleikar skilgreina aðgengið í klasann.

Private þýðir að aðeins föll sem eru í klasanum sjálfum fá aðgang.

Protected leyfir klasanum sjálfum og öllum undirklösum að fá aðgang.

Public þýðir að allir fá aðgang, hann er alveg opin fyrir öllum.

Hugrænn klasi gengur út á það að hægt sé að skilgreina uppbyggingu klasans, segja hvaða breytur og föll hann inniheldur án þess að útfæra vinnuna sjálfa. Þeir sem að erfa hugræna klasa verða að útfæra þau föll sem að eru ekki útfærð í hugræna hlutanum. Hugrænn klasi er ekki eiginlegur klasi; Hann gerir ekki neitt og er bara notaður til að samnýta eiginleika milli klasa.

Þegar skilgreindur er hlutrænn klasi þá vita þeir klasar sem að erfa hann ekki hvernig hann útfærir hlutrænu föllin.

Hérna er eitt dæmi í C++, klasi sem við köllum Hello er gerður með smið sem tekur inn streng. Þegar við köllum á fallið Say() þá mun tilvik af Hello prenta Hello{what} á skjáinn.

using System;
public class Hello
{
    private string what;
    public Hello(string s)
    {
        what = s;
    }    
    public void Say()
    {
        Console.WriteLine("Hello " + what + "!");
    }
}
public class Program
{
    public static void Main(string[] args)
    {
        Hello helloWorld = new Hello("world");
        helloWorld.Say(); // prints "Hello world!" onto the console
    }
}

[breyta] Heimildir