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 codice_1 og klasinn codice_2 sem erfir klasann codice_1. Það þýðir að kall í klasann codice_2 getur nýtt aðferðir sem eru skilgreindar í klasanum codice_1:

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