Programacion
  Unidad 5
 

UNIDAD 5



1.
                 Define el concepto de clase, ilustre su implementación y de 5 ejemplos de ellos.

 

Una clase es una agrupación de datos (variables o campos) y de funciones (métodos) que operan sobre esos datos.

 

public class Classname

{ ...    // definición de variables y métodos

}

 

Un objeto (instance) es un ejemplar concreto de una clase.

 

Las características de una clase son las siguientes:

 

1) Todas las variables y funciones de Java deben pertenecer a una clase.

 

2) Si una clase deriva de otra (extends), hereda todas sus variables y métodos.

 

3) Java tiene una jerarquía de clases estándar de la que pueden derivar las clases que crean los usuarios.

 

4) En Java no hay herencia múltiple.

 

5) En un fichero se pueden definir varias clases, pero en un fichero no puede haber más que una clase public.

 

6) Si una clase contenida en un fichero no es public, no es necesario que el fichero se llame como la clase.

 

7) Los métodos de una clase pueden referirse de modo global al objeto de esa clase al que       se aplican por medio de la referencia this.

8) Las clases se pueden agrupar en packages, introduciendo una línea al comienzo del fichero (package packageName;).

 

Una clase es un tipo especial de datos, y esta orientado a creación de objetos y que consta de unos miembros que pueden ser todas o funciones privadas o publicas.

Una clase es un tipo de dato que contiene uno o más elementos llamados dato miembro, y cero, una o más funciones que manipulan esos datos  (llamados función miembro). Una clase se puede definir con una estructura (struct), una unión (unión) o una clase (class).

La sintaxis de una clase es:
class nombre_clase
{
miembro_1;        //lista de miembros
miembro_2
miembro_3
    funcion_miembro_1( );      // funciones miembro conocidas
    funcion_miembro_2 ( );     //  funciones como métodos

 

 

 

 

2.                 Explique ampliamente que es un modificador de acceso, para que se utiliza y que tipos existen

 

Los modificadores de acceso determinan qué clases

pueden utilizar cierta característica.

Las características de una clase son:

La clase misma.

Sus variables.

Sus métodos y constructores.

 

Las únicas variables sobre las que se aplican los

modificadores de acceso son las variables de clase.

Las variables de los métodos no llevan modificadores de

acceso porque pertenecen únicamente al método.

 

Modificadores de Acceso

Los modificadores de acceso son:

public

private

protected

El único modificador de acceso permitido para una clase

no interna es public.

Una característica puede tener como máximo un

modificador.

Cuando una característica no tiene modificador de acceso

se toma un valor por defecto.

El valor por defecto no tiene un nombre estándar

(friendly, package o default).

 

Modificadores de Acceso:

 

Ejemplo, declaraciones permitidas:

class Algo { … }

public class Objeto { … }

private int i;

Set conjunto;

protected double metodo() { … }

Declaraciones no permitidas:

public protected int x;

default Objeto getObjeto() { … }

 

Modificadores de Acceso:

public

El modificador de acceso más permisivo

es public.

Cualquier clase, variable o método

publico se puede utilizar en cualquier

clase en Java.

Las aplicaciones Java deben declarar el

método main().

 

Modificadores de Acceso:

private

El modificador private es el más

restrictivo.

Una variable o método de tipo privado

sólo es accesible para las instancias

creadas por la misma clase.

 

Modificadores de Acceso:

default

Las clases, variables o métodos que no tienen

modificador de acceso toman un valor

llamado default.

El modificador de acceso default permite que

las características de una clase sean

accesibles para cualquier clase en el mismo

paquete.

Una clase que hereda de otra no tiene acceso

a las características default del padre si no se

encuentra en el mismo paquete.

 

Modificadores de Acceso:

protected

Las características que tienen el modificador

de acceso protected son más accesibles que

las default.

Únicamente los métodos y las variables se

pueden declarar como protected.

Las características de tipo protected de una

clase son accesibles desde las clases que

heredan.

Al igual que default, protected permite el

acceso a las clases del mismo paquete.

 

Modificadores de Acceso:

Resumen

Los modificadores de acceso en Java son:

public – una característica public es accesible para

cualquier clase.

protected – una característica protected puede ser

accedida desde una clase que hereda o desde

cualquier clase que pertenece al mismo paquete.

default – las características default son accesibles

para las clases del mismo paquete.

private – una característica private sólo es visible

para la clase a la cual pertenece

 

 

 

3.                 De los diferentes tipos de modificadores de acceso ilustre 5 ejemplos de aplicación para cada uno de ellos de manera independiente

 

class Punto {
    private int x , y ;
    static private int numPuntos = 0;

