Ласло Краус |
ИР2ОО2 Први колоквијум 9. 5. 2008. |
|---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) На којој идеји се заснива добра преносивост програма писаних на језику Java?
б) Да ли се у два имплементирана интерфејса могу налазити методе са истим именима и:
(1) истим листама аргумената и бацаних изузетака, а различитим повратним типовима;
(2) различитим листама аргумената и бацаних изузетака и различитим повратним типовима;
(3) истим листама аргумената и бацаних изузетака и истим повратним типовима
в) Да ли се из анонимне класе може приступати формалним аргументима и локалним променљивама окружујуће функције?
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
(x,y,z)".
String.
(x,y,z)".
[t1,…,tn]", где је ti текстуални опис i-тог темена.
(5 поена) Написати на језику Java програм (класу с главном функцијом) који направи многоугао, направи његову копију, помери копију за задати вектор помака, испише на главном излазу оба многоугла са одговарајућим растојањима тежишта од координатног почетка. Сви параметри треба да буду константе (не треба ништа учитавати).
// Vektor.java
package figure;
public class Vektor {
private double x, y, z;
public Vektor( double a, double b, double c) { x = a; y = b; z = c; }
public Vektor( Vektor v) { x = v.x; y = v.y; z = v.z; }
public Vektor dodaj( Vektor v) { x += v.x; y += v.y; z += v.z; return this; }
public Vektor pomnozi( double s) { x *= s; y *= s; z *= s; return this; }
public double intenzitet() { return Math.sqrt (x*x + y*y + z*z); }
public String toString() { return "(" + x + "," + y + "," + z + ")"; }
}
// Imenovan.java
package figure;
public interface Imenovan { String dohvatiIme(); }
// Figura.java
package figure;
public abstract class Figura implements Imenovan, Cloneable {
private String ime;
protected Figura( String i) { ime = i; }
public String dohvatiIme() { return ime; }
public Figura clone() {
try { return (Figura)super.clone(); }
catch (CloneNotSupportedException g) { return null; }
}
public String toString() { return ime; }
}
// Pokretljiv.java
package figure;
public interface Pokretljiv {
void pomeri( Vektor pomak);
Vektor polozaj();
}
// Tacka.java
package figure;
public class Tacka implements Pokretljiv, Imenovan, Cloneable {
private char ime;
private Vektor polozaj;
public Tacka( char i, Vektor p) { ime = i; polozaj = p; }
public String dohvatiIme() { return Character.toString( ime); }
public void pomeri( Vektor pomak) { polozaj.dodaj( pomak); }
public Vektor polozaj() { return polozaj; }
public Tacka clone() {
try {
Tacka t = (Tacka)super.clone( );
t.polozaj = new Vektor( polozaj);
return t;
} catch (CloneNotSupportedException g) {
return null;
}
}
public String toString() { return dohvatiIme() + polozaj; }
}
// GGotov.java
package figure;
public class GGotov extends Exception {
public String toString( ) { return "*** Mnogougao je vec gotov!"; }
}
// Mnogougao.java
package figure;
public class Mnogougao extends Figura implements Pokretljiv {
private Tacka[] tem;
private int n;
public Mnogougao ( String ime, int brTem) { super( ime); tem = new Tacka [brTem]; }
public Mnogougao dodaj(Tacka teme)throws GGotov {
if (n == tem.length) throw new GGotov( );
tem[n++] = teme;
return this;
}
public void pomeri( Vektor pomak) {
for (int i=0; i<n; tem[i++].pomeri(pomak));
}
public Vektor polozaj( ) {
Vektor tez = new Vektor( 0, 0, 0);
for (int i=0; i<n; tez.dodaj(tem[i++].polozaj()));
return tez.pomnozi( 1./n);
}
public Mnogougao clone() {
Mnogougao m = (Mnogougao)super.clone( );
m.tem = tem.clone();
for (int i=0; i<n; i++) m.tem[i] = (Tacka)tem[i].clone();
return m;
}
public String toString() {
StringBuffer s = new StringBuffer ( super.toString());
s.append( '[');
for (int i=0; i<n; i++) {
if (i>0) s.append( ',');
s.append( tem[i]);
}
return s.append( ']').toString( );
}
}
// Program.java
import figure.*;
public class Program {
public static void main (String[] varg) {
try {
Mnogougao m1 = new Mnogougao( "abc", 3);
m1.dodaj( new Tacka('A', new Vektor(0,0,0)))
.dodaj( new Tacka('B', new Vektor(1,1,1)))
.dodaj( new Tacka('C', new Vektor(3,2,1)));
Mnogougao m2 = m1.clone();
m2.pomeri (new Vektor(1,2,3));
System.out.println( m1 + " - " + m1.polozaj().intenzitet());
System.out.println( m2 + " - " + m2.polozaj().intenzitet());
} catch (GGotov g) {
System.out.println( g);
}
}
}
abc[A(0.0,0.0,0.0),B(1.0,1.0,1.0),C(3.0,2.0,1.0)] - 1.7950549357115013
abc[A(1.0,2.0,3.0),B(2.0,3.0,4.0),C(4.0,4.0,4.0)] - 5.280993172584953
(⇒ почетак)
Copyright © 2011, Laslo Kraus
Последња ревизија: 29.3.2011.