0% encontró este documento útil (0 votos)
31 vistas20 páginas

Programación Orientada A Objetos: Tecnológico Nacional de México Instituto Tecnológico de Nuevo León

El documento presenta información sobre programación orientada a objetos, incluyendo conceptos como clases, objetos e instancias. También describe el proceso de desarrollo de software basado en clases que incluye análisis, diseño, implementación y pruebas.

Cargado por

Elsa Patricia
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
31 vistas20 páginas

Programación Orientada A Objetos: Tecnológico Nacional de México Instituto Tecnológico de Nuevo León

El documento presenta información sobre programación orientada a objetos, incluyendo conceptos como clases, objetos e instancias. También describe el proceso de desarrollo de software basado en clases que incluye análisis, diseño, implementación y pruebas.

Cargado por

Elsa Patricia
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 20

TECNOLÓGICO NACIONAL DE MÉXICO

INSTITUTO TECNOLÓGICO DE NUEVO LEÓN

SUBDIRECCIÓN ACADÉMICA

INGENIERÍA EN SISTEMAS COMPUTACIONALES

Programación Orientada A Objetos

TEMA # 1
Introducción al paradigma de la programación orientada a objetos.

Actividad #2
Subir la práctica de Hola Mundo.

Ing. Alejandro Javier Cabrera Gómez

Número de control: 22481001


Cano Barrón Elsa Patricia

Cd. Guadalupe, Nuevo León; 6 de septiembre del 2023.


Objetos

En el mundo real, las personas identifican los objetos como elementos que pueden ser percibidos
por los cinco sentidos; cuentan con propiedades específicas que definen su estado como posición,
tamaño, color, forma, textura, etcétera; además tienen ciertos comportamientos que los hacen
diferentes de otros objetos. Martin y Odell definen un objeto como “cualquier cosa, real o
abstracta, en la que se almacenan datos y aquellos métodos (operaciones) que manipulan los
datos”. Para realizar esa actividad se añaden a cada objeto de la clase los propios datos y los
asociados con sus propios métodos miembro que pertenecen a la clase. Un mensaje es una
instrucción que se envía a un objeto, el cual se ejecutará al recibirlo; incluye el identificador que
contiene la acción a realizar por el objeto junto con los datos que éste necesita para efectuar su
trabajo; los mensajes, por consiguiente, forman una ventana del objeto al mundo exterior. Una vez
que una clase fue definida, un programa puede contener una instancia de la clase, denominada
objeto de la clase; éste se crea con el operador new aplicado a un constructor; por ejemplo, un
objeto de la clase Punto inicializado a las coordenadas. El operador new crea el objeto y devuelve
una referencia al objeto creado; esta referencia se asigna a una variable del tipo de la clase; el
objeto permanecerá vivo siempre que esté referenciado por una variable de la clase que es
instancia. Un objeto es una instancia de una clase; se pueden tener varias instancias de una clase
llamada, por ejemplo, auto; con un Audi rojo, de dos puertas; un Renault azul, de cuatro puertas y
uno todo terreno, verde, de cinco puertas; cada instancia es un objeto al que se puede dar nombre
o dejarlo anónimo y se representa en los diagramas de objetos.
Clases
1.9 Java como lenguaje y plataforma de programación.
Java es un lenguaje de programación de propósito general, posiblemente, uno de los
más populares y utilizados en el desarrollo de programas de software, especialmente
para internet y web; actualmente se encuentra en numerosas aplicaciones, dispositivos,
redes de comunicaciones, etcétera, como: • Servidores web. • Bases de datos
relacionales. • Sistemas de información geográfica (SIG/GIS, Geographical Information
System). • Teléfonos celulares (móviles). • Sistemas de teledetección. • Asistentes
digitales personales (PDA). • Sistemas medioambientales. Pero Java no sólo es un
lenguaje de programación, sino que también constituye una plataforma completa para
el desarrollo de software; posee una biblioteca gigantesca de clases y aplicaciones con
numerosos códigos reutilizables y un entorno de programación que proporciona
servicios tales como seguridad, portabilidad entre sistemas operativos y recolección
automática de basura
1.10.1 Características de Java En C, C++ o Pascal
El compilador traduce el código fuente directamente al lenguaje máquina de su
computadora, entendible por su CPU; estos lenguajes necesitan un compilador
diferente para cada tipo de CPU y en consecuencia, cuando los programas escritos en
estos lenguajes se traducen a código máquina no son portables, de modo que el código
fuente debe ser recompilado para cada tipo de máquina o CPU. Para solucionar este
problema y hacer que los programas de Java sean independientes de la máquina y se
puedan transportar o “portar” fácilmente a otras máquinas y también puedan ejecutarse
en navegadores web, los creadores de Java introdujeron el concepto, citado
anteriormente, de máquina virtual Java y el bytecode como el lenguaje máquina de la
CPU específica, donde la máquina virtual Java los ejecuta o interpreta
2.2 Creación de un programa en Java.
Java tiene dos tipos de programas: aplicaciones y applets. Un applet es un programa
de aplicación que se ejecuta como parte de una página web, se almacena en un sitio
remoto en la misma web, pero se ejecuta en la computadora local del usuario. En el
capítulo 22 profundizaremos en este concepto; mientras tanto, nos centraremos en las
aplicaciones Java que no necesitan formar parte de una página web para ejecutarse.
2.4 Metodología de desarrollo basada en clases
Un método típico para desarrollar software con clases durante la resolución de un problema se
estructura así: 1. Analizar el problema y especificar sus requerimientos. 2. Diseñar las clases
para resolverlo mediante: a) Localización de las clases relevantes que existen en biblioteca. b)
Modificación de las mismas cuando sea necesario. c) Diseño de nuevas clases, si se requiere.
3. Implementación de las clases nuevas y las modificadas. 4. Prueba y verificación del
programa terminado. 5. Mantenimiento y actualización.

