Fundamentos de programación Instituto Tecnológico de Culiacán



Descargar 33,04 Kb.
Fecha de conversión14.05.2017
Tamaño33,04 Kb.
  • Fundamentos de programación
  • Instituto Tecnológico de Culiacán
  • Licenciatura en Informática
  • Prof. Felipe E. Muñiz R.
  • 2.1 Introducción a la Programación orientada a objetos.
    • 2.1.1 Orígenes de la POO.
    • 2.1.2 Beneficios de la POO.
  • 2.2 Clases.
    • 2.2.1 Encapsulamiento.
      • 2.2.1.1 Concepto de caja negra.
      • 2.2.1.2 Concepto de interfaz.
    • 2.2.2 Abstracción.
      • 2.2.2.1 Abstracción efectiva.
      • 2.2.2.2 Ocultamiento de información.
      • 2.2.2.3 Atributos
      • 2.2.2.4 Métodos
      • 2.2.2.5 Mensajes
    • 2.2.3 Diseño de una clase
  • 2.3 Objetos
    • 2.3.1 Ciclo de vida de un objeto.
    • 2.3.2 Estado y comportamiento de los objetos.
  • 2.4 Herencia y Polimorfismo.
    • 2.4.1 Conceptos básicos.
    • 2.4.2 Relación entre herencia y el polimorfismo.
  • Unidad 2.- Fundamentos del paradigma orientado a objetos.
  • TEMARIO
  • Abstracción
  • Las abstracciones son una manera fundamental que tenemos los humanos de manejarnos con la complejidad. Estas devienen del reconocimiento de las similaridades entre ciertos objetos, situaciones o procesos en el mundo real, y la decisión de concentrarse en estas similaridades ignorando las diferencias. Una abstracción es una descripción simplificada de un sistema que enfatiza algunos de sus detalles o propiedades mientras suprime otros. Una buena abstracción es la que enfatiza detalles que son significantes al lector, y suprime los que no lo son.
  • Una abstracción se enfoca sobre una vista externa del objeto, y sirve para separar su comportamiento esencial de su implementación.
  • La abstracción enfoca las características esenciales de algún objeto, relativa a la perspectiva del observador
  • Un cliente es un objeto que usa recursos de otro objeto. El comportamiento de un objeto se puede caracterizar por las operaciones que sus clientes pueden realizar sobre él, y las operaciones que él puede realizar sobre otros objetos. El conjunto de operaciones que un cliente puede requerir de un objeto define su protocolo.
  • Encapsulamiento
  • La abstracción de un objeto debería preceder a su implementación. Una vez que la implementación es seleccionada, esta debería tratarse como un secreto de la abstracción y ocultársela a la mayoría de los clientes.
  • Abstracción y encapsulamiento son conceptos complementarios: la abstracción enfoca la vista externa de un objeto, y el encapsulamiento (ocultamiento de la información) previene que los clientes vean la parte interna, donde el comportamiento de la abstracción es implementada.
  • Entonces, "El encapsulamiento es el proceso de ocultar todos los detalles de un objeto que no contribuyen a sus características esenciales.
  • El encapsulamiento oculta detalles de implementación de un objeto
  • Objetos
  • 2) Clasificación
  • 3) Instanciación
  • 4) Generalización
  • 5) Abstracción
  • 6) Encapsulación
  • 7) Modularidad
  • 8) Extensibilidad
  • 9) Polimorfismo
  • 10) Reuso de Código
  • Los aspectos principales de la programación orientada a objetos son:
  • Objetos
    • El objeto es la entidad básica del modelo orientado a objetos,
    • El objeto integra una estructura de datos (atributos) y un comportamiento (operaciones)
    • Los objetos se distinguen entre sí por medio de su propia identidad, aunque internamente los valores de sus atributos sean iguales.
  • Clasificación
    • Las clases describen posibles objetos, comunes en su estructura y comportamiento.
    • Los objetos que contienen los mismos atributos y operaciones pertenecen a la misma clase.
    • La estructura de clases integra las operaciones con los atributos a los cuales se aplican.
  • Instanciación
    • El proceso de crear objetos pertenecientes a cierta clase se llama instanciación.
    • El objeto es la instancia de una clase.
    • Pueden ser instanciados un número indefinido de objetos de cierta clase.
  • Generalización
    • En una jerarquía de clases, se comparten atributos y operaciones entre clases basados en la generalización de clases.
    • El mecanismo para describir la jerarquía de generalización de clases es la herencia.
    • Las clases más generales se conocen como superclases.
    • Las clases más especializadas se conocen como subclases.
    • La herencia puede ser sencilla o múltiple.
  • Abstracción
    • Se concentra en lo primordial de una entidad y no en sus propiedades secundarias.
    • Se concentra en lo que el objeto hace y no en cómo lo hace.
    • Se da énfasis a cuales son los objetos y no cómo son usados, logrando el desarrollo de sistemas más estables.
  • Encapsulación
    • Encapsulación o encapsulamiento es la separación de las propiedades externas de un objeto de los detalles de implementación internos del objeto.
    • Se separa la interface del objeto de sus implementación, limitando la complejidad al mostrarse sólo la información relevante.
    • Se limita el impacto a cambios en la implementación, ya que los cambios a las propiedades internas del objeto no afectan su interacción externa.
    • Se reduce el esfuerzo en migrar el sistema a diferentes plataformas.
    • Se protege al objeto contra posibles errores, y se permite hacer extensiones futuras en su implementación.
  • Modularidad
    • El encapsulamiento de los objetos da lugar a gran modularidad.
    • Cada módulo se concentra en una sola clase de objetos.
    • Los módulos tienden a ser pequeños y concisos.
    • La modularidad facilita encontrar y corregir problemas.
    • La complejidad del sistema se reduce facilitando su mantenimiento.
  • Extensibilidad
    • La extensibilidad permite hacer cambios en el sistema sin afectar lo que ya existe.
    • Nuevas clases pueden ser definidas sin tener que cambiar la interface del resto del sistema.
    • La definición de los objetos existentes puede ser extendida sin necesidad de cambios más allá del propio objeto.
  • Polimorfismo
    • Polimorfismo permite definir las mismas operaciones con diferente comportamiento en diferentes clases.
    • Se permite llamar una operación sin preocuparse de cuál implementación es requerida en que clase, siendo la responsabilidad de la jerarquía de clases y no del usuario.
  • Reuso de Código
    • La orientación a objetos apoya el reuso de código en el sistema.
    • Los componentes orientados a objetos se pueden utilizar para estructurar librerías reusables.
    • El reuso reduce el tamaño del sistema durante la creación y ejecución.
    • Al corresponder varios objetos a una misma clase, se guardan los atributos y operaciones una sola vez por clase, y no por cada objeto.
    • Por medio de la generalización y especialización, las subclases heredan atributos y operaciones comunes, definidos en las superclases.
    • La herencia es uno de los factores más importantes contribuyendo al incremento en el reuso de código dentro de un proyecto o entre múltiples proyectos.
    • Nuevas subclases de clases previamente definidas se pueden crear en el reuso de una clase, pudiéndose crear nuevas operaciones, o modificar las ya existentes.
  • Definición de clase
  • Clase : Es una descripción de atributos y comportamientos de un conjunto de objetos similares. Los objetos de una clase o tipo determinado comparten los mismos comportamientos y atributos. Las clases actúan en forma muy parecida a una plantilla o molde para galletas en el sentido de que una clase se utiliza para crear o instanciar objetos
  • Los atributos son características externas y visibles de una clase. El color de los ojos y del cabello de una persona, son ejemplos de atributos.
  • Un método (comportamiento) es la acción que realiza un objeto cuando se le pasa un mensaje o en respuesta a un cambio de estado;  es algo que realiza un objeto.
  • Un objeto puede ejercer el comportamiento de otro objeto ejecutando una operación sobre este último. Los términos llamada a método, llamada a función o paso de mensaje se utilizan en lugar de realizar una operación, cada una de estas acciones activa el comportamiento de un objeto
  • Definición de clase (continuación)
  •  [ modificadores ]    class    nombre-clase  [extends  claseSuperior ]     [implements  interfaz1,  interfaz2, ...interfazn ]    {        cuerpo     }
  • Donde:
  • modificadores  es opcional y puede ser uno más de las siguientes tres palabras reservadas:
  • {  public, abstract, final, synchronizable }
  • class  es una palabra reservada que se utiliza para definir o declarar una clase
  • nombre-clase  es cualquier identificador válido
  • extends   es una  palabra reservada que indica si la clase tiene herencia o es subclase o extensión de una claseSuperior  o superclase
  • claseSuperior  es un identificador o nombre de la superclase de la que hereda atributos y comportamientos
  • implements  es una palabra reservada que indica si la clase implementa una o varias interfaces
  • cuerpo  es una secuencia de declaraciones de variables, constantes , constructores y métodos
  • La sintaxis de una simple definición o declaración de clase es:
  • Atributos (o Variables)
  • Los atributos o variables son elementos en los programas que cambian su valor en el transcurso de ejecución del programa.  Los atributos guardan valores de cierto tipo que pueden ser valores de tipo primitivos u objetos.  En Java podemos clasificar los atributos en:
    • Instancias de atributos. Son miembros de la clase y se crean al instanciar un objeto de la clase.
    • Atributos de una clase. Son miembros de la clase y son algo similar a variables globales, utilizan el modificador static.
    • Atributos locales a métodos. Su ámbito es dentro del método.
    • La declaración de atributos en Java se hace de forma similar al C / C++.
  • La sintaxis de una simple declaración de un atributo es:
  • [ modificadores ]    nombre-del-tipo   nombre-de-atributo;
  • Donde:
  • modificadores  es opcional y puede ser uno más de las siguientes siete palabras reservadas:
  • { static, final, transient, volatile,  public , protected, private }
  • Cabe señalar que el único modificador que puede ponérsele a una variable local a un método es el modificador final.
  • nombre-del-tipo    es una de las ocho siguientes palabras reservadas ( pero también pueden ser el nombre de una clase p.ej. String, Alumno, Date, etc.  ):
  • { boolean, byte, char, short, int, long, float, double }
  • nombre-de-atributo     es cualquier identificador válido.
  • Métodos
  • Los métodos son algo parecido a las funciones del lenguaje C /C++, pero en Java no se permiten colocar métodos fuera de la definición de clase . Con los métodos implementamos el comportamiento de los objetos.  
  • Hay varios tipos de métodos:
    • Métodos de instancia.  Son miembros de la clase y son métodos que pueden ser utilizados cuando se crea un objeto de la clase a la que pertenecen, esto es, cuando se crea una instancia de la clase.
    • Métodos de clase.   Son miembros de la clase y son métodos que pueden ser invocados sin necesitar crear una instancia de la clase, y los identificamos fácilmente porque tienen el modificador. STATIC
    • Métodos constructores.  Como veremos más adelante, son métodos con el nombre de la clase y que son invocados al instanciar un objeto o crear un ejemplar de la clase al que pertenecen con el operador new.
  • Métodos (Continuación)
  • La sintáxis de una simple declaración de un método es:
  •   [modificadorestipo-de-retorno nombre-método (lista-de-parámetros) [ throws claseExcepcion1,.., claseExcepcionN ]     {        cuerpo      }
  • Donde:
  • modificadores es opcional y puede ser uno más de las siguientes ocho palabras reservadas:
  • { static, abstract, final, native,  synchronized,  public , protected, private }
  • tipo-de-retorno es cualquier nombre de clase o una de los siguientes nueve palabras reservadas:
  • {  void, boolean, byte, char, short, int, long, float, double  }
  • nombre-método es cualquier identificador válido
  • lista-de-parámetros es una secuencia de declaraciones de parámetros
  • [ throws claseExcepcion1,.., claseExcepcionN ]  es una lista de posibles excepciones que en un momento dado el código del método puede lanzar.
  • Cuerpo es una secuencia de declaraciones de variables e instrucciones que son ejecutadas por el método cuando se le invoca. 
  • Métodos (Continuación)
  • Ejemplo:
  • public static void main(String args[]) throws IOException {    /* aquí van las sentencias del cuerpo */ }
  • Vamos a aprovechar el ejemplo para definir un concepto importante conocido como firma del método.
  • Firma de un método:   Es la definición del método, excluyendo el cuerpo, es algo parecido al concepto de función prototipo del lenguaje C.  En el ejemplo anterior, la firma del método es:
  • public static void main(String args[]) throws IOException  
  • El concepto es importante, porque la documentación de las API's de Java vemos listadas,  cientos de miles de firmas de métodos y las clases a los que pertenecen.
  • Creación de objetos
  • Objeto.  Un objeto es una cosa, generalmente extraída del vocabulario del espacio del problema o del espacio de la solución .
  • Todo objeto tiene:
  • Identidad (puede nombrarse o distinguirse de alguna manera de otros objetos )
  • Estado ( generalmente hay algunos datos asociados a él)
  • Comportamiento ( se pueden hacer cosas al objeto, y él puede a su vez puede hacer cosas a otros objetos)
  • Creación de Objetos.  Todo en Java se trata como un objeto. Se puede manipular objetos a través de handles (referencias, identificadores)
  • El handle o referencia no necesariamente está conectado a un objeto. Ejemplo:
  • String s;
  • Solo es creado la referencia pero hay que inicializarlo:
  • String s = “Curso de Java”;
  • Para conectar un handle o referencia a un objeto se usa la palabra llave new que es una palabra reservada de Java y significa mas o menos lo siguiente “creame un nuevo objeto de éste tipo”  o, " créame una nueva instancia o ejemplar de éste tipo" Ejemplo:
  • String s = new  String(“Curso de Java”);
  • El caso de objetos de la clase String es especial, porque puede crearse o instanciarse un objeto de esta clase sin el operador new, porque es una clase muy utilizada.
  • El efecto de crear un objeto con el operador new se traduce en la asignación de memoria para ese objeto en el heap de la RAM.
  • Creación de objetos (continuación)
  • Definición de clase
  • ● Una clase se define mediante
  • ―La palabra reservada class
  • ―Seguida por el nombre de la clase que vamos definir
  • ―el cuerpo de la clase estará rodeado de llaves ({ })
  • class Alumno
  • {
  • }
  • ● Una clase está compuesta de atributos y métodos
  • Atributos
  • ● Variables que definen el estado de un objeto
  • ― De tipo primitivo o de tipo referencias
  • class Alumno
  • {
  • String nombre;
  • String apellidos;
  • int añoDeNacimiento;
  • int númeroPersonal; //identificativo único
  • String grupo;
  • char horario; //’M’: mañana, ‘T’: tarde
  • ...
  • }
  • Alumno alumno1 = new Alumno();
  • alumno1.nombre = “Pedro”;
  • ● Definen el comportamiento del objeto, es decir, determinan los mensajes que puede recibir un objeto
  • ● Ejemplo:
  • class Alumno
  • {
  • ...
  • public String dameGrupo ( )
  • {
  • ...
  • }
  • public void ponGrupo(String nuevoGrupo)
  • {
  • ...
  • }
  • ...
  • }
  • Alumno alumno1 = new Alumno();
  • alumno1.ponGrupo(“7031-91”);
  • System.out.println(“El grupo de “ + alumno1.nombre + “ “ +
  • alumno1.apellidos + “ es el “ + alumno1.dameGrupo());
  • Métodos
  • Interfaz pública de una clase
  • ● La interfaz pública de una clase (y de un objeto) está formada por:
  • ― Sus atributos públicos (no debería haber, salvo que sean
  • constantes)
  • ― Sus métodos públicos – el usuario sólo necesita conocer la
  • signatura
  • Derechos de acceso
  • ● Java proporciona un mecanismo para definir distintos derechos de acceso tanto a la clase como a sus elementos (atributos y métodos)
  • 1. Acceso privado
  • 2. Acceso de paquete
  • 3. Acceso protegido
  • 4. Acceso público
  • Acceso privado
  • ● Se representa con la palabra reservada private
  • ● Los elementos privados sólo pueden ser usados dentro de la clase que los define
  • ―No son accesibles desde el exterior
  • ―Pero pueden ser accedidos por otro objeto de la misma clase
  • Acceso protegido
  • • Se representa con la palabra reservada protected
  • ● Estos elementos pueden ser usados en la clase que los define, en las de su paquete y en las que heredan de ella
  • Acceso público
  • • Se representa con la palabra reservada public
  • ● Se puede acceder a este elemento desde cualquier clase.
  • Acceso de paquete
  • Es el acceso por defecto, es decir, si no se utiliza ninguna palabra reservada
  • ― También llamado acceso amistoso
  • ● Los elementos son accesibles desde dentro del paquete que los define
  • Niveles de acceso
  • Elementos de clase (static)
  • ● Elementos estáticos de clase: Métodos y atributos que pertenecen a la clase
  • ― No se los invoca sobre un objeto concreto, sino que están disponibles siempre, sin necesidad de crear previamente un objeto de la clase
  • ― Precedidos por la palabra clave reservada static
  • Definición de métodos
  • visibilidad Tipo nombreMétodo (listaArgumentos)
  • {
  • // cuerpoMétodo
  • }
  • Visibilidad
  • ― Desde qué partes del programa se va a poder acceder al método.
  • Un ejemplo de identificador de visibilidad es public
  • Tipo
  • ― Tipo primitivo o clase del resultado del método
  • ― El resultado del método se define en la sentencia return
  • Lista de parámetros
  • ― Tipo y nombre de 0, 1 o varios parámetros pasados al método
  • ― Si son varios, van separados por comas
  • Cuerpo del método
  • ― Qué acciones se realizan al llamar a dicho método
  • class Alumno
  • {
  • String nombre;
  • String apellidos;
  • int añoDeNacimiento;
  • int númeroPersonal
  • String grupo;
  • char horario = ‘M’;
  • public String dameGrupo ()
  • {
  • return grupo;
  • }
  • public void ponGrupo(String nuevoGrupo)
  • {
  • grupo = nuevoGrupo;
  • }
  • // otras definiciones de métodos
  • }
  • Tipos devueltos
  • Nombres método
  • Lista de parámetros
  • Visibilidad
  • Cuerpo
  • Parámetros del método
  • ● Parámetros: datos que un método necesita para su ejecución
  • ● Permiten generalizar el comportamiento
  • int cuadrado()
  • {
  • return 10 * 10;
  • }
  • int cuadrado (int i)
  • {
  • return i*i;
  • }
  • ● Parámetros (parámetros formales):
  • ― Variables que se detallan en la cabecera del método
  • ― El ámbito de los parámetros es el cuerpo del método
  • ● Argumentos (parámetros reales)
  • ― Valores concretos que se pasan para esos parámetros en la llamada al método
  • Argumentos del método
  • ● Cualquier expresión del tipo del parámetro
  • 1. Valor literal
  • alumno1.ponNombre(“Pedro”);
  • 2. Variable
  • alumno1.ponNombre(nombreAlumno1);
  • 3. Operación
  • alumno1.ponNombre(“Pe” + finalNombre);
  • 4. Resultado de una llamada a método
  • alumno1.ponNombre(alumno3.dameNombre());
  • Paso de parámetros
  • ● En la llamada a un método, se copian los valores de los
  • argumentos en los parámetros
  • ― Es lo que se conoce en programación como paso por valor
  • ― Los cambios que el método haga sobre el parámetro no afectan
  • al valor original del atributo
  • ― Ejemplo:
  • void cambiaParametro (int i)
  • {
  • i++;
  • }
  • ● Si llamamos a este método:
  • int i = 1;
  • ejemplo.cambiaParametro(i);
  • System.out.println(i);
  • ● Imprimirá un 1.
  • Resultado de la llamada al método
  • ● Un método es ejecutado en un objeto receptor como reacción al mensaje mandado por un objeto llamante
  • ― El método puede devolver un resultado (respuesta al mensaje)
  • ● Se define en la sentencia return
  • ― Tras ejecutarse, el método termina
  • ● Tres formas básicas de terminar un método:
  • Escribiendo la palabra reservada return seguida del valor resultante
  • public String dameGrupo ()
  • {
  • return grupo;
  • }
  • 2. Para métodos que no devuelven resultados (tipo resultado void)
  • return;
  • 3. Para métodos que no devuelven resultados (tipo resultado void,
  • como en caso anterior) es posible suprimir la sentencia return.
  • La ejecución del método termina cuando se llega al final del
  • cuerpo del método (})
  • Resultado de la llamada al método
  • ● El valor resultado de la llamada al método puede usarse directamente en el programa llamante
  • ― Tipo del resultado compatible con el tipo de la variable asignada
  • String grupoAlumno1 = alumno1.dameGrupo();
  • ― O bien en cualquier lugar donde se espere un valor del tipo devuelto
  • System.out.println(alumno1.dameGrupo());
  • ● Método especial que se llama para crear un objeto
  • ● El objetivo del constructor suele ser inicializar el objeto
  • alumno1 = new Alumno();
  • ―con new se reserva la memoria necesaria
  • ―con el constructor Alumno() se inicializa el objeto
  • ―con el operador de asignación = se asigna la dirección del objeto a la referencia
  • Constructores
  • ● Caracteristicas:
  • ―mismo nombre que la clase
  • ―puede tener cero, uno o varios parámetros
  • ―no devuelve ningún resultado (en realidad, devuelve el propio objeto)
  • ● Sintaxis del constructor
  • visibilidad NombreClase (listaParámetros) throws ListaExcepciones
  • {
  • //cuerpo constructor
  • }
  • Constructor por defecto
  • ● Todas las clases necesitan al menos un constructor
  • ―Si el programador no define ningún constructor, el compilador crea un constructor por defecto
  • ● El constructor por defecto no tiene parámetros
  • ● El constructor por defecto inicializa los atributos
  • ―Numéricos a cero
  • ―De referencia a null
  • ―Booleanos a false
  • Cuándo definir un constructor
  • ● Cuando se dé al menos una de estas circunstancias
  • ― Se necesitan parámetros para el estado inicial
  • ― Construcción del objeto costosa y necesita código adicional
  • ― Las instancias deben crearse correctamente o no crearse en absoluto
  • ― Se requiere que el constructor no sea público
  • Sobrecarga de constructores
  • ● Se puede sobrecargar el constructor
  • ―Varios constructores en la misma clase, pero con distintos argumentos
  • ● Se ofrecen distintas opciones para crear el objeto
  • ―Por ejemplo, dependiendo de la información disponible en el momento de la creación
  • Ejemplo: Constructor
  • public class Coche
  • {
  • String matricula;
  • String fabricante;
  • String modelo;
  • String color;
  • public Coche (String m)
  • {
  • matricula = m;
  • }
  • // añadir un constructor que inicialice todos los atributos
  • }
  • public class PruebaCoche
  • {
  • public static void main (String[] args)
  • {
  • Coche c1 = new Coche (“3468 CXV”);
  • Coche c2 = new Coche (“4462 BIG”, “BMW”, “525i”, “Negro”);
  • Coche c3 = new Coche (); // Qué pasa en este caso?
  • }
  • }
  • Ejercicio: Constructores
  • ● Definir una clase Rectángulo que
  • ―Tenga dos atributos enteros, uno para cada lado
  • ―Tenga un constructor con dos parámetros que inicialice los atributos
  • ―Tenga un constructor con un parámetro para construir cuadrados
  • ● Definir una clase PruebaRectángulo que compruebe el correcto funcionamiento de los constructores
  • Recolector de basura
  • ● En inglés: garbage collection
  • ● Es necesario liberar la memoria dinámica (heap) que ya no se necesita
  • ● En Java no hay mecanismo explícitos para destruir objetos
  • ● El recolector de basura lo destruye si detecta que ya no se va a utilizar
  • ― Cuando ya no quedan referencias a un objeto


La base de datos está protegida por derechos de autor ©absta.info 2016
enviar mensaje

    Página principal