Hem Om SIGBIAnmäl till vårt nyhetsbrevKontaktSitemap

OOP - Klass


Källkod som kapslas in och som skydda mot otillåtna anrop utifrån

OOP klasser programmering
Objektorienterad programmering ser till maskinens komponenter och låter programmeraren implementera dessa som klasser
Objektorienterad programmering, OOP, bygger på inkapsling av källkod. Därmed kan inte anrop från andra processer och trådar som inte har tillträde till den skyddade koden genomföras. Det är en stor fördel. När källkod kan anropa alla olika subrutiner och variabler utan någon som helst validering får man stora problem ju större och mer komplext ett program blir. Detta löser OOP. När källkoden till en klass är utvecklad, testad och klar så implementerar man nästa klass.
  • Kapsla in koden och skydda den från utomstående, icke tillåtna, anrop

Problem som kan uppstå i stora och komplexa projekt men som avhjälps med OOP

Ju större ett projekt är och ju mer källkod det innefattar desto viktigare är det att man har följt en tydlig linje vid implementationen. Det är då man verkligen drar nytta av OOP. Nedan listar vi ett par punkter och problem som ofta uppkommer vid mjukvaruutveckling. OOP, däremot, är framtagen för att lösa dessa problem.
  • När man hittat en bugg som ska rättas till så måste man med största sannolikhet göra samma ändring på flera ställen
  • Ändringar och uppdateringar i källkod riskerar samtidigt att införa andra fel som man inte förutsett
  • Ju fler gånger man har ändrat och uppdaterat källkoden desto svårare är det att följa strukturen
  • Desto större program desto svårare blir det att läsa och förstå källkoden
  • Program som utvecklats av en programmerare kan vara svåra att tyda av andra. De kan även vara svåra för programmeraren själv efter ett par år.
  • Alla dessa punkter är inget problem för OOP

Klass - Implementerad källkod som beskriver en verklig komponent - sök efter substantiven

objektorienterad programmering luftcylindrar ändlägen
När vi söker möjliga klasser att implementera letar vi efter substantiven i vår specifikation. Vi gör inte klasser av alla substantiv.
Vid början av programutvecklingen defineras klasserna som ska representera maskinen mjukvarumässigt. Ju mer noggrann man är desto mer tid sparar man i slutändan. En klass hittas enklast genom att leta igenom de substantiv som finns i specifikationen av maskinen. Det brukar vara en bra början. Vi kommer att använda en förpackningsmaskin i vårt exempel. I detta exempel så kommer förpackningsmaskinen att ha ett par luftcylindrar som har till uppgift att vika ihop bottnen av en låda samt stänga locket, det innebär att de kommer att köra mellan sina två ändlägen. Vi skapar en klass som heter Actuator.
  • Klassen är en beskrivning av en verklig komponent, omsatt i källkod
  • Leta efter substantiv - bra början vid identifieringen av möjliga klasser.
  • Noggrann identifiering av klasser sparar tid och kostnader längre fram i ert projekt

Varje klass har klienter, servers och metoder

LASAL har integrerat OOP redan från början. Vi använder ingen tredjeparts leverantör för själva den objektorienterade programmering. En klass har klienter för att ansluta till andra komponenter och göra anrop eller be om resultat från en beräkning. Klienten är den aktiva delen i ett program. En klient ansluts till en server. Servern svarar på tilltal och kan samtidigt anropa andra interna metoder. Det finns både globala och privata metoder att implementera hos en klass.
  • Klienter frågar efter resultat eller skickar anrop till andra komponenter
  • Servern svarar klienten och kan vid ett anrop också anropa egna metoder
  • Privata metoder är bara åtkomliga inom klassen
  • Globala metoder är öppna utåt mot de maskinkomponenter som har tillåtelse att anropa

Standardmetoderna som anropas automatiskt av operativsystemet

