Klasi (forritun)

Klasi er eining í hlutbundinni forritun sem gegnir hlutverki sniðmáts. Klasi ákveðins hlutar lýsir eiginleikum og aðgerðum tilviks hans. Taka má sem dæmi klasann Bíll sem hefði að geyma upplýsingar um lit og gerð bílsins sem og fjölda hurða og dekkja. Þegar klasinn er í hendi er má búa til mörg tilvik af honum með mismunandi eiginleika, tilvik af grænum bíl með 4 hurðir og 15 dekk eða rautt tilvik 2 hurðir og 4.

Ástæður 
Klasar brjóta forrit niður svo auðveldara sé að vinna með þau. 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.

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 

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.

Dæmi um klasa í Python:

class Maður:
    "Manneskja með sál og hjarta."
    def __init__(sjálf, nafn, aldur):
        sjálf.nafn = nafn.capitalize()
        sjálf.aldur = aldur
    def kynning(sjálf):
        print("Komið sæl, ég heiti {0} og er {1} ára.".format(sjálf.nafn, sjálf.aldur))

Anna = Maður("anna", 26)
print("Nafn:", Anna.nafn)       # Prentar „Aldur: 26“
print("Aldur:", Anna.aldur)     # Prentar „Nafn: Anna“
Anna.kynning()                  # Prentar „Komið sæl, ég heiti Anna og er 26 ára.“

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(); // prenta "Hello world!" á viðmótinu
    }
}

Sjá einnig 
 Erfðir
 Grunnklasasafn
 Smiður

Heimildir

Tilvísanir 

Forritun