Análisis
Implica la identificación del problema considerando las entradas o datos de este, la
salida o resultados deseados y los requerimientos adicionales o restricciones de la
solución. En esta etapa es importante identificar las clases que participarán en la
resolución del problema; si el problema ha sido bien analizado y sus especificaciones
bien definidas, normalmente, la identificación de las clases se deduce de la descripción
del problema y de las especificaciones
Diseño
Requiere analizar las clases existentes reutilizables, identificar las que se deseen
modificar e identificar las que se deben escribir desde el principio. Esta etapa suele ser
la más difícil en el proceso de resolución del problema porque, para cada clase, hay
que reconocer los datos de los que será responsable y los métodos que operarán sobre
los datos.
Implementación
Implica la escritura de las clases definidas en Java y la identificación de las bibliotecas
de clases que se utilizarán directamente o aquellas que se modificarán; también se
debe escribir el código que describa los cambios.
Pruebas
(testing) Una vez terminado y sometido al proceso de compilación y ejecución, el
programa se deberá ejecutar usando diferentes conjuntos de datos para verificar que
funcione de acuerdo con las especificaciones. Existen diferentes tipos de pruebas para
POO, dos de ellas son las unitarias y las de integración; en las primeras se comprueba
la funcionalidad de cada clase de manera individual, mientras que en las segundas se
verifica su funcionamiento correcto.
2.6.4 BlueJ
EDI, que tiene editor integrado, compilador, máquina virtual y depurador para escritura
de programas; también tiene una presentación gráfica para estructuras de clases y
soporta edición de texto y gráficos; además de permitir la creación de objetos
interactivos, pruebas interactivas y construcción de aplicaciones incrementales.
Resumen.
1.- • El proceso de resolución de un problema mediante una computadora consta de las
siguientes etapas: análisis del problema, diseño del algoritmo, codificación,
compilación, ejecución, verificación y pruebas, mantenimiento y documentación.
2.- Un algoritmo es un proceso de resolución de problemas paso a paso con el que se
obtiene una solución en un tiempo finito.
3.- Los dos enfoques básicos de programación más utilizados son: programación
estructurada y programación orientada a objetos.
4.- En diseño y programación estructurada, un problema se divide en subproblemas
menores; cada uno de ellos se resuelve para, a continuación, integrar las soluciones.
5.- En diseño y programación orientada a objetos se identifican elementos que, a su
vez, son instancias o componentes de las clases; un programa orientado a objetos es
una colección de objetos que interactúan entre sí.
6.- Las clases son las plantillas o modelos de datos a partir de las cuales se crean o
instancian objetos
7.- Los objetos representan elementos del mundo real y se generan como instancias o
ejemplares de las clases.
8.- Un intérprete es un programa que lee y traduce cada instrucción en bytecode al
lenguaje máquina de la computadora y a continuación lo ejecuta.
9.- Los entornos de desarrollo facilitan el proceso de creación y ejecución de
programas en Java; los entornos de desarrollo integrados o EDI (IDE, por sus siglas en
inglés) más conocidos y utilizados en enseñanza
10.- Sun (ahora Oracle) ofrece un kit de desarrollo en Java; su última versión hasta julio
de 2010 es JDK 6 update 21
11.- Para ejecutar un programa Java, en primer lugar se debe traducir a un lenguaje
intermedio denominado bytecode para después interpretarlo en el lenguaje máquina
específico. Bytecode es el lenguaje máquina para la JVM (Java virtual machine).
12.- • La máquina virtual Java (JVM) es una supuesta computadora que permite a los
programas ser independientes de la máquina, lo que facilita la portabilidad de los
programas fuente entre diferentes tipos de computadoras.

