Informatika4-2018/Gyakorlat7

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „== Abstract == Egy interface (lásd előző gyakorlat) egyetlen metódusa sincsen implementálva, adattagja is csak bizonyos tupajdonságú lehet. Egy '''abstract''' o…”)
 
1. sor: 1. sor:
 +
[[Informatika4-2018/Gyakorlat6|Előző]] - [[Informatika4-2018#Gyakorlat|Fel]] - [[Informatika4-2018/Gyakorlat8|Következő]]
 +
 
== Abstract ==
 
== Abstract ==
  
44. sor: 46. sor:
 
a.f(); // valójában a B.f fut le (override)
 
a.f(); // valójában a B.f fut le (override)
 
</java>
 
</java>
 +
 +
== Feladatok ==
 +
=== Síkbeli objektumok ===
 +
Készítsunk egy '''Point''' osztályt, mely tartalmaz
 +
* két koordinátát
 +
* eltolás metódust
 +
* setter/getter-t a koordinátákra
 +
 +
Készítsunk egy '''PlanarObject''' osztályt, mely tartalmaz
 +
* '''Point''' tömböt, amiben koordináták vannak
 +
* egy '''translate''' metódust, ami a koordinátáinak mindegyikát eltolja (a '''Point.translate''' metódussal)
 +
* egy '''area''' metódust ami legyen absztrakt (még nem implementáljuk)
 +
 +
Öröklődjön a '''PlanarObject''' osztályból egy '''Square''' és egy '''Triangle''' osztály, melyek '''nem absztakt'''ok!
 +
 +
=== Point ===
 +
Legyen a Point osztály maga is egy ''PlanarObject'''!
 +
 +
=== Immutable ===
 +
Oldjuk meg öröklődéssel/interface-el hogy minden osztályunkból legyen egy '''Immutable''' előtagú is, ami immutable (nem lehet eltolni, nincs setter-e).
 +
 +
ImmutablePoint <-- Point
 +
ImmutablePlanarObject <-- PlanarObject
 +
ImmutablePlanarObject <-- ImmutableSquare <-- Square
 +
PlanarObject <-- Square
 +
 +
[[Informatika4-2018/Gyakorlat6|Előző]] - [[Informatika4-2018#Gyakorlat|Fel]] - [[Informatika4-2018/Gyakorlat8|Következő]]

A lap 2018. október 25., 13:05-kori változata

Előző - Fel - Következő

Tartalomjegyzék

Abstract

Egy interface (lásd előző gyakorlat) egyetlen metódusa sincsen implementálva, adattagja is csak bizonyos tupajdonságú lehet. Egy abstract osztály azonban keverheti az implementált és implementálatlan metódusokat, adattagja is tetszőleges lehet.

public abstract class A {
    protected float x_;
    public A()  // default konstruktor
    {
        x_ = 0.0f;
    }
    public A(float x)  // konstruktor
    {
        x_ = x;
    }
    public void SetX(float x)
    {
        x_ = x;
    }
    public abstract float f(); // nincsen implementálva
}

abstract-al illethetünk egy metódust, ekkor kötelezően a bennfoglaló osztály is abstract kell legyen. De abstract osztálynaklehetnek nem abstract, azaz implementált metódusai.

abstract osztály nem példányosulhat, de belőle származtatott osztály igen, ha minden absztrakt metódusát implementálja (már nem absztrakt többé).

public class B extends A {
    public B(float x)  // konstruktor az ős osztály konstruktorát
    {
        super(x);
    }
    public float f()
    {
        return Math.sin(x_);
    }
}

Ekkor B már nem absztrakt, lehet példányosítani:

A a = new B(3);
a.f(); // valójában a B.f fut le (override)

Feladatok

Síkbeli objektumok

Készítsunk egy Point osztályt, mely tartalmaz

  • két koordinátát
  • eltolás metódust
  • setter/getter-t a koordinátákra

Készítsunk egy PlanarObject osztályt, mely tartalmaz

  • Point tömböt, amiben koordináták vannak
  • egy translate metódust, ami a koordinátáinak mindegyikát eltolja (a Point.translate metódussal)
  • egy area metódust ami legyen absztrakt (még nem implementáljuk)

Öröklődjön a PlanarObject osztályból egy Square és egy Triangle osztály, melyek nem absztaktok!

Point

Legyen a Point osztály maga is egy PlanarObject'!

Immutable

Oldjuk meg öröklődéssel/interface-el hogy minden osztályunkból legyen egy Immutable előtagú is, ami immutable (nem lehet eltolni, nincs setter-e).

ImmutablePoint <-- Point
ImmutablePlanarObject <-- PlanarObject
ImmutablePlanarObject <-- ImmutableSquare <-- Square
PlanarObject <-- Square

Előző - Fel - Következő

Személyes eszközök