Este documento presenta los temas de la unidad 2 de la asignatura Estructura y Organización de Datos. Cubre conceptos como abstracción, tipos abstractos de datos, especificación de TADs, clases, objetos, declaración de clases, paquetes, constructores, recolección de objetos, this, miembros estáticos, la clase Object, y la implementación de TADs en Java. El objetivo es comprender mejor estos temas y aumentar el conocimiento sobre estructuras de datos y su aplicación práctica.
1. INSTITUTO TECNOLÓGICO DE SALINA CRUZ
Materia:
Benita Villalobos Pérez
docente:
M.C Susana Mónica Román Nájera
Materia:
Estructura y Organización de datos
Tema:
Unidad 2
Carrera: TIC´S
grupo: 3E
2. TEMAS
2.1. Abstracción en lenguajes de
programación.
2.2. Tipos abstractos de datos.
2.3. Especificación de los TAD.
2.4. Clases y objetos.
2.5. Declaración de una clase.
2.6. Paquetes.
2.7. Constructores.
2.8. Recolección de objetos.
2.9. Objeto que envía el mensaje: this.
2.10. Miembros static de una clase.
2.11. Clase Object.
2.12. Tipos abstractos de datos en Java.
3. OBJETIVO
Comprender mas a fondo todos los temas que viene
en el libro y así poder aumentar nuestro conocimiento
sobre las estructuras de datos y sus funciones para
llevarlos a la practica.
4.
5. Son las herramientas mediante las cuales los
diseñadores de lenguajes pueden implementar los
modelos abstractos.
La abstracción ofrecida por los lenguajes de
programación se puede dividir en dos categorías:
abstracción de datos (perteneciente a los datos) y
abstracción de control (perteneciente a las
estructuras de control).
6. Abstracciones de control
Los microprocesadores ofrecen directamente sólo dos
mecanismos para controlar el flujo y ejecución de las
instrucciones: secuencia y salto.
Los primeros lenguajes de programación de alto nivel
introdujeron las estructuras de control: sentencias de
bifurcación (if) y bucles
(for, while, do-loop, etc.).
Las estructuras de control describen el orden en el que se
ejecutan las sentencias o grupos de sentencia (unidades de
programa). Las unidades de programa se utilizan como
bloques básicos de la clásica descomposición “descendente”.
7. La abstracción de datos es la técnica de programación que
permite inventar o definir nuevos tipos de datos (tipos de
datos definidos por el usuario) adecuados a la aplicación que
se desea realizar.
La abstracción de datos es una técnica muy potente que
permite diseñar programas más cortos, legibles y flexibles.
La esencia de la abstracción es similar a la utilización de un
tipo de dato, cuyo uso se realiza sin tener en cuenta cómo
está representado o implementado.
8.
9. Un tipo abstracto es un tipo de dato que consta de
datos(estructuras de datos propias) y operaciones
que se pueden realizar sobre ellos. Un TAD se
compone de estructuras de datos y los
procedimientos o funciones que manipulan esas
estructuras de datos.
10. Un tipo abstracto de datos puede definirse mediante
la ecuación:
TAD = Representación (datos) + Operaciones
(funciones y procedimientos)
Un tipo abstracto de datos es un modelo (estructura)
con un número de operaciones que afectan a ese
modelo.
11.
12. El objetivo de la especificación es describir el comportamiento
del TAD; consta de dos partes, la descripción matemática del
conjunto de datos y la de las operaciones definidas en ciertos
elementos de ese conjunto de datos.
La especificación del TAD puede tener un enfoque informal,
que describe los datos y las operaciones relacionadas en
lenguaje natural. Otro enfoque mas riguroso, la especificación
formal, supone suministrar un conjunto de axiomas que
describen las operaciones en su aspecto
sintáctico y semántico.
13. Especificación informal de un TAD
Consta de dos partes:
• Detallar en los datos del tipo los valores que pueden tomar.
• Describir las operaciones relacionándolas con los datos.
Especificación formal de un TAD
La especificación formal proporciona un conjunto de axiomas que
describen el comportamiento de todas las operaciones.
La descripción ha de incluir una parte de sintaxis, en cuanto a los
tipos de los argumentos y al tipo del resultado, y una parte de
semántica, donde se detalla la expresión del resultado que se
obtiene para unos valores particulares de los argumentos.
La especificación formal ha de ser lo bastante potente para que
cumpla el objetivo de verificar la corrección de la implementación del
TAD.
14.
15. ¿QUÉ SON OBJETOS?
En el mundo real, las personas identifican los objetos como
cosas que pueden ser percibidas por los cinco sentidos. Los
objetos tienen propiedades específicas, como posición,
tamaño, color, forma, textura, etc. que definen su estado. Los
objetos también poseen ciertos comportamientos que los
hacen diferentes de otros objetos.
Booch define un objeto como “algo que tiene un estado, un
comportamiento y una identidad”.
16. ¿QUÉ SON CLASES?
En términos prácticos, una clase es un tipo definido por el usuario. Las
clases son los bloques de construcción fundamentales de los programas
orientados a objetos.
Booch define una clase como “un conjunto de objetos que comparten una
estructura y un comportamiento comunes”.
Una clase contiene la especificación de los datos que describen un objeto
junto con la descripción de las acciones que un objeto conoce cómo ha de
ejecutar. Estas acciones se conocen como servicios o métodos. Una clase
incluye también todos los datos necesarios para describir los objetos
creados a partir de la clase.
Estos datos se conocen como atributos, variables o variables instancia. El
término atributo se utiliza en análisis y diseño orientado a objetos, y el
término variable instancia se suele utilizar en programas orientados a
objetos.
17. La definición de una clase significa que se debe dar a la misma un
nombre, dar nombre también a los elementos que almacenan sus datos y
describir los métodos que realizarán las acciones consideradas en los
objetos.
Las definiciones o especificaciones no son un código de programa
ejecutable. Se utilizan para asignar almacenamiento a los valores de los
atributos usados por el programa y reconocer los métodos que utilizará el
programa. Normalmente, se sitúan en archivos formando los
denominados packages, se utiliza un archivo para varias clases que están
relacionadas
18.
19. Una vez que una clase ha sido definida, un programa puede contener una
instancia de la clase, denominada objeto de la clase. Un objeto se crea
con el operador new aplicado a un constructor de la clase.
Un objeto de la clase Punto inicializado a las coordenadas (2,1) sería:
new Punto(2,1);
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.
Edad f = new Edad();
20.
21. Los paquetes son la forma que tiene Java de organizar los
archivos con las clases necesarias para construir las
aplicaciones. Java incorpora varios paquetes, por ejemplo:
java.lang o java.io,
Con las clases básicas para construir programas: System,
String, Integer ...
package NombrePaquete;
22. La sentencia package se utiliza para este cometido. En primer lugar se
debe incluir la sentencia package como primera línea del archivo
fuente de cada una de las clases del paquete.
Por ejemplo, si las clases Lápiz, Bolígrafo y Folio se van a organizar
formando el paquete escritorio, el esquema a seguir es el siguiente:
// archivo fuente Lapiz.java
package escritorio;
public class Lápiz
{
// miembros de clase Lápiz
} // archivo fuente Boligrafo.java
package escritorio;
public class Bolígrafo
{
// miembros de clase Bolígrafo
}
// archivo fuente Folio.java
package escritorio;
public class Folio
{
// miembros de clase Folio
23. Las clases que se encuentran en los paquetes se identifican utilizando el
nombre del paquete, el selector punto (.) y, a continuación, el nombre de la
clase. Por ejemplo, la declaración de la clase Arte con atributos de la clase
PrintStream (paquete java.io) y Lápiz (paquete escritorio):
public class Arte
{
private java.io.PrintStream salida;
private escritorio.Lapiz p;
}
24. La sentencia import facilita la selección de una clase, permite
escribir únicamente su nombre,
evitando el nombre del paquete. La declaración anterior se puede
abreviar:
import java.io.PrintStream;
import escritorio.*;
public class Arte
{
private PrintStream salida;
private Lápiz p;
}
La sentencia import debe aparecer antes de la declaración de las
clases, a continuación de la
sentencia package.
25.
26. Un constructor es un método que se ejecuta automáticamente
cuando se crea un objeto de una clase. Sirve para inicializar
los miembros de la clase.
El constructor tiene el mismo nombre que la clase. Cuando se
define no se puede especificar un valor de retorno, nunca
devuelve un valor. Sin embargo, puede tomar cualquier
número de argumentos.
Reglas
1. El constructor tiene el mismo nombre que la clase.
2. Puede tener cero o más argumentos.
3. No tiene tipo de retorno.
27. Constructor por defecto
Un constructor que no tiene parámetros se llama constructor
por defecto. Un constructor por
defecto normalmente inicializa los miembros dato de la clase
con valores por defecto.
Regla
Java crea automáticamente un constructor por defecto
cuando no existen otros constructores.
Tal constructor inicializa las variables de tipo numérico (int,
float ...) a cero, las variables de tipo boolean a true y las
referencias a null.
28. Constructores sobrecargados
Al igual que se puede sobrecargar un método de una clase,
también se puede sobrecargar el constructor de una clase. De
hecho, los constructores sobrecargados son bastante
frecuentes y proporcionan diferentes alternativas para
inicializar objetos.
Regla
Para prevenir a los usuarios de la clase de crear un objeto sin
parámetros, se puede:
(1) omitir el constructor por defecto, o bien
(2) hacer el constructor privado.
29.
30. this es una referencia al objeto que envía un mensaje, o
simplemente, una referencia al objeto que llama un método
(este no debe ser static). Internamente se define:
final NombreClase this;
31. Seleccionar explícitamente un miembro de una clase con el fin de
dar mas claridad o de evitar colisión de identificadores.
Por ejemplo:
class Triangulo
{
private double base;
private double altura;
public void datosTriangulo(double base, double altura)
{
this.base = base;
this.altura = altura;
}
// ...
}
Se ha evitado con this la colisión entre argumentos y variables
instancia.
32.
33. Cada instancia de una clase, cada objeto, tiene su propia
copia de las variables de la clase. Cuando interese que haya
miembros que no estén ligados a los objetos sino a la clase y,
por tanto, sean comunes a todos los objetos, estos se
declaran static.
34. Las variables de clase static son compartidas por todos los
objetos de la clase. Se declaran de igual manera que otra
variable, añadiendo como prefijo la palabra reservada static.
Por ejemplo:
public class Conjunto
{
private static int k = 0;
static Totem lista = null;
// ...
}
35.
36. Object es la superclase base de todas las clases de Java;
toda clase definida en Java hereda de la clase Object y, en
consecuencia, toda variable referencia a una clase se
convierte, automáticamente, al tipo Object.
Por ejemplo:
Object g;
String cd = new String("Barranco la Parra");
Integer y = new Integer(72); // objeto inicializado a 72
g = cd; // g referencia al mismo objeto que cd
g = y; // g ahora referencia a un objeto Integer
La clase Object tiene dos métodos importantes: equals() y
toString(). Generalmente, se redefinen en las clases para
especializarlos.
37. equals()
Compara el objeto que hace la llamada con el objeto que se
pasa como argumento, devuelve true si son iguales.
boolean equals(Object k);
El siguiente ejemplo compara dos objetos; la comparación es
true si contienen la misma cadena.
String ar = new String("Iglesia románica");
38. toString()
Este método construye una cadena, que es la representación
del objeto, y devuelve la cadena.
Normalmente, se redefine en las clases para dar así detalles
explícitos de los objetos de la clase.
String toString()
Por ejemplo, un objeto Double llama al método toString() y
asigna la cadena a una variable.
Double r = new Double(2.5);
String rp;
rp = r.toString();
39.
40. Los tipos abstractos de datos (TAD) describen un conjunto de
objetos con la misma representación y comportamiento. Los tipos
abstractos de datos presentan una separación clara entre la interfaz
externa de un tipo de datos y su implementación interna.
La implementación de un tipo abstracto de datos está oculta. Por
consiguiente, se pueden utilizar implementaciones alternativas para
el mismo tipo abstracto de dato sin cambiar su interfaz.
La especificación de un tipo abstracto de datos se puede hacer de
manera informal, o bien, de forma mas rigurosa, una especificación
formal. En la especificación informal se describen literalmente los
datos y la funcionalidad de las operaciones.
41. La especificación formal describe los datos, la sintaxis y la
semántica de las operaciones, considerando ciertas
operaciones como axiomas, que son los constructores de
nuevos datos.
Una buena especificación formal de un tipo abstracto de datos
debe poder verificar la bondad de la implementación.
En la mayoría de los lenguajes de programación orientados a
objetos, y en particular en Java, los tipos abstractos de datos
se implementan mediante clases.
42. CONCLUSIONES
Este capitulo trata mas que nada sobre las clases y objetos,
sus métodos, sus atributos, como se declaran durante la
ejecución de un programa para no poder tener errores trata
mas que nada una recolección de información sobre los temas
vistos el semestre anterior.