3.1 Estructura general de un programa en Java


Elementos básicos de Java
clases y obligatoriamente main() debe ser uno de los métodos de la clase principal; un
método en Java es un grupo de instrucciones que realizan una o más acciones. Por
otro lado, el programa debe contener una serie de declaraciones import que permitan
incluir archivos que consten de clases y datos predefinidos. De modo concreto, un
programa en Java puede incluir:
• Declaraciones para importar clases de los paquetes. • Declaraciones de clases.
• El método main().
• Métodos definidos por el usuario dentro de las clases.
• Comentarios del programa (utilizados en su totalidad).
Declaración de clases Como se ha dicho, el programa debe tener al menos una clase,
la principal, que incluya el método main() y si es necesario, otros métodos y variables;
para declararla es opcional empezar con una palabra clave, generalmente indicando el
acceso; seguida por su indicador, la palabra reservada class, su nombre y sus
miembros: variables y métodos;
10.5 Clase Vector y ArrayList

Java proporciona un grupo de clases que almacenan secuencias de objetos de cualquier tipo: las colecciones; éstas se
diferencian en la forma de organizar los objetos y, en consecuencia, en la manera de recuperarlos.

10.5.1 Clase Vector

La clase Vector se encuentra en el paquete java.util y es una de estas colecciones, tiene un comportamiento similar a un
arreglo unidimensional; guarda objetos o referencias de cualquier tipo, crece dinámicamente, sin necesidad de tener que
programar operaciones adicionales; el arreglo donde almacena los elementos es de tipo Object, y su

declaración es: protected Object elementData[]

10.5.2 Clase ArrayList

Esta clase agrupa elementos como un arreglo; es equivalente a Vector, pero con las mejoras introducidas por Java 2;
permite acceder a cualquier elemento, insertar o borrar a partir del índice en cualquier posición, aunque un tanto
ineficiente si se realiza en posiciones intermedias. A partir de Java 5 es una clase genérica y, por consiguiente, se puede
establecer el tipo concreto de los elementos; esta clase tiene tres constructores:

public ArreayList();

public ArrayList(int capacidad);

public ArrayList(Collection c);

12.3 Clases abstractas

Las clases abstractas representan conceptos generales, engloban las características comunes de un conjunto de objetos.
Persona, en un contexto laboral, es una clase abstracta que engloba las propiedades y métodos comunes a todo tipo de
individuo que trabaja para una empresa. Las clases abstractas declaran métodos y variables instancia, y normalmente
tienen métodos abstractos; si una clase tiene un método abstracto debe declararse abstracta; una característica
importante de estas clases es que de ellas no se pueden definir objetos, es decir, no se puede instanciar de una clase
abstracta; el compilador devuelve un error siempre que se intenta crear un objeto de dichas clases. Las clases abstractas
están en lo más alto de la jerarquía de clases, son superclases base y, por consiguiente, siempre se establece una
conversión automática de clases derivada a base abstracta.

12.4 Clases internas

Una clase interna es la que se declara dentro de otra clase; se puede decir que es anidada. Un objeto de la clase
Direccion puede hacer referencia a los miembros de Alumno; los objetos de la clase interna disponen de una referencia
implícita al objeto que los contiene. Las clases internas declaran atributos y métodos de igual forma que las externas o
de nivel superior, con la peculiaridad de que sus métodos pueden acceder a los atributos de su clase externa. Hay cuatro
tipos de clases internas:

a) miembro de una clase

b) locales

c) static

d) anónimas

La compilación de una clase que contiene a una clase interna genera dos archivos: Externa.class y Externa$Interna.class.
Para la máquina virtual son dos clases normales; en el ejemplo 12.4 la compilación generará los archivos Alumno.class y
Alumno$Direccion.class. Las clases anónimas se utilizan con mucha frecuencia en la gestión de eventos.
12.4.1 Clases internas miembro

Éstas se definen dentro de otra clase al nivel superior, es decir, al nivel establecido por las llaves de apertura y cierre:
class Externa { ... class Interna }. Las clases internas así definidas pueden tener visibilidad pública o privada; se debe
recordar que las clases externas o normales no pueden tener visibilidad privada; Si la visibilidad de la clase interna lo
permite, también se pueden crear objetos desde el exterior de la clase.

12.4.2 Clases internas locales

Estas clases se definen dentro de un bloque de código y, por consiguiente, son locales, su visibilidad se limita al bloque;
se crean dentro de un método, donde también se crean sus objetos. El ámbito de la clase local es el método donde se
define; por consiguiente no se declaran con etiquetas de visibilidad; siempre están ocultas al exterior del bloque o
método donde se han declarado. Las clases locales pueden acceder a los miembros de la clase externa y también a las
variables del método declaradas con el atributo final.

12.4.3 Clases internas static

