Objekt je zabalený kod a data která k němu patří. Můžeš snadno zajistit (a měl bys to správně u OOP dělat), aby každý objekt měl plnou zodpovědnost za svá data a žádný jiný kod mu v jeho datech zmatek nedělal. Tím se ti celej program rozpadne na řadu objektů a každej je soběstačnej (můžeš ho kdykoliv použít znovu, zvlášť ho testovat apod.)
Příklad: Chceš udělat program na evidenci svých videokazet - tak vytvoříš objekt Videokazeta, kterej bude umět načíst data, zkontrolovat esli jsi třeba nezadal zápornou delku v hodinách apod. Pak vytvoříš objekt SeznamVid, kterej bude mít metody VložVideokazetu(Videokazeta obj), Vymaž(jmenoVideokazety), NaDisk(), ZDisku(String nazevSouboru)... Pak vytvoříš třeba objekt, kterej bude mít na starosti grafické znázornění... třeba Vystup a tenhle objekt Vystup bude svojí práci dělat tak, že bude dávat příkazy (volat metody) objektu Tabulka a Menu... K tomu všemu si představ, jak daleko snadněji se může rozdělovat práce mezi víc programátorů - každej udělá svůj objekt a na šéfovi je jen aby standartizoval vzájemnou komunikaci mezi objektama. Další výhoda je dědičnost... třeba ten SeznamVid by mohl být zděděn, od nějakého obecného objektu Seznam, kterej sis už někdy někde udělal a u SeznamVid jen přidáš pár specialit pro videokazety...
Hodně pochopíš taky když se budeš snažit využít nějaké objektové API pro vytváření GUI - třeba Swing, .NET, MFC apod. Každý formulář se stará o své buttony, checkboxy, textboxy...
Já mám zase opačný problém - budu muset dělat do školy něco v čistém C a strašně mi objekty chybí - připadá mi, že ten kod nebude moc přehlednej, že budou problémy s rozšiřováním...