140 likes | 261 Views
Pakkaus java.util. Yleishyödyllisiä luokkia m.m. oliojoukkojen hallintaan: Vector , HashTable , Properties , Stack , BitSet , ... Vector -luokka: itsestään kokoa muuttava taulukko joka on erittäin hyödyllinen Date -, DateFormat -, Calendar -luokat: päivämäärien ja aikojen hallintaan
E N D
Pakkaus java.util • Yleishyödyllisiä luokkia m.m. oliojoukkojen hallintaan: Vector, HashTable, Properties, Stack, BitSet, ... • Vector-luokka: itsestään kokoa muuttava taulukko joka on erittäin hyödyllinen • Date-, DateFormat-, Calendar-luokat: päivämäärien ja aikojen hallintaan • Muita: StringTokenizer, Random, ...
Java Collections Framework • Korvaa mm. Vector- ja HashTable-luokat paremmilla • Rajapintaluokkahierarkia kätkee toteutuksen, eli käytetyt algoritmit • Algoritmia voi vaihtaa tarpeen mukaan muuttamatta itse ohjelmaa • Hyvän olio-ohjelmoinnin perustaa! • Käyttää osittain n.s. Design Pattern:eja
Design Patterns • Design Pattern on tunnettu ja hyväksi koettu ohjelmointiratkaisu tietyn tyyppisiin tilanteisiin • Design Patternit on suunniteltu ohjelmien luotettavuuden, selkeyden ja muunneltavuuden maksimoimiseksi • Rajapinta- ja abstrakteja luokkia käytetään paljon
Tärkeitä Design Patternejä • Abstract Factory: olioiden luonti abstraktia • Adapter: sovitetaan luokka uuteen rajapintaan • Composite: olioryhmille ja olioille samat operaatiot • Decorator: lisätoimintoja olioiden linkittämisellä • Factory Method: olion tyyppi ei ennalta selvä • Observer: seuraa muiden olioiden tilan muutoksia • Strategy: rajapinta annettu, toteutus muuttuu • Template Method: yleinen algoritmi, kutsuttavien metodien korvaamisella muutetaan toimintaa
Abstract Factory • Olioiden luontimetodit ovat abstrakteja, mitä olioita luodaan riippuu olosuhteista • Esimerkki: Javan Swing-käyttöliittymien ”look-and-feel” muokkaus, missä käyttöliittymäelementtien ulkonäkö muuttuu valitun mukaiseksi
Adapter • Kun halutaan kahden-tai useammantyyppisiä ominaisuuksia samalle olioille • Esimerkiksi prosessien simulointiluokka, jonka olioita halutaan visualisoida muiden graafisten elementtien tapaan • Esimerkiksi luokkien käyttäminen kahdesta eri käyttöliittymäkirjastosta
Composite • Esimerkki: Javan AWT-luokkahierarkia Component->Container, joissa esimerkiksi metodia paint() kutsutaan samalla tavalla sekä komponenteille että komponenttiryhmille
Decorator • Esimerkiksi Javan IO-luokat, missä ketjuttamalla eri olioita lisätään ominaisuuksia toisen olioon. • Sama periaate Swingin JScrollPane-luokan käytössä
Factory Method • Javassa esimerkiksi Calendar-luokka, jossa konstruktori on suojattu ja luonti tapahtuu getInstance()-metodin avulla • Todellisuudessa palautettu olio on jonkin Calendar-luokan aliluokan olio joka riippuu mm. maasta missä ollaan
Observer • java.util-pakkauksesta löytyy Observer/Observable rajapintaluokat • Käytännön esimerkki: Listener-rajapinnat Javan käyttöliittymätapahtumien kuuntelemiseen • Javassa myös kuvien lataus ja näyttö toimii samalla periaatteella (ImageObserver)
Strategy • Esimerkki: Java Collections Framework, jossa rajapintaluokat määrittelevät toiminnot, mutta allaoleva toteutus määrittelee teknisen toteutuksen
Template Method • Esimerkki: sort()-metodit, jotka käyttävät yleistä algoritmia ja joissa ainoastaan vertaus- ja vaihtometodit riippuvat järjestettävän tiedon luokasta. Java Collections Frameworkissa tämä tarkoittaa Comparable-rajapintaluokan implementoimista.
JDBC • Java-kielen versio ODBC:stä • Yleinen protokolla tietokantojen käyttöä varten SQL-komentojen avulla • Hajautettu: tietokanta voi olla eri koneella kuin itse ohjelma
RMI • Hajautettujen ohjelmien tekoon • Ohjelman eri osia voidaan suorittaa eri koneilla • Ei vaadi suurta lisätyötä ohjelmoijalta • Hajautetun ohjelman kaikki osat ohjelmoitu Javalla (ero Corba:an) • Ohjelman osat voidaan ladata dynaamisesti eri koneilta ja ajaa missä tahansa koneessa (suuri etu Corba:an verrattuna)