Java-ohjelmassa on siis kerrottava, millaisia ominaisuuksia ohjelmassa käytettävillä olioilla on ja millaisia viestejä näille oliolle voidaan lähettää. Ilmoittautumisjärjestelmäohjelma saattaa hyvinkin käsitellä tuhansia opiskelijoita. Ohjelmointi olisi todella työlästä, jos ohjelmassa pitäisi kertoa jokaisesta opiskelijaoliosta erikseen, että hänellä on nimi, opiskelijanumero, koulutusohjelma ja kurssilista. Olisi samoin hankalaa, jos ohjelmassa pitäisi kertoa jokaisesta opiskelijaoliosta erikseen, että oliolle voidaan lähettää viesti ilmoittaudu ja samalla määritellä, millaisen toiminnon viesti saa oliossa aikaan. Lisäksi uuden opiskelijan lisääminen järjestelmään vaatisi sen, että ohjelmaa täytyy muuttaa.
Sen sijaan, että ohjelmassa kerrottaisiin jokaisesta opiskelijaoliosta erikseen, mitä ominaisuuksia tällä oliolla on, kirjoitetaan luokka Opiskelija, jossa määritellään, mitä ominaisuuksia kaikilla Opiskelija-luokan olioilla on. Luokan koodissa siis kerrotaan, että jokaisella Opiskelija-oliolla on nimi, opiskelijanumero, koulutusohjelma ja kurssilista. Sitä, mikä on yksittäisen Opiskelija-olion nimi, ei luokan koodissa kerrota, vaan tämä voidaan määritellä esimerkiksi Opiskelija-oliota luodessa.
Samoin Opiskelija-luokassa kerrotaan, mitä viestejä Opiskelija-olioille voidaan lähettää ja millaisia toimintoja nämä viestit saavat aikaiseksi.
Luokan määrittelyssä kerrotaan myös, millaisia suhteita tämän luokan olioilla voi olla muiden luokkien olioihin. Esimerkiksi Opiskelija-luokassa kerrotaan, että Opiskelija-oliolla on yhtenä ominaisuutenaan luettelo kurssiolioista.
Tässä ilmoittautumisjärjestelmäesimerkissä pitäisi siis kirjoittaa luokan Opiskelija lisäksi luokka Kurssi, joka määrittelisi, millaisia ohjelmassa käytettävät Kurssi-oliot ovat. Koska ilmoittautumisjärjestelmän toteuttavan ohjelman kirjoittaminen ei ole kuitenkaan aivan yksinkertaista, esitetään tässä helpompi esimerkki Java-kielellä kirjoitettuna.