Las clases internas static se utilizan para ocultar una clase dentro de otra; se pueden definir perfectamente como clase
externa. Los objetos de la clase interna static pueden existir con independencia de los objetos de la clase externa; de
hecho se puede crear un objeto de dicha clase interna sin haber creado un objeto de la clase externa; son tan
independientes que los métodos de estas clases sólo tienen acceso a los miembros de la clase externa mediante una
referencia del objeto externo; esto no es necesario en el caso de los miembros static de la clase externa.

12.5 Clases anónimas

Este tipo de clases internas no se identifican con un nombre, se definen a la vez que se crea la instancia u objeto de la
clase; de ellas no se pueden crear múltiples objetos, sólo el ligado con la definición. La clase anónima no sólo puede
implementar una interfaz sino que también puede derivar o extender una clase

13.1 Clases derivadas

La herencia o relación es-un, es la relación existente entre dos clases: una es la derivada que se crea a partir de otra ya
existente, denominada base; la nueva hereda de la ya existente; por ejemplo: si existe una clase Figura y se desea crear
una clase Triangulo, esta última puede derivarse de la primera pues tendrá en común con ella un estado y un
comportamiento, aunque tendrá sus características propias; Triangulo es-un tipo de Figura; otro ejemplo es Programador
que es-un tipo de Empleado. Como la clase base y la clase derivada tienen código y datos comunes, es evidente que si se
crea la clase derivada de modo independiente, se duplicaría mucho de lo que ya se escribió para la clase base; entonces
la herencia en la clase derivada es una ampliación de la base pues aquélla dispone de sus atributos y métodos propios
más los atributos y métodos heredados; por ello, Java utiliza la palabra reservada extends para crear clases derivadas o
clases que son extensión de otra, de modo que la nueva hereda todos los miembros datos y los métodos que pertenecen
a la ya existente. La declaración de derivación de clases debe incluir la palabra reservada extends y a continuación el
nombre de la clase base de la que se deriva.

13.1.1 Declaración de una clase derivada

Los miembros private de la clase base son los únicos que la derivada no hereda, no se puede acceder a ellos desde
métodos de clases derivadas; los miembros con visibilidad public, protected o la visibilidad predeterminada, que es sin
especificador de visibilidad, se incorporan a la derivada con la misma visibilidad que en la base.
13.1.2 Diseño de clases derivadas

En el diseño de una aplicación orientada a objetos no siempre resulta fácil establecer la relación de herencia más óptima
entre clases; por ejemplo: los empleados de una empresa; existen diferentes tipos de clasificaciones según el criterio de
selección (discriminador) y, entre otros, pueden ser:

a) modo de pago: sueldo fijo, por horas, comisión;

b) tipo de empresa: industrial o comercial;

c) tipo de relación laboral: fijo o temporal.

13.1.2 Diseño de clases derivadas

En el diseño de una aplicación orientada a objetos no siempre resulta fácil establecer la relación de herencia más óptima
entre clases; por ejemplo: los empleados de una empresa; existen diferentes tipos de clasificaciones según el criterio de
selección (discriminador) y, entre otros, pueden ser: a) modo de pago: sueldo fijo, por horas, comisión; b) tipo de
empresa: industrial o comercial; c) tipo de relación laboral: fijo o temporal.

13.1.3 Sobrecarga de métodos

en la clase derivada La sobrecarga de métodos se produce cuando se define uno con el mismo nombre que otro de la
misma clase pero con distinto número o tipo de argumentos; en la sobrecarga no interviene el tipo de retorno. Una clase
derivada puede redefinir un método de la clase base sin tener exactamente la misma cabecera o signatura, teniendo el
mismo nombre pero distinta lista de argumentos; esta redefinición no oculta el método de la clase base, sino que da
lugar a una sobrecarga del método heredado en la derivada.

13.5 Clases no derivables: atributo final

En el contexto de herencia, la palabra reservada final aplicada a una clase se emplea para impedir que la clase sea
derivable; es decir, cuando se requiere que una clase no pueda extenderse, se declara con el modificador final.

14.2 Clases y métodos abstractos

Al analizar problemas con la metodología de orientación a objetos surgen relaciones de generalización-especialización


entre clases; éstas son jerárquicas y en su parte alta se encuentran las clases más generales, posiblemente clases
abstractas.

En las jerarquías de clases, las superclases que se crean a partir de subclases con atributos y comportamientos comunes
y que sirven para derivar otras que comparten sus características, generalmente son abstractas; éstas definen un
concepto o tipo generalizado y sirven para describir nuevas clases; además, no se pueden instanciar, es decir, no se
puede crear ningún objeto de esa clase y sólo tienen significado como una clase base de otras; también corresponden a
conceptos generales que no se traducen en objetos específicos pero que son útiles para proporcionar una descripción de
todas las características comunes de objetos. Las clases abstractas son útiles para realizar implementaciones parciales, es
decir, realizan partes de sus funcionalidades postergando el resto a sus subclases.

15.2 Declaración de una clase genérica

Las plantillas de clase permiten definir las clases genéricas que pueden manipular diferentes tipos de datos; una
aplicación importante es la implementación de contenedores, clases que contienen objetos de un tipo dato, tales como
vectores (arreglos), listas, secuencias ordenadas o tablas de dispersión (hash); en esencia, los contenedores manejan
estructuras de datos. En terminología orientada a objetos, las plantillas de clases también se denominan clases
parametrizables. Una clase genérica (parametrizable) es una clase con una o más variables tipo.
15.4 Clase genérica Pila

Se trata de diseñar una clase Pila que permita manipular pilas de diferentes tipos de información; una pila es una
estructura que permite almacenar datos de modo que el último en entrar en la pila es el primero en salir; sus
operaciones usuales son insertar y quitar; la primera (push) añade un elemento en su cima, mientras que la segunda
(pop) elimina o saca un elemento de ella; la figura 15.1 muestra una pila con las operaciones típicas.

16.5 Clases de excepciones definidas en Java

En su empeño por estandarizar el manejo de excepciones Java declara un amplio conjunto de clases de excepciones, las
cuales forman una jerarquía en la que la base es Throwable, que deriva directamente de la superclase base Object De
Throwable derivan dos clases: Error y Exception; las excepciones del tipo Error son generadas por el sistema, se trata de
errores irrecuperables y es extraño que se produzcan; por ejemplo: salir de la memoria de la máquina virtual.

17.2 Clase File

Los constructores de flujos que esperan un archivo se sobrecargan para recibir el archivo como cadena y recibir un objeto
de la clase File; este tipo de objeto contiene el nombre del archivo, la ruta y más propiedades relativas a él. La clase File
define métodos para conocer propiedades del archivo, tales como la última modificación, permisos de acceso, tamaño,
etcétera; también para cambiar alguna característica del archivo. Los constructores de File permiten inicializar el objeto
con el nombre de un archivo y la ruta donde se encuentra e inicializarlo con otro objeto File como ruta y el nombre del
archivo.

17.3 Flujos y jerarquía de clases

Todo el proceso de entrada y salida en Java se hace a través de flujos; en los programas hay que crear objetos stream y
en muchas ocasiones hacer uso de los objetos in, out de la clase System; los flujos de datos, caracteres o bytes pueden
ser de entrada y salida. En consonancia, Java declara dos clases que derivan directamente de la clase Object:
InputStream y OutputStream; ambas son abstractas y declaran métodos que deben redefinirse en sus clases derivadas;
la primera es la base de todas las clases definidas para flujos de entrada; la segunda es la base de todas las clases
definidas para flujos de salida

17.5.1 Clase de objeto persistente

La declaración de la clase cuyos objetos van a persistir debe implementar la interfaz Serializable del paquete java.io, la
cual es vacía, no declara métodos, simplemente indica a la JVM que las instancias de estas clases podrán grabarse en un
archivo.

20.2 Crear un marco o clase JFrame

Los componentes gráficos de una aplicación Java se ubican, directa o indirectamente, en una ventana principal, que es
un objeto marco que deriva de la clase JFrame. Los marcos no se visualizan automáticamente, al principio son invisibles;
para mostrarlos se llama al método setVisible(true).

22.5 Clases Graphics, Font y Color Graphics

es una clase abstracta definida en el paquete java.awt que proporciona el contexto gráfico; la clase dispone de métodos
para dibujar todo tipo de elementos, tales como líneas, elipses u óvalos y rectángulos en la pantalla; algunos métodos de
la clase Graphics dibujan figuras y otros dibujan imágenes de mapas de bits (bitmap); esta clase también contiene
métodos para establecer las propiedades de los elementos gráficos tales como fuentes de las letras colores
La modularidad consiste en dividir un programa en módulos que
puedan compilarse por separado, sin embargo tendrá conexiones con
otros módulos. La modularidad también tiene principios y son los
siguientes: Capacidad de descomponer un sistema complejo.
Capacidad de componer a través de sus módulos

holamundo.jar

├── com

│ └── ejemplo

│ └── HolaMundo.class

└── module-info.class

Los descriptores se escriben en un fichero module-info.java en la raíz del


fichero JAR o directorio. Este fichero se compila junto al resto de ficheros Java.
Observa que el nombre de fichero no es un identificador legal Java porque
contiene un guión

module ejemplo {

requires java.util.logging;

exports com.ejemplo;

}
ENCAPSULAMIENTO

Encapsulación o encapsulamiento significa reunir en cierta estructura todos los elementos