    Punto ( int a , int b ) {
        x = a ; y = b;
        numPuntos ++ ;
    }

    int getX() {
        return x;
    }

    int getY() {
        return y;
    }

    static int cuantosPuntos() {
        return numPuntos;
    }

 

Para comprobarlo, construye una clase con un método internal:

 

package internalTest

{

            import flash.util.trace

           

            public class HasInternalMethod

            {

                       function HasInternalMethod( )

                       {

                                   trace( "HasInternalMethod.constructor" );

                       }

                      

                       internal function internalMethod( )

                       {

                                   trace( "HasInternalMethod.internalMethod( )" );

                       }

            }

}

 

A continuación, en el mismo package, otra clase con un método público, que instancie la clase anterior, y que intente acceder al método internal de esa instancia:

 

package internalTest

{

            import flash.util.trace

           

            public class HasPublicMethod

            {

                       function HasPublicMethod( )

                       {

                                   trace( "HasPublicMethod.constructor" );

                       }

                      

                       public function publicMethod( )

                       {

                                   var internalInstance: HasInternalMethod = new HasInternalMethod( );

                                   internalInstance.internalMethod( );

                       }

                      

            }

           

}

una clase con un método protected:

 

 

 

package protectedTest

{

            import flash.util.trace

           

            public class HasProtectedMethod

            {

                       function HasProtectedMethod( )

                       {

                                   trace( "HasProtectedMethod.constructor" );

                       }

                      

                       internal function internalMethod( )

                       {

                                   trace( "HasProtectedMethod.internalMethod( )" );

                       }

                      

                       protected function superMethod( )

                       {

                                   trace( "HasProtectedMethod.superMethod" );

                       }

            }

}

 

 

 

 

 

 

4.                 Explique ampliamente en que consiste el concepto de encapsulamiento de la clase

 

Encapsulamiento de Clases

Definición previa: un paquete es una colección de clases que se encuentran en el mismo directorio.

Las clases permiten implementar tipos de datos abstractos. El problema que se presenta es que desde cualquier clase se puede accesar los campos de un objeto perteneciente a otra clase. Esto es una violación al principio de abstracción que dice que un tipo de datos abstracto sólo puede ser manipulado a través de las operaciones que se definen para éste.

La clase se encapsula encerrando entre un par de llaves los campos y los métodos de la clase.

Ejemplo:

public class Punto
{

// Campos

int x;
int y;

// Métodos

public Punto(int a, int b)
{

x = a;
y = b;

}

public int daX( )
{

return x ;

}

public int daY( )
{

return y ;

}

}

// De aquí en adelante se puede utilizar el nuevo tipo Punto para crear objetos.
// La creación de objetos debe hacerse dentro de una clase.

class Principal
{

static void Main( )
{

// Se crea el objeto centro de la clase Punto

Punto centro = new Punto(10,20);
System.Console.WriteLine("X = {0} n Y = {1} n", centro.daX(), centro.daY());

}

}

 

 

 

5.                 Ilustre 5 ejemplos diferentes donde usted utilice el encapsulamiento de la clase, explicando cual es la clase y cuales son los elementos que se están encapsulando

 

 

 

6.                 Explique ampliamente como se comunican los elementos que forman parte de un programa orientado a objeto

 

 

7.                 Define el concepto de método y explica ampliamente para que sirve y como se utiliza

 

Los métodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. La implementación de un método consta de dos partes, una declaración y un cuerpo. La declaración en Java de un método se puede expresar esquemáticamente como:

    tipoRetorno nombreMetodo( [lista_de_argumentos] ) {

        cuerpoMetodo

        }

En C++, el método puede declararse dentro de la definición de la clase, aunque también puede colocarse la definición completa del método fuera de la clase, convirtiéndose en una función inline. En Java, la definición completa del método debe estar dentro de la definición de la clase y no se permite la posibilidad de métodos inline, por lo tanto, Java no proporciona al programador distinciones entre métodos normales y métodos inline.

Los métodos pueden tener numerosos atributos a la hora de declararlos, incluyendo el control de acceso, si es estático o no estático, etc. La sintaxis utilizada para hacer que un método sea estático y su interpretación, es semejante en Java y en C++. Sin embargo, la sintaxis utilizada para establecer el control de acceso y su interpretación, es muy diferente en Java y en C++.

La lista de argumentos es opcional, tanto en Java como en C++, y en los dos casos puede limitarse a su mínima expresión consistente en dos paréntesis, sin parámetro alguno en su interior. Opcionalmente, C++ permite utilizar la palabra void para indicar que la lista de argumentos está vacía, en Java no se usa. Los parámetros, o argumentos, se utilizan para pasar información al cuerpo del método.

La sintaxis de la declaración completa de un método es la que se muestra a continuación con los items opcionales en itálica y los items requeridos en negrilla:

especificadorAcceso static abstract

    final native synchronized tipoRetorno nombreMetodo( lista_de_argumentos )

    throws listaEscepciones

especificadorAcceso, determina si otros objetos pueden acceder al método y cómo pueden hacerlo. Está soportado en Java y en C++, pero la sintaxis e interpretación es considerablemente diferente.

static, indica que los métodos pueden ser accedidos sin necesidad de instanciar un objeto del tipo que determina la clase. C++ y Java son similares en el soporte de esta característica.

abstract, indica que el método no está definido en la clase, sino que se encuentra declarado ahí para ser definido en una subclase (sobreescrito). C++ también soporta esta capacidad con una sintaxis diferente a Java, pero con similar interpretación.

final, evita que un método pueda ser sobreescrito.

native, son métodos escritos es otro lenguaje. Java soporta actualmente C y C++.

synchronized, se usa en el soporte de multithreading, que se verá también en este Tutorial.

lista_de_argumentos, es la lista opcional de parámentros que se pueden pasar al método

throws listaExcepciones, indica las excepciones que puede generar y manipular el método. También se verán en este Tutorial a fondo las excepciones en Java.

 

 

 

8.                 Tomando ejemplos de programación 5 programas diferentes, ilustre como funciona los métodos que se utilizan en cada programa

 

 

9.                 Explique ampliamente cuales son las reglas sintácticas (reglas para escribir correctamente las expresiones) que se utilizan para comunicarse a través de los métodos

 

Entregar las reglas gramaticales que describen otras categorías sintácticas del lenguaje Java.

Temas:

·                    Reglas sintácticas para la invocación de métodos y funciones.

·                    Reglas sintácticas para la creación de objetos.

·                    Ejercicio sobre archivos.

 

Invocación de métodos y funciones

Los operadores de Java (+ - * etc.) permiten escribir en forma cómoda las operaciones más frecuentes que uno pueda necesitar en un programa. Para otras operaciones menos frecuentes (como min, max, sqrt, etc.) existe una categoría sintáctica que se denomina invocación de función o método (Obs.: más adelante veremos que las funciones son también métodos).

Por ejemplo, en la siguiente instrucción, sqrt(...) es una invocación de función:

    double raiz= sqrt(b*b-4*a*c);

Las reglas sintácticas que describen lo que puede ser una invocación de función o método son las siguientes:

exp

-> ident ( args )

La invocación de una función

 

-> exp . ident ( args )

La invocación de un método

args

->

No hay argumentos

 

-> exp más-args

Hay al menos un argumento

más-args

->

No hay más argumentos

 

-> , exp más-args

Queda al menos un argumento adicional

El siguiente es el árbol sintáctico para max(a,1):

     max  (   a   ,   1           )
      |   |   |   |   |           |
    ident | ident | const         |
      |   |   |      |           |
         |  exp    exp más-args |
                     /       /
                 más-args     /
                  /          /
               args          /
                |           /
            ------+-----------
                 exp

Observe que la aparición de la categoría más-args a partir de nada se justifica con la regla que dice:

más-args

->

El árbol sintáctico para lect.readLine() es:

