Der Gedanke hinter einer Klasse ist es, das Verhalten eines Objektes zu beschreiben. Nach außen hin definierst du, WAS ein Objekt tut. Innerhalb der Klasse beschreibst du, WIE das Objekt etwas macht.
Wenn du z.B. eine Pizza bestellst, dann gibt es für dich als Kunden ein ganz klares Prozedere: Du rufst an und sagst was du willst. Dann steht jemand vor deiner Tür und drückt dir gegen Geld die Pizza in die Hand. Was zwischen deinem Anruf und dem Öffnen der Tür passiert, interessiert dich nicht und hat dich nicht zu interessieren. Z.B. ob die in der Pizzabäckerei eine Wagner warm machen oder selber backen. Und ob die Pizza von einem Mitarbeiter auf einen Fahrrad, Roller oder Auto gebracht wird, ob mit berittenem Boten oder per Hubschrauber genausowenig.
Es wäre natürlich denkbar, daß du dich um all das auch noch kümmerst, aber das wäre unsinnig.
Die Vorteile in der Programmierei sind vielfältig: Zum einen kannst du große Riesenprobleme in viele kleine, leicht verständliche und schnell lösbare Probleme zerlegen – der Kern der Ingenieurskunst schlechthin.
Außerdem machen Änderungen nicht dein ganzes Programm zunichte. Nimm z.B. eine Klasse, das Daten für dein Programm zur Verarbeitung liefert. Wenn die Daten nun anderswo herkommen sollen, z.B. willst du auf eine andere Datenbank umsteigen, so mußt du zwar eine Klasse umschreiben, aber der Rest deines Programms bekommt von dieser Änderung nix mit. Die Methoden, die die Klasse nach außen hin zur Verfügung stellt, haben denselben Namen, nehmen dieselben Parameter entgegen und liefern dieselben Daten zurück wie vorher.
Außerdem bieten dir Getter/Setter nachträglich z.B. Möglichkeiten zur Fehlerbehandlung an. Nimm z.B. mal an, du hast eine Klasse die in deinem Programm an sehr vielen Stellen verwendet wird. Diese Klasse hat einen Integerwert, und dieser Wert wird in deinem Programm – welches aus 5Mio Codezeilen besteht – an unzählig vielen Stellen per Direktzugriff gelesen und beschrieben.
Und zwei Jahre später stellt sich heraus: Dieses Integer darf niemals kleiner als 0 sein. Viel Spaß beim Codeeditieren.
Deutlich weniger Ärger würde so eine Änderung machen, wenn der Zugriff steht über Getter/Setter-Methoden erfolgt. Dann würdest du lediglich die eine Settermethode ändern müssen und wärst fertig.