Podstawy popularnych języków programowania obiektowego

Konstruktory—inicjalizatory

Konstruktory w językach C++, C# i Java zajmują się początkowym ustawianiem prywatnych pól obiektu. W językach Objective-C i Ruby ich rolę przejmują inicjalizatory.

C++

W pliku nagłówkowym:

class Instrument
{
...
public:
    Instrument();
    Instrument(const Instrument&);
    ~Instrument();
};

W pliku z implementacją:

Instrument::Instrument() : identifier(count++)
{
    productionDate = 0;
}

Instrument::Instrument(const Instrument& instrument) : identifier(count++)
{
    productionDate = instrument.productionDate;
}

Instrument::~Instrument()
{
    count--;
}

Objective C

Każda klasa w Objective-C kaskadowo dziedziczy po klasie—korzeniu (NSObject) metodę init. Jej składnia wygląda jak poniżej.

Istotnym detalem jest to, jak wewnątrz klasy odwołujemy się do zmiennych zadeklarowanych jako @properties. Dla odróżnienia od zwykłych zmiennych prywatnych, rozpoczynamy je od znaku podkreślnika (_).

- (instancetype) init
{
    self = [super init];
    if (self)
    {
        _identifier = count++;
        _productionDate = 0;
    }
    return self;
}

Java

public class Instrument
{
    ...
    public Instrument()
    {
        identifier = count++;
        productionDate = 0;
    }
    public Instrument(Instrument instrument)
    {
        identifier = count++;
        productionDate = instrument.productionDate;
    }
    protected void finalize()
    {
        count--;
    }
}

C#

class Instrument
{
    ...
    public Instrument()
    {
        identifier = 0;
        productionDate = 0;
        count++;
    }
    public Instrument(Instrument instrument)
    {
        identifier = count++;
        productionDate = instrument.PRUDUCTIONDATE;
    }
    ~Instrument()
    {
        count--;
    }
}

Ruby

W Ruby mamy podobne rozwiązanie co w Objective-C. Do zmiennych klasy odwołujemy się z prefiksem @@, a do zmiennych obiektu z @.

class Instrument
    ...
    def initialize
        @@count += 1
        @identifier = @@count
        @production_date = 0
    end
end