    lect  . readLine (      )
      |   |   |      |      |
    ident | ident    |      |
      |   |   |      |      |
     exp  |   |      | args |
            |      / /    /
         -----+-------------
             exp

Creación de objetos

La creación de un objeto mediante el operador new es una expresión. La regla sintáctica que permite este tipo de expresiones es:

exp

-> new tipo ( args )

En las reglas sintácticas colocamos en negritas las palabras que deben aparecer textualmente en el programa y colocamos en cursiva las categorías sintácticas y que por lo tanto deben ser reemplazadas por ``algo'' que aparece en el programa.

Un tipo es una categoría sintáctica que representa todos los tipos de Java: int, double, String, TextReader, etc.

Ejercicio: demuestre que new TextReader("datos.txt").close() es una expresión (construya su árbol sintáctico). Explique en palabras qué hace la expresión.


Ejercicio:

Escriba un programa que entregue la distancia entre Santiago y alguna ciudad de Chile. El diálogo debe ser el siguiente:

    Nombre de ciudad ? arica
    La distancia entre Santiago y Arica es 2030 kilómetros

Para obtener la distancia, Ud. dispone de un archivo "dist.txt" que contiene las distancias entre Santiago y las ciudades más importantes de Chile en el siguiente formato:

Arica:2030
Puerto Mont:1012
Valparaiso:109
...

Observe que el usuario ingresa arica en minúsculas y que la misma ciudad aparece en mayúsculas en el archivo. El programa debe ignorar este tipo de diferencias.

Si la ciudad solicitada por el usuario no aparece en el archivo, el programa debe desplegar el siguiente mensaje:

    Nombre de ciudad ? Mendoza
    La ciudad de Mendoza no se encuentra en mi base de datos

Solución:

    print("Nombre de ciudad ? ");
    String ciudadBusc= readLine();
    TextReader lect= new TextReader("dist.txt");
    int existe= 0;
    String linea= lect.readLine();
    while (!lect.eofReached() && existe==0) {
      FieldParser decod= new FieldParser(linea, ":");
      String ciudad= decod.readString();
      if (compare(lower(ciudad), lower(ciudadBusc))==0) {
        int dist= decod.readInt();
        println("La distancia entre Santiago y "+ciudad+" es "+dist+
                "kilometros");
        existe= 1;
      }
      linea= lect.readLine();
    }
    if (existe!=0)
      println("La ciudad de "+ciudadBusc+
              " no se encuentra en mi base de datos");
    lect.close();

Observación: La comparación se debe hacer ignorando la diferencia entre mayúsculas y minúscula. Por esta razón, se usó la función lower que traduce todo a letras minúsculas.

Si se encuentra la ciudad, no tiene sentido seguir leyendo el archivo. Por esta razón se agregó la variable existe. Esta variable permanece en 0 mientras no se haya encontrado la ciudad. Cuando se encuentra la ciudad se le asigna un 1, lo que se traduce en que el ciclo termina, puesto que no satisface la condición existe==0.

 

 

 

10.             Define el concepto de parámetro y explique ampliamente como se utiliza

Esta funcionalidad permite definir el tipo de pasaje de parámetros, pudiendo elegir entre uno de los siguientes valores: entrada (in), salida (out) o entrada/salida (inout). El valor por defecto será inout.

 

La definición del tipo de pasaje de parámetros permite, por un lado, una mejor especificación de la semántica de las interfaces, y por otro lado, permite optimizar el pasaje de parámetros de las aplicaciones de acuerdo a la arquitectura en la que éstas se implementan. En la mayoría de los lenguajes es más eficiente pasar por referencia que por valor. Pero en Java, por ejemplo, los parámetros solo se pueden pasar por valor, por lo que para lograr la funcionalidad de pasarlos por referencia es necesario hacer conversiones de parámetros, lo cual puede redundar en un overhead importante. Por otro lado, cuando se está ejecutando en forma distribuida (Java, C/SQL, DCOM, etc), la utilización de parámetros del tipo out tiene la ventaja de que no es necesario enviar dicho parámetro en la invocación. En cambio si los parámetros se definen de inout implica que hay que pasar todos los parámetros. Esto tiene como consecuencia que se envíen más bytes de los necesarios, lo cual es bastante inconveniente, especialmente  en entornos tales como Internet.

 

Sintaxis

regla Parm

 

En la regla parm se dispone de un nuevo indicador para especificar como será el pasaje de los parámetros. Ejemplo:

 

