Sie sind auf Seite 1von 6

Generalidades en la programación

Orientada a Objetos
A lo largo del presente módulo, encontramos una serie de generalidades
y anotaciones importantes a tener en cuenta en el desarrollo de
aplicaciones con el paradigma orientado a objetos, con el objetivo de
enfatizar en algunas prácticas comunes que los programadores suelen
realizar en la ingeniería de Software.

Generalidades en la programación Orientada a Objetos1.


Resumen de las asignaciones permitidas entre variables de la
superclase y de la subclase2. Clases finales3. Métodos
finales:Composición de clasesMiembros de clase
staticVariables de instancia finalResumen de superclases y
subclasesResumen de modificadores de
acceso@OverrideIngeniería de Software en la
herencia.Generalidades del PolimorfismoResumen de
InterfacesClases y métodos abstractos
 

1. Resumen de las asignaciones permitidas entre


variables de la superclase y de la subclase
Aunque un objeto de una subclase también es un objeto de su
superclase, los dos son, sin embargo, distintos. Los objetos de una
subclase pueden tratarse como si fueran objetos de la superclase. Sin
embargo, como la subclase puede tener miembros adicionales que sólo
pertenezcan a ella, no se permite asignar una referencia de la superclase
a una variable de la subclase sin una conversión explícita; dicha
asignación dejaría los miembros de la subclase indefinidos para el objeto
de la superclase.

Cuatro maneras de asignar referencias de una superclase y de una


subclase a las variables desús tipos:

1. Asignar una referencia de la superclase a una variable de ella es


un proceso simple y directo.
2. Asignar una referencia de la subclase a una variable de ella es un
proceso simple y directo.
3. Asignar una referencia de la subclase a una variable de la
superclase es seguro, ya que el objeto de la subclase es un objeto de su
superclase. No obstante, la variable de la superclase puede usarse para
referirse sólo a los miembros de la superclase. Si este código hace
referencia a los miembros que pertenezcan sólo a la subclase, a través
de la variable de la superclase, el compilador reporta errores.
4. Tratar de asignar una referencia de la superclase a una variable de
la subclase produce un error de compilación. Para evitar este error, la
referencia de la superclase debe convertirse en forma explícita a un tipo
de la subclase. En tiempo de ejecución, si el objeto que menciona la
referencia no es un objeto de la subclase, se producirá una excepción. Es
conveniente usar el operador i nstanceof para asegurar que dicha
conversión se realice sólo si el objeto es de la subclase.

2. Clases finales
Las clases final no pueden ser superclases. Una dase final que se declara
como final no puede ser una superclase (es decir, una clase no puede
extender a una clase final). Todos los métodos en una clase final son
implícitamente final. La clase  String  es un ejemplo de una clase final. Si
pudiéramos crear una subclase de  String , los objetos de esa subclase
podrían usarse en cualquier lugar en donde se esperaran objetos String.
Como esta clase no puede extenderse, lo que los programas que utilizan
objetos  String  pueden depender de la funcionalidad de los
objetos  String , según lo especificado en la API de java. Al hacer laclase
final también se evita que los programadores creen subclases que
podrían ignorar las restricciones de seguridad.

3. Métodos finales:
Los métodos final no se pueden sobrescribir. Un método final en una
superclase no puede sobrescribirse en una subclase; esto garantiza que
todas las subclases directas e indirectas en la jerarquía utilicen la
implementación del método final. Los métodos que se declaran
como  private  son implícitamente final, ya que es imposible
sobrescribirlos en una subclase. Los métodos que se declaran
como  static  también son implícitamente final. La declaración de un
método fi nal nunca puede cambiar, por lo cual todas las subclases
utilizan la misma implemen- tación del método, y las llamadas a los
métodos fi nal se resuelven en tiempo de compilación; a esto se le
conoce como vinculación estática.

Composición de clases
Una clase puede tener referencias a objetos de otras clases como
miembros. A dicha capacidad se le conoce como composición y algunas
veces como relación tiene un. Por ejemplo, un objeto de la clase Reloj
Alarma necesita saber la hora actual la hora en la que se supone sonará
su alarma, por lo que es razonable incluir dos referencias a objetos
Tiempo como miembros del objeto ReíojAlarma.
 

Miembros de clase static


Cada objeto tiene su propia copia de todas las variables de instancia de
la clase. En ciertos casos, sólo debe compartirse una copia de cierta
variable entre todos los objetos de una clase. En esos casos se utiliza un
campo static (al cual se le conoce como una variable de clase). Una
variable static representa información en toda la clase: todos los objetos
de la clase comparten la misma pieza de datos. La declaración de una
variable static comienza con la palabra clave static.

Variables de instancia final


El principio del menor privilegio es fundamental para la buena ingeniería
de software. En el contexto de una aplicación, el principio establece que
al código sólo se le debe otorgar tanto privilegio y acceso como necesite
para llevar a cabo su tarea designada, pero no más. Esto hace a sus
programas más robustos, al evitar que el código modifique por accidente
(o de manera intencional) los valores de las variables y haga llamadas a
métodos que no deben ser accesibles.

Resumen de superclases y subclases


A menudo, un objeto de una clase es un objeto de otra clase también. se
listan abajo varios ejemplos simples de superclases y subclases;

las superclases tienden a ser “más generales”, y las subclases “más


