Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuViljo Hukkanen Muutettu yli 9 vuotta sitten
1
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet
2
Pakkaukset ja määreet Toisiinsa liittyvät luokkatiedostot voidaan koota pakkauksiksi. Luo hierarkiaa ja järjestystä ohjelmistotuotteeseen. Helpottaa uudelleenkäyttöä. Näkyvyysmääreet (muuntimet) säätelevät luokkien näkyvyyttä ja käytettävyyttä. Suojaa ohjelmistokehittäjiä virheiltä ja sivuvaikutuksilta. public ja private metodien ja instanssimuuttujien yhteydessä ovat esimerkkejä määreistä. Vesa Ollikainen & Outi Grotenfelt217.9.2012
3
Pakkaukset ja määreet Pakkaukset ovat nimettyjä luokkaryhmiä. Pakkaukset voivat sisältää toisia pakkauksia. Yllä kutsutaan javax -pakkaukseen kuuluvan swing -pakkauksen JOptionPane -luokan staattista metodia ShowMessageDialog(). pakkaus on graafinen käyttöliittymäkirjasto Vesa Ollikainen & Outi Grotenfelt317.9.2012
4
Pakkausten tuonti Yllä import -lauseella tuodaan kaikki javax.swing - pakkaukseen kuuluvat luokat näkyville. Pakkauksen nimeä ei tarvitse erikseen antaa. NetBeans-/JBuilder-ympäristössä lähdekoodit menevät oletusarvoisesti oletuspakkaukseen. pakkauksen nimen voi vaihtaa luokkaa luotaessa. Saman projektin toisen pakkauksen luokat saa näkyville lauseella import pakkauksenNimi.*; Vesa Ollikainen & Outi Grotenfelt417.9.2012
5
Luokkien näkyvyys Luokka voi olla julkinen tai pakkauskohtainen Julkinen luokka ( public -määre) näkyy kaikkiin muihin luokkiin Pakkauskohtainen luokka (ei määrettä) näkyy samaan pakkaukseen Vesa Ollikainen & Outi Grotenfelt517.9.2012
6
Metodien ja muuttujien näkyvyys Metodit ovat näkyvyydeltään julkisia ( public ) pakkauksen sisälle ja aliluokkiin näkyviä ( protected ) pakkauksen sisäisiä (ei määrettä) luokan sisäisiä ( private ) Myös asetus- ja saantimetodien (”setterit” ja ”getterit”) näkyvyys on syytä harkita tapauskohtaisesti Asetetaan pienin riittävä näkyvyys Kaikille ei tarvitse antaa samaa näkyvyyttä. Vesa Ollikainen & Outi Grotenfelt617.9.2012
7
final -muunnin final -luokka ei voi saada aliluokkaa. Esimerkiksi String -luokka on final -määreinen. motiivina kielen perusteiden selkeys final -muuttuja on vakio. Arvoa ei voi koskaan muuttaa. Arvo asetetaan käännöksen tai suorituksen aikana. Kääntäjä vaatii, että arvo asetetaan ennen käyttöä. final -metodia ei voi ylikirjoittaa aliluokassa. Konstruktorien kutsumista metodeista suositellaan tehtävän final -määreisiä. Tällöin aliluokassa ylikirjoitettu koodi ei voi aiheuttaa sivuvaikutuksia konstruktorin toimintaan. Vesa Ollikainen & Outi Grotenfelt717.9.2012
8
Esimerkki: final -muuttuja Yllä olevassa esimerkissä on kaksi vakiota. vakion eka arvo asetetaan käännösaikaisesti. vakion toka arvo asetetaan suorituksen aikana. Vesa Ollikainen & Outi Grotenfelt817.9.2012
9
Esimerkki: final -metodi Kulkuneuvo -luokan konstruktori kutsuu parannaÄäntä() - metodia. Jos konstruktorin kutsuma metodi ylikirjoitettaisiin aliluokassa, koodin modulaarisuus kärsisi. Asetetaan metodilla final -määre. Nyt kulkuneuvon luonti hoidetaan varmasti kokonaan tässä luokassa. Vesa Ollikainen & Outi Grotenfelt917.9.2012
10
final -määreisen metodin parannaÄäntä() ylikirjoitusyritys aiheuttaa käännösaikaisen virheilmoituksen. Vesa Ollikainen & Outi Grotenfelt1017.9.2012
11
Staattiset metodit ja muuttujat Staattinen metodi tai muuttuja ( static -määre) on yhteinen luokan kaikille olioille. Staattista metodia kutsutaan luokkametodiksi. Staattista muuttujaa kutsutaan luokkamuuttujaksi. Metodin tai muuttujan vaatima muistitila varataan vain kerran. Staattisiin muuttujiin voi koota luokan olioille yhteiset tiedot. Staattinen metodi ei voi suoraan viitata luokan instanssimuuttujaan. tarvitaan olioviittaus myös this -avainsana on kielletty. ei ole olemassa ilmentymää, johon this viittaisi. Vesa Ollikainen & Outi Grotenfelt1117.9.2012
12
Esimerkki 1: Staattinen muuttuja Outi Grotenfelt1217.9.2012 public class Countable { private static int instanceCount = 0; public Countable() { instanceCount++; // increments the static field } public int getInstanceCount(){ return instanceCount; // number of created instances } public class StaticDemo { public static void main(String[] args) { int objectCount; Countable obj1 = new Countable(); Countable obj2 = new Countable(); Countable obj3 = new Countable(); objectCount = obj1.getInstanceCount(); System.out.print("Countable class has“ +objectCount+" objects."); }
13
Esimerkki2: Staattinen muuttuja ja metodi Muuttuja henkilöidenLkm on laskuri luoduille luokan olioille. Olioille yhteisenä muuttujana se määritellään luokkamuuttujaksi ( static ). Staattisen muuttujan arvo haetaan staattisella metodilla getHenkilöidenLkm(). Vesa Ollikainen & Outi Grotenfelt1317.9.2012
14
Esimerkki2: Staattinen muuttuja ja metodi.. Huomaa luokkametodin kutsu. Myös kutsu eka.getHenkilöidenLkm() olisi syntaktisesti oikein, mutta olioviittauksen käyttö tässä olisi harhaanjohtavaa koodia. Vesa Ollikainen & Outi Grotenfelt1417.9.2012
15
30/3/15Helsinki Metropolia University of Applied Sciences 15 public class PassObject { public static void main(String[] args) { Rectangle box = new Rectangle(14.0, 3.3); System.out.println("Contents of the box object:" + "\n length: "+box.getLength()+ "\n widht: "+box.getWidth()); changeRectangle(box); System.out.println("Contents of the box object now:" + "\n length: "+box.getLength()+ "\n widht: "+box.getWidth()); } public static void changeRectangle(Rectangle r){ r.setLength(0.0); r.setWidth(0.0); }
16
30/3/15Helsinki Metropolia University of Applied Sciences 16 import javax.swing.JOptionPane; public class ReturnObject { public static void main(String[] args) { BankAccount myAccount; myAccount = getAccount(); JOptionPane.showMessageDialog(null, "Your account has “ +”the balance of €"+ myAccount.getBalance()); } public static BankAccount getAccount(){ String input; double balance; input = JOptionPane.showInputDialog("Give the account” +“balance:"); balance = Double.parseDouble(input); return new BankAccount(balance); }
17
Abstraktit luokat ja metodit Abstraktista luokasta ei voi luoda ilmentymää. Abstraktista metodista ei määritellä toteutusta. Toteutus on määriteltävä abstraktin luokan aliluokassa. Aliluokan määritys kelpaa kääntäjälle vasta, kun yliluokan abstrakti metodi on saanut toteutuksen. Luokka on määriteltävä abstraktiksi (avainsana abstract ) aina, jos sillä on vähintään yksi abstrakti metodi. Vesa Ollikainen & Outi Grotenfelt1717.9.2012 AccessSpecifier abstract class ClassName; AccessSpecifier abstract ReturnType MethodName(ParameterList);
18
Esimerkki: abstraktit luokat ja metodit Abstraktin skaalaa() -metodin määritys pakottaa toteuttamaan skaalausoperaation kaikissa Kuvio -luokalle määriteltävissä aliluokissa. Vesa Ollikainen & Outi Grotenfelt1817.9.2012
19
Esimerkki: abstraktit luokat ja metodit.. Vesa Ollikainen & Outi Grotenfelt1917.9.2012
20
Esimerkki: abstraktit luokat ja metodit.. Vesa Ollikainen & Outi Grotenfelt2017.9.2012
21
Esimerkki: abstraktit luokat ja metodit.. Vesa Ollikainen & Outi Grotenfelt2117.9.2012
22
www.metropolia.fi www.facebook.com/MetropoliaAMK Outi.grotenfelt@metropolia.fi KIITOS!
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.