OOD-ohjelmiston suunnittelu (Object-oriented design) C++ on ohjelmointimalli, joka organisoi ohjelmistosuunnittelun datan tai esineiden ympärille eikä toimintoja ja logiikkaa. Se auttaa luomaan modulaarisen, uudelleenkäytettävän ja ylläpidettävissä olevan koodin. Tämä artikkeli tarjoaa käytännön esimerkkejä OOD-järjestelmästä C++:ssa ja keskustelee siitä, miten arvioida esinelähtöisten tekniikoiden käytön vaikutuksia suorituskykyyn.

Objektioreiden perusperiaatteet

OOD:n ydinperiaatteita ovat kapselointi, perintö ja polymorfismi. Kapselointiin kuuluu tiedon ja menetelmien niputtaminen luokkiin. Perintö mahdollistaa uusien luokkien johtamisen olemassa olevista, mikä edistää koodin uudelleenkäyttöä. Polymorfismi mahdollistaa esineiden kohtelun esiasteena, mikä helpottaa joustavaa koodia.

Käytännön esimerkki: Muotoluokan hierarkia

Harkitse yksinkertaista hierarkiaa muodoille. Perusluokka Shape[ määrittelee kaikille muodoille yhteisen käyttöliittymän, kuten laskenta-alueen. Johdetut luokat kuten Circle[] ja toteuttavat erityisiä käyttäytymismuotoja.

class Shape {
public:
 virtual double area() const = 0;
 virtual ~Shape() {}
};

class Circle : public Shape {
private:
 double radius;
public:
 Circle(double r) : radius(r) {}
 double area() const override {
 return 3.14159 * radius * radius;
 }
};

class Rectangle : public Shape {
private:
 double width, height;
public:
 Rectangle(double w, double h) : width(w), height(h) {}
 double area() const override {
 return width * height;
 }
};

Suorituskyvyn huomioon ottaminen

Objektisuuntautuneiden ominaisuuksien käyttäminen voi vaikuttaa suorituskykyyn esimerkiksi virtuaalisten funktiopuhelujen ja dynaamisen muistinjaon ansiosta. Virtuaalitoiminnot tuovat esiin pienen yläpuolellaan, koska vtable-lookup. Perintöjen ja dynaamisen muistin liiallinen käyttö voi vaikuttaa myös tehokkuuteen.

Suorituskyky Optimointi vinkit

  • Minimoi virtuaalifunktiokutsut suorituskykyä kriittisellä koodilla.
  • Käytä pinojakoa, kun mahdollista dynaamisen muistin sijasta.
  • Mieluummin koostumusta kuin perintöä yksinkertaisempiin esinesuhteisiin.
  • Profiilikoodi OOD-ominaisuuksiin liittyvien pullonkaulojen tunnistamiseksi.