50 likes | 198 Views
Liidese ( interface ) mõiste selgituseks. Pakett aken. Paketi aken iga kasutaja. interface Joonistatav void joonistada(...) ; String pealkiri() ;. class A implements Joonistatav void joonistada(...) {............} String pealkiri() {............}. class Joonis
E N D
Liidese (interface) mõiste selgituseks Pakett aken Paketi aken iga kasutaja interface Joonistatav void joonistada(...); String pealkiri(); class A implements Joonistatav void joonistada(...){............} String pealkiri(){............} class Joonis //konstruktor: Joonis(Joonistatav ku) ... class Mingi mingiMeetod(...){ new Joonis(new A()) } Edastatakse klassi A isend, selle meetodid joonistada ja pealkiri class Tahvel class Raam Graafikaaken kuvari ekraanil ku.pealkiri() ku.joonistada(...) Tahvel akna raamis
Liides Joonistatav paketis aken: package aken; import java.awt.*; // Graphics public interface Joonistatav{ public void joonistada(Tahvel t, Graphics g); // mida ja kuidas tahvlile t konteksti g public String pealkiri(); // akna pealkiri } Seda liidest realiseerivaid klasse (paketis praktikum4): package praktikum4; import java.awt.*; // Graphics, Color public class A implements aken.Joonistatav{ public void joonistada(aken.Tahvel t, Graphics g){ g.setColor(Color.blue); g.fillOval(100, 100, 20, 20); ………. } public String pealkiri(){ return “Joonis A"; } } package praktikum4; import java.awt.*; // Graphics, Color public class B implements aken.Joonistatav{ public void joonistada(aken.Tahvel t, Graphics g){ g.setColor(Color.red); g.drawRect(120, 140, 50, 30); ………. } public String pealkiri(){ return “Joonis B"; } } // Joonise A kuvamine (omaette) aknas: new aken.Joonis(new A()); // Joonise B kuvamine (omaette) aknas: new aken.Joonis(new B()); (Klassi aken.Joonis konstruktori argumendiks on liidest Joonistatav realiseeriva klassi isend.)
Mõningaid näiteid meetodis joonistada rakendatavatest käskudest // jooksva fondi seadmine (muidu: vaikefont), näiteks: g.setFont(new Font(“Arial”, Font.ITALIC, 18)); // Arial, kursiiv, suurus 18 // sõne väljastamine (alates kohast x = 15, y = 20): g.drawString(“Autor: Ülli Õpilane”, 15, 20); Fontide näiteid: // tahvli keskpunkti e. tsentri koordinaadid x ja y: int x = t.laius() / 2; int y = t.kõrgus() / 2; // tahvli väiksem mõõde: int m = Math.min(t.laius(), t.kõrgus()); // tahvli taustavärvi seadmine (valgest erinevaks), nt kollaseks: t.setBackground(Color.yellow); // punase rõnga joonistamine (tsentrissse), välise diameetriga 80, sisemisega 60: g.setColor(Color.red); g.fillOval(x-40, y-40, 80,80); g.setColor(Color.yellow); // tahvli taustavärv g.fillOval(x-30, y-30, 60,60);
Nimetu (unnamed, anonymous) klassi mõiste Kui klass on konstruktorita ja lühikese kirjel- dusega (vt A) ning selle isendit luuakse ainult ühes kohas programmis, siis selle klassi sisu kirjeldus {looksulgudes} on otstarbe- kohane esitada otse isendiloome avaldises (tavalise isendliloome avaldise järel). Nime sellisele klassile ei pandagi! Isendiloome avaldisse kirjutatakse ülem- klassi või realiseeritava liidese nimi (B): “Tavaline”: kirjeldame klassi nimega A, kirjelduse paigutame faili A.java: Fail A.java class A extends/implements B { // konstruktorita meetod1(…){ meetod1 sisu } meetod2(…){ meetod2 sisu } } new B(…) { // konstruktorita meetod1(…){ meetod1 sisu } meetod2(…){ meetod2 sisu } } // luuakse nimetu klassi isend // (rakendades B konstruktorit), // millel on 2 isendimeetodit // (avaldise väärtus: viit loodud isendile) // avaldise väärtuse tüübiks on B Igal pool saame luua klassi A isendeid: Isendilloome avaldis, nt klassis C: new A(…) // rakendatakse klassi B konstruktorit // loodud on klassi A isend // millel on 2 isendimeetodit // (avaldise väärtus: viit loodud isendile) // avaldise väärtuse tüübiks on A