Objektorienteeritud programmeerimise põhimõisted

Eesmärgid:

    1. Suurte projektide haldamine (modulaarsus, "kihilisus" -> struktuurprogrammeerimine, abstraktsed andmetüübid -> OOP), toetus sõltumatute rühmade koostööks, vigade võimalikult varajane avastamine.
    2. Taaskasutamine (kasutada/muuta olemasolevat, mitte alustada nullist), keerukate graafiliste kasutajaliideste programmeerimine standardsemaks/lihtsamaks.
    3. Objektipõhine lähenemine reaalsele maailmale on paljudes ülesannetes produktiivne; süsteemide projekteerimisel on kasutusel objektorienteeritud metoodikad (vt. näit. Booch, Rumbaugh, Jacobson -> UML - the Unified Modeling Language), tähtsad valdkonnad on objektorienteeritud analüüs ja projekteerimine (ingl.k. OO analysis and design).
    4. Objektorienteeritud raamistikud (ingl.k. OO frameworks) on piisavalt paindlikud uute abstraktsioonide lisamiseks ning sisaldavad samas piisavalt vahendeid "musta töö" tegemiseks.

    Objektid, klassid, pärimine

      Objekti kõige üldisemas tähenduses kirjeldavad

      1. Olek
      2. Käitumine
      3. Identiteet

      Kapseldus (ingl.k. encapsulation)

      Klass

      Pärimine (ingl.k. inheritance)

      Teadete saatmine (ingl.k. message passing), polümorfism

    Näide

        /**
         * Fail Loomad.java
         * @author Jaanus Poial
         * @version 0.2 kevad 99
         */

        //=================================================
        // Na"ide pa"rimisest ja meetodite u"lekatmisest
        //=================================================

        class Loomad { // pohiprogramm

           static public void main (String[] argumendid) {
              System.out.println ("Mida loomad ytlevad?");
              Loom minuLoom = new Loom ("Patu");
              System.out.println (minuLoom); //kasutab toString() meetodit
              Kass minuKass = new Kass ("Kiti");
              System.out.println (minuKass);
              minuLoom = minuKass;
              System.out.println (minuLoom);
              Koer minuKoer = new Koer ("Muri");
              System.out.println (minuKoer);
           } //main lopp

        } //Loomad lopp

        class Loom {

           String nimi;

           Loom (String s) { //konstruktor
              paneNimi (s);
           }

           public String votaNimi() {
              return nimi;
           }

           public void paneNimi (String s) {
              nimi = s;
           }

           public String toString() { //katame yle
              return "Olen loom " + votaNimi();
           }

        } // Loom lopp

        class Kass extends Loom { //alamklass

           int vurrupikkus;

           Kass (String s) {
              super (s);
           }

           public String toString() { //katame kaetu veel yle
              return "Olen KASS " + votaNimi();
           }

        } // Kass lopp

        class Koer extends Loom { //teine alamklass

           boolean sabaga;

           Koer (String s) {
              super (s);
              sabaga = true;
           }

        } // Koer lopp

        //faili lopp