específicas”. Por ejemplo, un PrestamoAuto es un Préstamo, así como
PrestamoMejoraCasa y PréstamoHipotecario. Por ende, en Java se puede
decir que la clase PrestamoAuto hereda de la clase Préstamo. En este
contexto, dicha clase es una superclase y la clase PrestamoAuto es una
subclase. Un PrestamoAuto es un tipo específico de Préstamo, pero es
incorrecto afirmar que todo Préstamo es un PrestamoAuto; el Préstamo
podría ser cualquier tipo de crédito.

Superclase Subclases

Estudiante EstudianteCraduado, EstudianteNoCraduado,

Figura Circulo, Triangulo, Rectángulo, Esfera, Cubo

Préstamo PrestamoAutomovil, PrestamoMejoraCasa, PrestamoHipotecario


Superclase Subclases

Empleado Docente, Administrativo, CuentaBancaria, CuentaDeCheques, CuentaDeAhorr

   

Resumen de modificadores de acceso


Los miembros  public  de una clase son accesibles en cualquier parte en
donde el programa tenga una referencia a un objeto de esa clase, o una
de sus subclases. Los miembros  private  de una clase son accesibles
sólo dentro de la misma clase. El uso del acceso  protected  ofrece un
nivel intermedio de acceso entre  public  y  private .

Los miembros protected de una superclase pueden ser utilizados por los
miembros de esa superclase, por los de sus subclases y por los de otras
clases en el mismo paquete; los miembros protected también tienen
acceso a nivel de paquete.

Al declarar variables de instancia private (a diferencia de protected) en


la superclase, se permite que la implementación de la superclase para
estas variables de instancia cambie sin afectar las implementaciones de
las subclases.

@Override
Consideraciones sobre la notación @Override

Cuando intentamos sobrescribir el método de una superclase, los errores


comunes son: asignar un nombre incorrecto al método de la subclase o
utilizar el número o tipos incorrectos de los parámetros en la lista de
parámetros. Cada uno de estos problemas crea una sobrecarga no
intencional del método de la superclase.

Si después tratamos de llamar al método en un objeto de la subclase, se


invoca la versión de la superclase y se ignora la versión de la subclase;
esto puede provocar ligeros errores lógicos. Cuando el compilador
encuentra un método declarado con @Override, compara la firma del
método con las firmas del método de la superclase. Si no hay una
coincidencia exacta, el compilador emite un mensaje de error, como "el
método no sobrescribe o implementa a un método de un supertipo".

Ingeniería de Software en la herencia.


 Al extender una clase, la nueva clase hereda los miembros de la
superclase, aunque sus miembros private están ocultos en la nueva
clase. Podemos personalizar la nueva clase para cumplir nuestras
necesidades, mediante la inclusión de miembros adicionales y la
sobrescritura de miembros de la superclase.
 Para hacer esto, no es necesario que el programador de la
subclase modifique el código fuente de la superclase; ni siquiera
necesita tener acceso al mismo. Java sólo requiere el acceso al
archivo .class de la superclase, para poder compilar y ejecutar cualquier
programa que utilice o extienda la superclase.

Generalidades del Polimorfismo


El polimorfismo nos permite “programar en forma general”, en vez de
“programar en forma específica.” En particular, nos permite escribir
programas que procesen objetos que compartan la misma superclase (ya
sea de manera directa o indirecta) como si todos fueran objetos de la
superclase; esto puede simplificar la programación. Un ejemplo de
polimorfismo sería:

Cuadriláteros: Si laclase Rectángulo se deriva de laclase Cuadrilátero,


entonces un objeto Rectángulo es una versión más específica de un
objeto Cuadri latero. Cualquier operación (por ejemplo, calcular el
perímetro o el área) que pueda realizarse en un objeto Cuadrilátero
también puede realizarse en un objeto Rectángulo. Estas operaciones
también pueden realizarse en otros objetos Cuadrilátero, como Cuadrado,
Paral elogramo y Trapezoi de. El polimorfismo ocurre cuando un
programa invoca a un método a través de una variable de la superclase
Cuadri latero; en tiempo de ejecución, se hace una llamada a la versión
correcta del método de la subclase, con base en el tipo de la referencia
almacenada en la variable de la superclase. En la sección 10.3 veremos
un ejemplo de código simple, en el cual se ¡lustra este proceso.

Resumen de Interfaces
Una interfaz describe a un conjunto de métodos que pueden llamarse en
un objeto, pero no proporciona implementaciones concretas para todos
ellos. Podemos declarar clases que implementen a (es decir, que
proporcionen implementaciones concretas para los métodos de) una o
más interfaces.

Cada método de una interfaz debe declararse en todas las clases que
implementen a la interfaz. Una vez que una clase implementa a una
interfaz, todos los objetos de esa clase tienen una relación es un con el
tipo de la interfaz, y se garantiza que todos bs objetos de la clase
proporcionarán la funcionalidad descrita por la interfaz. Esto se aplica
también para todas las subclases de esa clase.

 
Clases y métodos abstractos
En algunos casos es conveniente declarar clases (conocidas como clase
abstractas) para las cuales el programador nunca creará instancias de
objetos. Puesto que sólo se utilizan como superclases en jerarquías de
herencia, nos referimos a ellas como superclases abstractas.

¿Cuál es su propósito?

El propósito de una clase abstracta es proporcionar una superclase


apropiada, a partir de la cual puedan heredar otras clases y, por ende,
compartir un diseño común. Las clases que pueden utilizarse para
instanciar objetos se llaman clases concretas, las cuales proporcionan
implementaciones de cada método que declaran (algunas de las
implementaciones pueden heredarse). Por ejemplo, podríamos derivar las
clases concretas Circulo, Cuadrado y Triangulo de la superclase
abstracta FiguraBidimensional

Das könnte Ihnen auch gefallen