          parm( out:&par1, in:&par2, &par3)

 

En este ejemplo estamos indicando que el parámetro &par1 será de salida, el parámetro &par2 será de entrada, y el tercero (&par3) será de entrada/salida puesto que éste, es el valor por defecto.

 

Consideraciones Generales

Programas llamados como UDP/UDF

En los programas que son llamados con UDP o con UDF, el valor por defecto varía de generador en generador. En los generadores: Java, Visual Basic, Visual FoxPro, Fox Pro for Windows y Xbase, el valor por defecto es inout para todos los parámetros, comportamiento que puede ser modificado por el usuario mediante la definición del tipo de pasaje. Mientras tanto, en el resto de los generadores (Cobol, RPG, C/SQL) el valor por defecto es in para todos los parámetros, salvo el último que es de tipo out, y cualquier definición del tipo de pasaje, por parte del usuario, es ignorada por el generador.

Asignaciones a parámetros definidos como in

El especificador no dejará especificar un programa que asigne valores (en reglas/source/eventos) a parametros definidos como In.

 

Consideraciones

ü       No funciona el indicador in con parámetros del tipo Array.

ü       Un parámetro definido como In puede ser pasado como parámetro a otro programa donde esté definido como Out o InOut. La especificación no esta controlando este caso pero es considerado un error y será validado en futuras versiones.

 

 

 

11.             Tomando en cuenta el concepto de parámetro de 5 ejemplos de programas donde se utilizan los parámetros

 

 

12.             Define el concepto constructor y explique ampliamente para que sirve dentro  de un programa

Definición de constructores de una clase.

Cuando se construye un objeto es necesario inicializar sus variables con valores coherentes, imaginemos un objeto de la clase Persona cuyo atributo color de pelo al nacer sea verde, un estado incorrecto tras construir el objeto persona. La solución en los lenguajes orientados a objetos es emplear los constructores. Un constructor es un método perteneciente a la clase que posee unas características especiales:

Se llama igual que la clase.

No devuelve nada, ni siquiera void.

Pueden existir varios, pero siguiendo las reglas de la sobrecarga de funciones.

De entre los que existan, tan sólo uno se ejecutará al crear un objeto de la clase.

Dentro del código de un constructor generalmente suele existir inicializaciones de variables y objetos, para conseguir que el objeto sea creado con dichos valores iniciales.

Para definir los constructores se emplea la siguiente sintaxis:

[modifVisibilidad] nombreConstructor (listaParámetros) [throws listaExcepciones]

{

}

 

 

13.             Mediante 5 ejemplos de programación señale y explique el o los constructores utilizados

 

 

 

 

 

 

14.             Define el concepto de destructor y explique ampliamente para que sirve dentro de un programa

 

Constructores

Definicion: El constructor de una clase es un método estándar para inicializar los objetos de esa clase

Se invoca automáticamente cuando new crea un objeto de esa clase.

Los constructores se declaran en el momento de definir la clase.

class A {

  int x, y;

  A() { x=0; y=0; } // el constructor

  ...

}

 

A a= new  A();

a.Print(); // 0 0

El constructor puede tener parámetros. En este caso, se deben colocar los argumentos respectivos al crear el objeto:

class A {

  int x, y;

  A(int ix, int iy)

  { x=ix; y=iy; } // el constructor

  ...

}

 

A a= new A(1,2);

a.Print(); // 1 2

 

a= new A(); // error, hay que colocar

            // los argumentos

a.A(1,2);   // error, no se puede

            // invocar el constructor

Se pueden colocar varios constructores. Durante la creación de un objeto, se invoca aquel que calza con los argumentos dados:

class A {

  int x, y;

  A() { x=0; y= 0; }

  A(int ix, int iy)

  { x=ix; y=iy; }

  A(A from)

  { x= from.x; y= from.y; }

  ...

}

 

A a1= new A();

a1.Print();    // 0 0

A a2= new A(1,2);

a2.Print();    // 1 2

A a3= new A(a2);

a3.Print();    // 1 2

Un destructor es un método que se invoca automáticamente cuando el objeto se destruye. Java no posee destructores, porque tiene recolección de basuras. C++ posee destructores.

 

 

 

15.             Mediante 5 ejemplos de programación señale y explique el o los destructores utilizados

 

 
 
   
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis