YHTEYSSUHDE (assosiation)



Samankaltaiset tiedostot
Mikä yhteyssuhde on?

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Vahva koostumussuhde (Composition)

Olio-ohjelmointi Javalla

public static void main (String [] args)

Listarakenne (ArrayList-luokka)

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Lista luokan sisällä

Periytyminen (inheritance)

UML ja luokkien väliset suhteet

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Metodien tekeminen Javalla

Luokan muodostimet (Constructors)

Luokan sisällä on lista

KOHDELUOKAN MÄÄRITTELY

Rajapinta (interface)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Java-kielen perusteita

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Tietokannat II -kurssin harjoitustyö

Taulukoiden käsittely Javalla

Metodien tekeminen Javalla

1 Tehtävän kuvaus ja analysointi

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Poikkeustenkäsittely

Tietokannat II -kurssin harjoitustyö

Java-kielen perusteet

Java-kielen perusteita

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Ohjelmoinnin jatkokurssi, kurssikoe

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

2. Olio-ohjelmoinista lyhyesti 2.1

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

TyontekijaOhjelma. +main() (käyttää) + = public - = private

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Oliot viestivät metodeja kutsuen

7. Oliot ja viitteet 7.1

Ohjelmistotekniikan menetelmät, koe

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ehto- ja toistolauseet

Ohjelmointi 2 / 2010 Välikoe / 26.3

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Ohjelmointi 2, välikoe

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Javan perusteita. Janne Käki

4. Luokan testaus ja käyttö olion kautta 4.1

9. Periytyminen Javassa 9.1

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Java-kielen perusteet

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Ohjelmoinnin perusteet, kurssikoe

Luokat ja oliot. Ville Sundberg

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

19. Olio-ohjelmointia Javalla 19.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

4. Olio-ohjelmoinista lyhyesti 4.1

Mitä poikkeuskäsittely tarkoittaa?

14. Poikkeukset 14.1

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Java-kielen perusteita

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

8. Näppäimistöltä lukeminen 8.1

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Rinnakkaisohjelmointi, Syksy 2006

1. Olio-ohjelmointi 1.1

Javan GUI Scratchaajalle

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

16. Javan omat luokat 16.1

1. Omat operaatiot 1.1

Merkkien ja merkkijonojen käsittelyä Javalla

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Tietorakenteet, laskuharjoitus 7,

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram)

9. Periytyminen Javassa 9.1

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Olioiden yhteistoiminta

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

14. Poikkeukset 14.1

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

OHJ2k12 välikoe

Sisältö. 22. Taulukot. Yleistä. Yleistä

JUnit ja EasyMock (TilaustenKäsittely)

Transkriptio:

YHTEYSSUHDE (assosiation) -Mikä on yhteyssuhde? -Miten toteutan yhteyssuhteen? 1

Mikä on yhteyssuhde? Yhteyssuhde kuvaa kahden olion välistä suhdetta: Esim. Auto Henkilö, omistussuhde Tili Asiakas, omistussuhde Tilaus Asiakas, tilaaja Lainaus Asiakas, lainaaja 2

Mikä on yhteyssuhde? Luokkakaaviossa kuvataan Tilin ja Asiakkaan suhde: Tili - numero : String - saldo : double * 1 Asiakas numero etunimi sukunimi Tilin ja Asiakkaan välillä on yhteyssuhde, tässä ns. omistussuhde Tilin omistaa täsmälleen yksi asiakas Yksi asiakas voi omistaa useita tilejä 3

Miten yhteyssuhde toteutetaan? Relaatiomaailmassa laitamme viiteavaimen siihen relaatioon jolla on nollaan tai yhteen toiseen relaatioon yksilöön yhteys: Relaatiokaavat: ASIAKAS (numero (PK), etunimi, sukunimi ) TILI (numero (PK), saldo, asiakasnro (FK) ),missä PK on pääavain ja FK on viiteavain Oliomaailmassa Tili-luokkaan lisätään attribuutti, joka on viittaus olioon Asiakas public class Tili { // attribuutit private String numero; private double saldo; private Asiakas omistaja; // tilin omistaja 4

Oletusmuodostin Tili-luokan oletusmuodostin: public Tili() { numero = null; saldo = 0.0; omistaja = null; // omistajaa ei vielä tiedetä Kun luomme Tili olion Tili tili = new Tili (); tili: numero:null saldo : 0.0 omistaja: null 5

Parametrillinen muodostin Tili-luokan parametrillinen muodostin: public Tili(String numero, double saldo, Asiakas asiakas) { this.numero = numero; this.saldo = saldo; omistaja = asiakas; // sijoitetaan omistajaksi annettu asiakas Asiakas asiakas = new Asiakas (100, Elli, Ollila ); asiakas: numero = 100 etunimi = Elli sukunimi = Ollila Tili tili = new Tili ( Fi0112, 100, asiakas); tili: numero= Fi0112 saldo = 100 omistaja: 6

Olion tuhoutuminen Kummatkin yhteyssuhteessa olevat oliot elävät omaa maailmaansa Kun Tili-olio tuhoutuu, Asiakas-olio jatkaa elämäänsä eli ei ole sidoksissa Tiliin Esim. Asiakas asiakas = new Asiakas (100, "Elli", "Ollila"); Tili tili = new Tili ( "Fi01221", 100, asiakas); System.out.println(tili.toString()); tulostuu: numero=fi01221, saldo=100.0 100: Elli Ollila tili = null; System.out.println(asiakas.getEtunimi() + " " + asiakas.getsukunimi() + ": " + asiakas.getnumero()); tulostuu: Elli Ollila: 100 7

set-metodi public class Tili { private Asiakas omistaja; // tilin omistaja public void setomistaja(asiakas omistaja) { this.omistaja = omistaja; Esim. Asiakas asiakas = new Asiakas (100, "Elli", "Ollila"); Tili tili = new Tili(); tili.setomistaja(asiakas); 8

Get-metodi public class Tili { private Asiakas omistaja; // tilin omistaja.. public Asiakas getomistaja() { return omistaja; Tili tili = new Tili(); Asiakas omistaja = tili.getomistaja(); 9

tostring-metodi public class Tili { private String numero; private double saldo; private Asiakas omistaja; // tilin omistaja public String tostring() { String paluu = "numero=" + numero + ", saldo=" + saldo ; if (omistaja!= null) { paluu = paluu + return paluu; "\nomistaja=" + omistaja.tostring(); 10

Pääohjelma public class TiliAsiakasOhjelma { private Scanner input; TiliAsiakasOhjelma(){ input = new Scanner(System.in); public void aja(){ int nro; String etunimi, sukunimi; String numero; double saldo; System.out.print("Anna asiakkaan numero: "); nro = input.nextint(); System.out.print("Anna asiakkaan etunimi sukunimi: "); etunimi = input.next(); sukunimi = input.next(); Asiakas asiakas = new Asiakas (nro, etunimi, sukunimi); 11

Pääohjelma jatkuu System.out.print("Anna tilin numero: "); numero = input.next(); System.out.print("Anna tilin saldo: "); saldo = input.nextdouble(); Tili tili = new Tili(numero, saldo, null); System.out.print("anna tilin omistajan numero: "); nro = input.nextint(); if (nro == asiakas.getnumero()) { tili.setomistaja(asiakas); System.out.println(tili.toString()); Toteutus: Anna asiakkaan numero: 10234 Anna asiakkaan etunimi sukunimi: Olli Oja Anna tilin numero: FI010101 Anna tilin saldo: 1232 Anna tilin omistajan numero: 10234 numero=fi010101,saldo=1232.0 omistaja: 10234 Olli Oja public static void main (String [] args){ TiliAsiakasOhjelma ohj = new TiliAsiakasOhjelma(); ohj.aja(); 12

Harjoitus Toteuta alla olevassa kuvassa olevat luokat. Asukkaalla on seuraavat attribuutit: numero, etunimi, sukunimi ja katuosoite sekä yhteyssuhde Postiluokan olioon, mikä kertoo postialueen, missä asukas asuu. Posti-luokalla on attribuutit: postinro, postitmp. Tee luokille kaikki muodostimet, set- ja getattribuutti-metodit sekä tostringmetodi. Asukas -numero -etunimi -sukunimi -katuosoite * 1 Posti -postinro -postitmp 13

Harjoitus jatkuu Tee ohjelmaluokka AsukasOhjelma, joka luo kaksi Asukas-oliota, jotka käyttävät samaa Postia. Ohjelma tulostaa seuraavaa käyttäen em. luokkia: Asukkaat: 1234567 Martta Lahtinen Lainkaarentie 3 00670 HELSINKI 1234568 Vilho Laaksonen Vihtorintie 34 B 00670 HELSINKI 14

ratkaisu public class Posti { private String postinro; private String postitmp; public Posti(){ postinro = postitmp = null; public Posti (String nro, String tmp){ postinro = nro; postitmp = tmp; if (postitmp!= null) postitmp = postitmp.touppercase(); public String getpostinro() { return postinro; public void setpostinro(string nro) { postinro = nro; public String getpostitmp() { return postitmp; public void setpostitmp(string tmp) { this.postitmp = tmp; if (postitmp!= null) postitmp = postitmp.touppercase(); public String tostring () { return postinro + " " + postitmp; 15

Ratkaisu jatkuu.. public class Asukas { private int asnumero; private String etunimi; private String sukunimi; private String katuosoite; private Posti posti; // yhteyssuhde Postiin public Asukas () { posti = null; asnumero = 0; etunimi = sukunimi = katuosoite = null; public Asukas (int nro, String etu, String suku, String katu, Posti posti) { asnumero = nro; etunimi = etu; sukunimi = suku; katuosoite = katu; this.posti = posti; public int getasnumero() { return asnumero; public String getetunimi() { return etunimi; public String getsukunimi() { return sukunimi; public String getkatuosoite() { return katuosoite; public Posti getposti() { return posti; 16

Ratkaisu jatkuu.. public void setasnumero(int asnumero) { this.asnumero = asnumero; public void setetunimi(string etunimi) { this.etunimi = etunimi; public void setsukunimi(string sukunimi) { this.sukunimi = sukunimi; public void setkatuosoite(string katuosoite) { this.katuosoite = katuosoite; public void setposti(posti posti) { this.posti = posti; public String tostring (){ return asnumero + " " + etunimi + " " + sukunimi + "\n" + katuosoite + "\n" + posti; // jos posti!= null kutsutaan automaattisesti posti.string() metodia 17

Ratkaisu jatkuu.. public class AsukasOhjelma { public static void main(string[] args) { Posti posti = new Posti ("00670", "Helsinki"); Asukas as1 = new Asukas (1234567, "Martta", "Lahtinen", "Lainkaarentie 3", posti); Asukas as2 = new Asukas(1234568, "Vilho", "Laaksonen", "Vihtorintie 34 B", posti); System.out.println( Asukkaat:\n"); System.out.println(as1); System.out.println("\n" + as2); 18