que, a determinado nivel de abstracción, se pueden considerar de una misma entidad, y es el
proceso de agrupamiento de datos y operaciones relacionadas bajo una misma unidad de
programación, lo que aumenta la cohesión de los componentes del sistema.

Los objetos que poseen las mismas características y comportamiento se agrupan en clases
que son unidades de programación que encapsulan datos y operaciones. La encapsulación
oculta lo que hace un objeto de lo que hacen otros objetos del mundo exterior, por lo que se
denomina también ocultación de datos.

Un objeto tiene que presentar una “cara” al mundo exterior, de modo que pueda iniciar
operaciones.

La interfaz de una clase representa un contrato de presentación de servicios entre ella y los
demás componentes del sistema, de este modo, los clientes de un componente solo
necesitan conocer los servicios que este ofrece y no como están implementados
internamente.

Existe una separación entre la interfaz y la implementación: la primera establece qué se


puede hacer con el objeto; de hecho, la clase actúa como una caja negra; es estable, la
implementación se puede modificar.

Para definir la visibilidad en Java, se dispone de palabras reservadas:

 public: nos indica que es accesible desde cualquier clase [interface].


 private: solo es accesible desde a clase actual.
 protected: accesible desde la clase actual, sus descendientes o el paquete del que
forma parte.
 sin ninguna palabra: accesible desde cualquier clase del paquete.

Generalmente (no siempre) es recomendable que los atributos tengan un nivel


encapsulación cerrado, es decir, los atributos deben de ser privados y manipularlos
mediante sus métodos Get y Set (Java u otros) o Propiedades (.Net). Para mayor seguridad,
podemos agregar validaciones en los métodos Get y Set.
El fin de tener atributos o métodos privados del objeto, es evitar que el usuario de la clase
pueda cambiar su estado de manera imprevista e incontrolada.

Puedes usar el nivel de encapsulación protegido, cuando una clase tendrá clases que deriven
de ella (Herencia), y es necesario que las clases hijas (clases derivadas) requieran acceso a
los atributos de la clase padre (súper clase), entonces los atributos o métodos serán
protected.

Puedes usar el nivel de encapsulación abierto (atributos o métodos públicos), si quieres


obviar la implementación de los métodos y propiedades, para así concentrarse solamente en
cómo usarlos, de esa manera el desarrollo de software será más ágil y rápido.

Sin embargo, elegir el nivel de encapsulación no es porque uno quiere así por así, debemos
de tener criterio (abstracción) para tener atributos o métodos, privados, públicos o
protegidos.
Herencia
El concepto de clases divididas en subclases se utiliza en la vida diaria y conduce
al de herencia; la clase animal se divide en mamíferos, anfibios, insectos, aves,
etcétera; la clase vehículo se divide en autos, camiones, autobuses, motocicletas,
etcétera. La clase electrodoméstico se divide en lavadora, frigorífico, tostadora,
microondas, y así sucesivamente. La idea principal de estas divisiones reside en el
hecho de que cada subclase comparte características con la clase de la cual se
deriva. Los autos, camiones, autobuses, y motocicletas, tienen motor, ruedas y
frenos; pero, además de estas características compartidas, cada subclase tiene
las propias; los autos, por ejemplo, pueden tener maletero, cinco asientos; los
camiones, cabina y caja para transportar carga, entre otras características. La
clase principal de la que derivan las restantes se denomina base, padre o
superclase; las subclases también se denominan derivadas o hijas. Las clases
reflejan que el mundo real contiene objetos con propiedades o atributos y
comportamiento; la herencia manifiesta que dichos objetos tienden a organizarse
en jerarquías; esta jerarquía, desde el punto de vista del modelado, se denomina
relación de generalización o es-un (del inglés is-a). En programación orientada a
objetos, la relación de generalización se denomina herencia; cada clase derivada
hereda las características de la cual es base y además añade sus propias
características, atributos y operaciones. Las clases bases también pueden ser
subclases o derivarse de otras superclases. Así, el programador puede definir una
clase Animal que encapsule todas las propiedades o atributos (altura, peso,
número de patas, etc.) y el comportamiento u operaciones (comer, dormir, andar)
que pertenecen a cada uno. Los animales específicos como mono, jirafa, canguro
o pingüino tienen a su vez características propias.
Como las técnicas de herencia se representan con la citada relación es-un, se
puede decir que mono es-un Animal con características propias: subir a lo árboles,
saltar entre ellos, entre otras; además, comparte con jirafa, canguro y pingüino las
características propias de cualquier animal, como comer, beber, correr, dormir,
etcétera. Otro ejemplo basado en la industria del automóvil es el siguiente: la clase
caja de cambios hace unos años tenía cuatro marchas adelante y una atrás;
posteriormente se incorporó una delantera y en los últimos años ya se
comercializan automóviles con seis; también se pueden considerar las cajas
automáticas como otra extensión de la clase base.
La herencia permite la creación de nuevas clases a partir de otra ya existente; la
que sirve de modelo se llama base y la que se creó, hereda: sus características,
además se pueden personalizar añadiendo rasgos adicionales. Las clases
creadas a partir de una base se denominan derivadas.
Niveles de herencia Como comentamos, la jerarquía de herencia puede tener más
de dos niveles; una clase hija también puede ser padre de otra clase hija; por
ejemplo, mamífero es hija de animal y padre de caballo (ver figura 7.11). Las
clases hija o subclases añaden sus propios atributos y operaciones a los de sus
clases base. Una clase puede no tener clase hija, en cuyo caso es una clase hija.
Si una clase tiene sólo un padre, se tiene herencia simple y si tiene más de un
padre, entonces, la herencia es múltiple

