2. Es la capacidad de un método
de comportarse de manera
diferente dependiendo de la
clase desde donde haya sido
invocado, esto es, dos o más
clases pueden reaccionar de
manera diferente al mismo
mensaje.
3. Si un mismo método puede
tener diferentes formas de ser
invocado, se dice entonces que
el método ha sido
sobrecargado. Los operadores
aritméticos +, -, *, y / pueden
ser sobrecargados en C++, así
es semánticamente correcto
"sumar" dos instancias de la
clase std::string, lo que resulta
en la concatenación de
cadenas.
4. En algunos casos, una clase tendrá "subclases",
versiones más especializadas de una clase. Por
ejemplo, la clase Perro puede tener sub-clases
llamadas, Collie, Chihuahua y Pastor Alemán. En
este caso, Lassie sería una instancia de la sub-
clase Collie. Las sub-clases heredan atributos y
comportamientos de sus clases padres, y pueden
agregar sus propios métodos y atributos.
Supóngase que la clase Perro define un método
llamado ladrar() y una propiedad llamada
colorPelaje. Cada una de sus sub-clases (Collie,
Chihuahua, y Pastor Alemán) heredarán estos
miembros, lo que significa que el programador
sólo necesita escribir el código para ellos una
vez. Cada sub-clase puede alterar sus rasgos
heredados. Así, por ejemplo, la clase Collie
podría especificar que el valor por defecto para
el colorPelaje es marrón y blanco. La sub-clase
Chihuahua podría especificar que el método
ladrar() es agudo por defecto
5. Las sub-clases también pueden añadir nuevos miembros. La clase Chihuahua
puede añadir un método llamado temblar(). Así una instancia chihuahua
individual podría usar un ladrido agudo de la sub-clase Chihuahua y
alternativamente heredar el ladrar() usual desde Perro. El objeto chihuahua
tambié podría tener el método temblar(), pero Lassie no, porque ella es un
Collie, no un Chihuahua. De hecho, La herencia es una relación "es-un"; Lassie
es un Collie. Un Collie es un Perro. Así, Lassie hereda los miembros de ambas
clases Perro y Collie. Cuando un objeto o clase hereda sus rasgos desde más
de una clase padre, y ninguno de sus ancestros es un ancestro de el otro,
entonces se llama herencia múltiple. Por ejemplo, clases independientes
podrían definir Perros y Gatos, y un objeto Quimera podría ser creado desde
estos dos heredando todos los (múltiples) comportamientos de Perros y
gatos.Esto es una función específica del lenguaje de programació usado ya que
es muy difícil de utilizar y de programar.
6. Una clase define las características
abstractas de algo (objeto),
incluyendo las características (sus
atributos y propiedades) y lo que ese
algo puede hacer (sus
comportamientos o métodos o
funciones). Por ejemplo, una clase
Perro consistiría en rasgos comunes
a todos los Perros, por ejemplo raza,
color del pelaje, etc... las clases
proveen modularidad y estructura en
un programa orientado a objetos. Una
clase debería típicamente ser
reconocible por una persona sin
conocimientos de programación pero
relacionada con el dominio del
problema, dado que las
características de la clase deberían
tener sentido en el contexto.
También, el código de una clase
debería ser relativamente auto-
contenido. Generalmente, las
propiedades y métodos de una clase
son llamados miembros.
7. Una instancia particular
de una clase. La clase
Perro define a todos los
posibles perros al listar
las características que
ellos pueden tener; el
objeto Lassie es un perro
particular, con versiones
particulares de las
características. Un perro
tiene pelaje, Lassie tiene
pelaje marrón y blanco. En
la jerga de la
programación, el objeto
Lassie es una instancia de
la clase Perro. El conjunto
de valores de los atributos
para un objeto particular
se llama estado.
8. Una capacidad de un método.
Lassie, siendo un perro, tiene la
capacidad de ladrar(). Así
ladrar() es uno de los métodos
de Lassie. Ella puede tener
muchos otros métodos también,
por ejemplo sentarse() o
comer(). Dentro del programa,
el uso de un método deberí
afectar sólo a un objeto en
particular; todos los perros
pueden ladrar(), pero se
necesita un perro en particular
para que ladre.
9. El proceso mediante
el cual un objeto envía
información a otro
objeto o solicita que
este invoque un
método.