OOP standardmetoder cykliska metoder
Varje klass har flera standardmetoder som när de aktiverats av programmeraren anropas cykliskt av operativsystemet
Varje klass har möjligheten att implementera olika standardmetoder som anropas cykliskt av operativsystemet. De heter Init, RtWork, CyWork och Background. Init-metoden anropas vid uppstart av maskinen. RtWork (Realtime) är den metod som har högst prioritet och som vi implementerar uppgifter som kräver cykeltider med samma delta-tid varje gång. CyWork (Cyclic) har näst högst prioritet och används för att övergripande kontroll och iteration av maskinens program. Background är den standardmetod som sköter det rent visuella upp mot maskinens HMI. Background-metoden har lägst prioritet.

När vi lokaliserat våra klasser så ska de implementeras

Strukturerad Text objektorientering
Nu implementerar vi vad som ska ske när vi anropas vår luftcylinder beroende på de två metoderna. Forward innebär att vi sätter vår hårdvarutugång hög. Backward innebär att vi sätter vår hårdvarutgång låg.
Efter att vi valt ut maskinens komponenter som vi vill implementera som klasser gäller det att definera egenskaper och metoder som har till uppgift att få vår komponent att agera. I vår förpackningsmaskin har vi ett par luftcylindrar. Vi har redan skapat en klass Actuator. I ett första skede väljer vi att implementera två metoder Forward() och Backward() som har till uppgift att ställa vår luftcylinder i sina ändlägen.
  • En metod kan ha inparametrar för att kunna agera dynamiskt, ex. när vi ska positionera en motor. Då använder vi position, hastighet, acceleration och deceleration som inparametrar till vår metod
  • Själva implementationen inuti metoden skiljer sig inte mycket från vanlig programmering.
  • Det är strukturen och sättet man kapslar in koden som är det smarta med OOP

Förtydligar med en övergripande klass PackagingMachine - Styr hela förpackningsmaskinen

implementerad förpackningsmaskin
Klassen PackagingMachine har en CyWork-metod där följande if-satser implementeras. De har itlluppgift att kontrollera om våra booleans bFoldBottom och bCloseLid är true och när de är så ska vi anropa metoderna Forward() för att starta vikprocessen av vår låda.
För att tydligare beskriva hur vi anropar metoderna i Klassen Actuator skapar vi även en klass PackagingMachine som vid klartecken (boolean variabel bFoldBottom = true) viker botten på lådan och därefter vid nästa klartecken (boolean variabel CloseLid = true) stänger lådans lock. Denna kodsnutt är implementerad i CyWork-metoden hos klassen PackagingMachine. Det innebär att CyWork anropas cykliskt av operativsystemet.

Så ser resultatet ut med anslutna objekt

objektorienterad programmering objekt nätverk
TIll vänster presenterar vi vårt objekt av klassen Actuator med sin klient till vänster (cToActuator) och sen server till höger (ClassSvr). Till höger ser vi hur de är anslutna i skarpt läge och det övervakande objektet PackagingMachine1 som har implementerats för att sköta hela processen av maskinen.
När vi vill testa vår implementerade metod skapar vi objekt av våra klasser och placerar dem i ett "nätverk". Klienter och servrar ansluts som vi har tänkt och vi kompilerar. I bilden har vi även implementerat en klass som sköter förpackningsmaskinens alla processer. I detta skede styr vi bara våra luftcylindrar men det underlättar för förståelsen att se den objektorienterade källkoden grafiskt
  • Saker som definerar komponentens egenskaper sparas i variabler
  • Förändringar vi kan göra på vår verkliga komponent implementeras som metoder

Kortfattat - Klasser beskriver verkliga komponenter, maskinen består av dessa komponenter

Den objektorienterade programmeringstekniken bygger på klasser, klasser som är modeller av verkliga komponenter och som implementerats med källkod. Detta gör att OOP passar alldeles utmärkt till programmering av maskiner. Maskiner består ju av verkliga komponenter. Klassen kapslar in källkoden och skyddar den från anrop utifrån, anrop som inte har tillåtelse att exekvera metoder i vår klass.
  • Maskiner består av verkliga komponenter -. OOP bygger modeller av verkliga komponenter
  • Klassen kapslar in källkoden och skyddar den därmed från yttre anrop som saknar tillåtelse