Herencia de clases e implementación de interfaces


Las interfaces no son clases porque especifican un comportamiento mediante
métodos para la clase que las implementa; por ello, una clase puede heredar de
su clase base y a la vez implementar una interfaz; en la siguiente jerarquía de
clases: ParqueNatural hereda de la clase EspacioProtegido y además implementa
la interfaz Parque. El esquema para implementar este diseño es:
public interface Parque {...}
public class EspacioProtegido {...}
public class ZonaAve extends EspacioProtegido {...}
public class ParqueNatural extends EspacioProtegido implements Parque {...}
Una clase puede heredar de otra clase e implementar una interfaz; primero se
debe especificar la clase de la que hereda (extends) y después la interfaz que
implementa (implements)
La herencia es la propiedad que permite definir nuevas clases usando como base
las ya existentes; la nueva clase, también llamada derivada, hereda los atributos y
comportamiento que son específicos de ella; la herencia es una herramienta
poderosa que proporciona un marco adecuado para producir software fiable,
comprensible, de bajo coste, adaptable y reutilizable
Herencia pública
Recordará que en una clase existen secciones públicas, privadas, protegidas y la
visibilidad por omisión llamada amigable. Java considera que la herencia siempre
es pública; esto significa que una derivada tiene acceso a los elementos públicos y
protegidos de su base. Los elementos con visibilidad amigable son accesibles
desde cualquier clase del mismo paquete pero no son visibles en derivadas de
otros paquetes (tabla 13.1). Una clase derivada no puede acceder a variables y
métodos privados de su base; ésta utiliza elementos protegidos para ocultar sus
detalles respecto a clases no derivadas de otros paquetes.

Constructores en herencia
Un objeto de una derivada consta de la porción correspondiente de su base y de
los miembros propios; en consecuencia, al construir un objeto de una clase
derivada, primero se construye la parte de su base llamando a su constructor y, a
continuación, se inicializan los miembros propios de la derivada
Herencia múltiple (no soportada en Java)
Se trata de un tipo de herencia en la que una clase hereda el estado o estructura y
el comportamiento de más de una clase base; en otras palabras, hay herencia
múltiple cuando una clase hereda de más de una clase; es decir, existen múltiples
clases base, también llamadas ascendientes o padres, para la clase derivada,
descendiente o hija. La herencia múltiple entraña un concepto más complicado
que la simple, no sólo con relación a la sintaxis sino también respecto al diseño e
implementación del compilador; además, aumenta las operaciones auxiliares y
complementarias, y produce ambigüedades potenciales; incluso, el diseño con
clases derivadas por derivación múltiple tiende a producir más clases que el
diseño con herencia simple. Debido a estas razones Java no ha desarrollado la
herencia múltiple, sólo permite la herencia de una sola clase base; se incluye en
este capítulo a título meramente informativo y por cuestiones de comparación con
otros lenguajes como C++ que sí soportan este tipo de herencia; la figura 13.11
muestra diferentes ejemplos de herencia múltiple.
En herencia simple, el escenario es bastante sencillo, en términos de concepto e
implementación; en herencia múltiple, los escenarios varían ya que las clases
base pueden proceder de diferentes sistemas. Java no permite declarar una clase
derivada o extensión de dos o más clases; si en el diseño de una aplicación hay
herencia múltiple y no puede transformarse a simple, entonces la primera puede
simularse con el mecanismo interface-implements.
Una clase puede derivar de otra e implementar una o más interfaces; por ejemplo,
la clase Helicóptero deriva de Avión e implementa dos interfaces:
public class Helicóptero extends Avión implements Transporte, Vertical {...}
Por otra parte, la herencia múltiple siempre se puede eliminar y convertir en simple
si el lenguaje de implementación no la soporta o considera que tendrá dificultades
en etapas posteriores a la implementación real.
Herencia y genericidad
La herencia se puede aplicar a las clases e interfaces genéricas; una clase
genérica puede heredar de una ordinaria (no genérica).
El polimorfismo es uno de los conceptos fundamentales en la programación orientada a
objetos (POO) y se encuentra ampliamente implementado en el lenguaje de
programación Java. El polimorfismo se refiere a la capacidad de objetos de diferentes
clases de responder a un mismo mensaje de manera diferente. En Java, el polimorfismo
se logra principalmente a través de la herencia y las interfaces. Aquí tienes algunas
características, especificaciones y conceptos clave relacionados con el polimorfismo en
Java:

Polimorfismo de tiempo de compilación y de tiempo de ejecución:

Polimorfismo de tiempo de compilación: También conocido como enlace estático, se


refiere a la resolución de llamadas a métodos en tiempo de compilación. Esto se aplica
cuando el tipo de referencia de la variable es el que se utiliza para determinar qué
método se debe llamar. Es típico en llamadas a métodos y variables estáticos.

Polimorfismo de tiempo de ejecución: También conocido como enlace dinámico, se


refiere a la resolución de llamadas a métodos en tiempo de ejecución, basada en el tipo
real del objeto. Esto permite que los objetos de clases derivadas (subclases) se
comporten de manera diferente en función de su implementación específica.

Herencia y polimorfismo:

Java permite que una clase (subclase) herede comportamientos y características de otra
clase (superclase). El polimorfismo se apoya en esta relación de herencia.

Un objeto de una subclase puede tratarse como un objeto de su superclase, lo que


significa que puedes usar una referencia de la superclase para apuntar a un objeto de la
subclase. Esto es esencial para el polimorfismo.

Interfaces y polimorfismo:

Las interfaces son una forma importante de lograr el polimorfismo en Java. Una interfaz
define un conjunto de métodos que una clase debe implementar. Las clases que
implementan una interfaz pueden tratar las instancias de esas clases como objetos de la
interfaz.

Esto permite que diferentes clases implementen una misma interfaz y luego se utilicen
de manera intercambiable a través de referencias de la interfaz.

Sobrecarga de métodos y polimorfismo:


Java permite la sobrecarga de métodos, lo que significa que puedes tener múltiples
métodos con el mismo nombre en una clase, pero con diferentes listas de parámetros.
Esto no es polimorfismo por sí mismo, pero es una característica relacionada.

Métodos abstractos y polimorfismo:

Los métodos abstractos son métodos que se declaran en una interfaz o en una clase
abstracta, pero no se implementan en esa clase. Deben ser implementados por las clases
concretas que heredan de la interfaz o clase abstracta. Esto permite que múltiples clases
implementen un comportamiento específico de manera diferente, lo que es una forma de
polimorfismo.

En resumen, el polimorfismo en Java es una característica poderosa que permite que


objetos de diferentes clases se comporten de manera similar a través de interfaces y
herencia, al tiempo que mantienen sus implementaciones específicas. Esto hace que el
código sea más flexible, reutilizable y fácil de mantener.

Abstracción:

Es la propiedad que considera los aspectos más significativos o notables de un problema


y expresa una solución en esos términos. En computación, es la etapa crucial de
representación de la información en relación con la interfaz y el usuario; se representa
con un tipo definido por el usuario, con el diseño de una clase que implementa la
interfaz correspondiente. Una clase es un elemento en C++ o en Java que traduce una
abstracción a un tipo definido por el usuario y combina representaciones de datos y
métodos para manipular esa información en un paquete.
La abstracción posee diversos grados denominados niveles; éstos ayudan a estructurar la
complejidad intrínseca que poseen los sistemas del mundo real; en el análisis de un
sistema hay que concentrarse en qué hace y no en cómo lo hace.

El principio de la abstracción es más fácil de entender con una analogía del mundo real;
por ejemplo: la televisión es un electrodoméstico que se encuentra en todos los hogares;
la mayoría de las personas está familiarizada con sus características y su manejo manual
o con el control remoto: encender, apagar, cambiar de canal, ajustar el volumen, cambiar
el brillo, etcétera, así como añadir componentes externos: altavoces, grabadoras de CD,
reproductores de DVD, conexión de un módem para internet, etcétera. Sin embargo,
¿sabe usted cómo funciona internamente?, ¿conoce cómo recibe la señal por la antena,
por cable, o satélite, traduce la señal y la visualiza en pantalla?

Normalmente no sabemos cómo funciona el aparato de televisión, pero sí sabemos


cómo utilizarlo; esto se debe a que la televisión separa claramente su implementación
interna de su interfaz externa, en este caso, el cuadro de mandos de su aparato o su
control remoto; usamos la televisión a través de su interfaz: los botones de ajuste, de
cambio de canal, control de volumen, etcétera. No conocemos el tipo de tecnología que
utiliza, el método de generar la imagen en pantalla o cómo funciona internamente, es
decir su implementación, ya que ello no afecta a su interfaz.

También podría gustarte