S02-3 Multiparadigma programozás és Haladó Java 2

Tartalom

  1. Generikus programozás, típussal való paraméterezés, példányosítás és típustörlés
  2. A C++ standard template könyvtár.
    1. Konténerek és iterátorok
    2. Funktorok
    3. Algoritmusok
  3. Java annotációk
  4. Önelemzés, osztálybetöltés
  5. Objektumszerializáció

1. Generikus programozás, típussal való paraméterezés, példányosítás és típustörlés

class Pair<T1, T2> { T1 elem1; T2 elem2; }

Megjegyzés: ezt úgy is megvalósíthatnánk, hogy class Pair {Object elem1; Object elem2; } viszont ebben az esetben akkor nekünk kellene mindenhova a típuskényszerítéséket leírnunk. -> sok hibalehetőség

2. C++ Standard Template Library

2.1 Konténerek és iterátorok

Asszociatív konténerek

Iterátorok

Vector re-allokáció

vector<int> v;
//...
vector<int>(v).swap(v);
revers_iterator -> iterator

revers_iterator -> iterator

Speciális iterátorok

// másoljuk a std.input-ot std.output-ra...
copy( istreambuf_iterator<char>( cin ),
      istreambuf_iterator<char>(),
      ostreambuf_iterator<char>( cout ) );

2.2 Funktorok

bool is_even( int x );
// Első páratlan szám megkeresése:
list<int> c;
//...
list<int>::iterator i = find_if( c.begin(), c.end(),  not1( ptr_fun( is_even ) ) );
struct Foo
{
    void bar();
};
list<Foo> c;
// bar meghívása c összes elemén?
for_each( c.begin(), c.end(), mem_fun_ref( &Foo::bar ) );
struct Figure
{
    virtual void draw() const = 0;
    virtual ~Figure() { };
};
//...
list<Figure*> c;
// draw meghívása (a dinamikus típusnak megfelelő):
for_each( c.begin(), c.end(), mem_fun( &Figure::draw ) );

2.3 Algoritmusok

remove

remove

remove_if törlés előtt

remove_if törlés előtt

remove_if törlés után

remove_if törlés után

3. Java annotációk

public @interface Copyright {
    String value();
}

@Copyright(value="Copyright: Bender")
public class Metal {
//...
}

4. Önelemzés, osztálybetöltés

import java.lang.reflect.*;
class Example {
    public static void main(String[] args) throws Exception {
        Class c = Class.forName(args[0]);
        Class[] formalArgs = (args.length > 2)
                                ? new Class[] {String.class}
                                : new Class[] {};
        Object o = c.newInstance();
        Method m = c.getMethod(args[1],formalArgs);
        Object[] actualArgs = (args.length > 2)
                                ? new Object[] {args[2]}
                                : new Object[] {};
        System.out.println( m.invoke(o,actualArgs) );
    }
}
Class<Point> c = Point.class;
Object o = c.newInstance();
Field x = c.getField("x");
x.setInt(o,12);
Point p = c.cast(o);
System.out.println(p.x);

5. Objektumszerializáció

További források