FRI:UNI:Vodenje projektov:Načrtovanje
Iz E-študij, proste zakladnice študentskega znanja
Vsebina |
Načrtovanje
- cilj je izdelava načrta programske opreme - izhodišče za kodiranje
- izrednega pomena za nadaljni razvoj
- slabo načrtovano programsko oprema je težko testirati in načrtovati - na dolgi rok je taka oprema veliko dražja
Sestavine načrta programske opreme
Arhitektura programske opreme
- rezultat delitve problemskega področja na podprobleme (module)
- prikazuje podrejenost/nadrejenost
- programsko arhitekturo lahko opišemo z izrazi: globina in širina grafa, razvejitev in združitev modulov
- grafi so lahko ciklični ali aciklični
- zaželene so drevesne strukture
Načrt podatkovnih struktur
- ponazarja logična razmerja med posameznimi podatkovnimi elementi
Načrt postopkov
- nedvoumno določeni: naravni jezik ni primeren
- psevdokoda, grafični in tabelarni zapisi
- strukturirano programiranje: zaporedje, pogoj, ponavljanje
- kodiranje na osnovi psevdokode je enostavno
- opcija so tudi diagrami poteka - pri večjih programih lahko postanejo nepregledni
- kadar je veliko začetnih pogojev in možnih odločitev je najpreglednejši način prikaza s pomočjo tabel
Načrtovalska načela
Postopna izboljšava
- primerno za načrtovanje majhnih programov
- arhitekturo naj bi definirali s postopnim razkrivanjem podrobnosti
Abstrakcija
- osredotočenje na tiste lastnosti, ki so za trenutno raven obravnave bistvene
- Postopkovna abtrakcija
- kakšne korake moramo storiti, da pridemo do cilja
- hirarhična struktura, na vrhu katere je problem, na nižjih ravneh pa posamezne ravni abstrakcije
- Podatkovna abstrakcija
- razgraditev problema na način, ki pripelje do neodvisnih modulov
- podrobnosti o dejanski podatkovi strukturi skrijemo v poseben modul
- drugi moduli morajo vedeti le to, kako se do podatkov dostopa, ostalo jih ne zanima
- to načelo je vodilo objektno usperjenega programiranja
Modularnost
- velja, da določen problem lažje (in hitreje) rešimo, če ga razdelimo na podprobleme (module)
- modulov mora biti ravno prav, saj nas tudi povezovanje stane nekaj časa in denarja
- module delimo glede na:
- Čas inkorporacije
- Aktivacijski mehanizem
- Obliko kontrole: sekvenčni, inkrementalni, vzporedni
- Notranja enotnost modulov: bolj kot je notranje enoten, boljši je
- stopnje notranje enotnosti:
- Naključna
- Logična
- Časovna
- Komunikacijska
- Zaporedna
- Funkcijska
- enotnost modula preizkusimo tako, da njegov namen opišemo z enim stavkom (imamo več glagolov, nekaj naštevamo, ipd. modul ne služi eni funkciji)
- Soodvisnot modulov: povezava med moduli, mora biti čim manjša
- Podatkovna
- Referenčna
- Kontrolna
- Zunanja
- Skupna
- Vsebinska
- Določemim vrstam soodvisnoti ni mogoče ubežati, a jih je dobro čim bolj omejiti
- Nizko soodvisnost in visoko notranjo enotnost dosežemo tako, da zasnujemo čim bolj preproste vmesnike
- Med moduli naj bi prišlo do izmenjve podatkov le kot posledica ustreznega klica
- Taki moduli imajo prednosti:
- sodelovanje programerjev je lažje
- manj verjetno je, da bi spremembe v enem vplivale na drugega
- delovanje je lažje razumeti
- taki moduli imajo manj napak
Skrivnanje informacij
- Modul naj skriva vse informacije, ki jih drugi moduli ne potrebujejo
- tak sistem je lažje testirati in vzdrževati
Načrtovalske metode
Funkcijska dekompozicija
- bolj filozofija kot metoda
- vsako funkcijo razdelimo na podfunkcije
- to nadaljujemo dokler ne pridemo do osnovnih operacij in struktur izbranega jezika
- povezati moramo funkcije določene med analizo in osnovne gradnike programske opreme
- dva načina:
- Načrtovanje od zgoraj navzdol
- Načrtovanje od spodaj navzgor
Načrtovanje na osnovi pretoka podatkov
- načrtovanje nadaljujemo tam, kjer se je končala analiza pretoka podatkov
- ima enega od dveh možnih značajev:
- transformacijski:
- razmejimo vhodne/izhodne transformacije od osrednjih
- Diagram pretoka podatkov preslikamo v programsko strukturo (na vrhu je glavni modul, podrejeni so mu: vhod, transakcija, izhod)
- vsaki transakciji pripišemo ustrezen modul
- tako izpeljano arhitekturo izboljšamo z uporabo načrtovalskih načel
- transakcijski:
- Poiščemo transakcijski center in ločimo poti, ki izvirajo iz njega
- Diagram pretoka preslikamo v programsko strukturo. Na vrhu je glavni modul, podrejena sta mu: modul za koordiniranje vhoda/izhoda in za koordiniranje transakcijskega centra
- Vsaki transakciji pripišemo ustrezen programski modul
- Po potrebi izboljšamo
- transformacijski:
Načrtovanje na osnovi strukture podatkov
- metoda LCP
- Vhodno/izhodne podatke predstavimo z Warnierovimi diagrami
- Procesiranje predstavimo z Warnierovimi diagrami
- metoda JSD
- vsebuje tri korake
- Modeliranje: problem opišemo tako, da identificiramo osnovne enote in akcije
- Povezovanje: model, ki celoten sistem prikazuje kot omrežje sočasnih procesov in enot
- Implementacija: komunikacije med enotami spremenimo v podprogramske klice
- vsebuje tri korake
Objektno orientirano načrtovanje
- zagotavlja modularizacijo procesiranja in informacij
- kreiranje abstraktnih podatkovnih struktur
- objekti, atributi, stanje objekta, obnašanje objekta, operacije
- objektna analiza:
- Identifikacija objektov
- Določanje njihovih atributov in operacij
- Določanje hierarhije objektov
- da preidemo do končnega načrta, je potrebne vse tri korake nekajkrat ponoviti, saj so med seboj tesno povezani
- prednosti:
- bolj naraven pristop
- bolj se osredotoči na strukturo sistema
- olajša prehod med analizo, načrtovanjem in kodiranjem
- vodi do bolj fleksibilnih sistemov
- omogoča ponovno uporabo programske opreme
- nove objekte lahko definiramo kot posebne primere obstoječih
- naj bi utelešal vse zaželene principe dobrega načrtovanja
- objektno orientiran pristop še ne zagotavlja dobrega sistema
Izbiranje načrtovalske metode
- vse metode imajo prednosti in slabosti
- za vsak primer poizkušamo na podlagi izkušenj izbrati najboljšo rešitev problema
- na izbiro vplivajo tudi: izkušnje na uporabniškem področju, izkušnje s posamezno metodo, razpoložljiva orodja in celostna filozofija pristopa k razvoju programske opreme