# Programació basada en classes

La programació basada en classes, o més comunament orientació a classes, és un estil de programació orientada a objectes (OOP) en què l'herència es produeix mitjançant la definició de classes d'objectes, en lloc de l'herència es produeix només mitjançant els objectes (compareu la programació basada en prototips).
El model de POO més popular i desenvolupat és un model basat en classes, en lloc d'un model basat en objectes. En aquest model, els objectes són entitats que combinen estat (és a dir, dades), comportament (és a dir, procediments o mètodes) i identitat (existència única entre tots els altres objectes). L'estructura i el comportament d'un objecte estan definits per una classe, que és una definició, o plànol, de tots els objectes d'un tipus específic. Un objecte s'ha de crear explícitament a partir d'una classe i un objecte així creat es considera una instància d'aquesta classe. Un objecte és similar a una estructura, amb l'addició de punters de mètode, control d'accés de membres i un membre de dades implícit que localitza instàncies de la classe (és a dir, objectes de la classe) a la jerarquia de classes (essencial per a les funcions d'herència en temps d'execució).

## Encapsulació

L'encapsulació evita que els usuaris trenquin els invariants de la classe, la qual cosa és útil perquè permet canviar la implementació d'una classe d'objectes per aspectes no exposats a la interfície sense impacte en el codi de l'usuari. Les definicions d'encapsulació se centren en l'agrupació i empaquetat de la informació relacionada (cohesió) més que en els problemes de seguretat.

## Herència

En la programació basada en classes, l'herència es fa definint classes noves com a extensions de classes existents: la classe existent és la classe pare i la classe nova és la classe fill. Si una classe secundaria només té una classe principal, això es coneix com a herència única , mentre que si una classe secundaria pot tenir més d'una classe pare, això es coneix com a herència múltiple. Això organitza les classes en una jerarquia, ja sigui un arbre (si és una herència única) o una gelosia (si és una herència múltiple).
La característica que defineix l'herència és que tant la interfície com la implementació s'hereten; si només s'hereta la interfície, això es coneix com a herència d'interfície o subtipificació. L'herència també es pot fer sense classes, com en la programació basada en prototips.
Crítica
Els llenguatges basats en classes, o, per ser més precisos, els llenguatges mecanografiats, on la subclassificació és l'única manera de subtipificar, han estat criticats per barrejar implementacions i interfícies — el principi essencial de la programació orientada a objectes. Els crítics diuen que es podria crear una classe de bossa que emmagatzema una col·lecció d'objectes, i després ampliar-la per fer una nova classe anomenada classe de conjunt on s'elimina la duplicació d'objectes. Ara, una funció que pren un objecte de la classe bossa pot esperar que afegir dos objectes augmenta la mida d'una bossa en dos, però si un passa un objecte d'una classe establerta, afegir dos objectes pot augmentar o no la mida de una bossa per dos. El problema sorgeix precisament perquè la subclassificació implica subtipificació fins i tot en els casos en què el principi de subtipulació, conegut com a principi de substitució de Liskov, no es compleix.

## Exemples

Tot i que Simula va introduir l'abstracció de classes, l'exemple canònic d'un llenguatge basat en classes és Smalltalk. Altres inclouen PHP, C++, Java, C# i Objective-C.

## Referències

* ↑ «Classes (OOP) | Brilliant Math & Science Wiki» (en anglès americà). [Consulta: 17 desembre 2023].
* ↑ Python, Real. «Python Classes: The Power of Object-Oriented Programming – Real Python» (en anglès). [Consulta: 17 desembre 2023].
* ↑ Kiselyov, Oleg. «Subtyping, Subclassing, and Trouble with OOP» (en anglès). [Consulta: 7 octubre 2012].
* ↑ Ducasse, Stéphane. «A set cannot be a subtype of a bag» (en anglès). [Consulta: 7 octubre 2012].