Vista previa del material en texto
UNIVERSIDAD DE GUAYAQUIL FACULTAD DE INGENIERÍA INDUSTRIAL CARRERA DE INGENIERÍA EN SISTEMAS ASIGNATURA: PROGRAMACION ORIENTADA A OBJETOS PARALELO: SIN-S-MA-2-1 VAN20 DOCENTE: ING. JOSÉ CAICEDO SALAZAR GRUPO DELTA INTEGRANTES DEL GRUPO: ➢ MANCILLA DUMES JOSUÉ JEREMIT ➢ FREIRE SALAZAR JORGE LUIS ➢ LLORENTE MERA NAGELHY VICTORIA ➢ TORRES NARVÁEZ JOHN TORRES ➢ VILLACIS RAMOS VÍCTOR HUGO Introducción Todos los días, son empleados numerosos objetos en nuestras vidas, algunos de los cuales tienen ciertas características comunes que los hacen pertenecer a una categoría particular. Por ejemplo, John Davenport y Edna Smith son estudiantes en una universidad. Ambos tienen algunos atributos en común como el nombre, edad, número de identificación del estudiante, nombre de la universidad, carrera estudiando, estatus del estudiante, cursos registrados, calificaciones obtenidas, y así sucesivamente, que son comunes a cualquier estudiante. Aunque ellos comparten este conjunto de atributos, los valores de los atributos serán diferentes y específicos para cada persona. Similarmente, el carro de John y el de Edna pertenecen a una categoría llamada carro. Algunos de los atributos comunes a esta categoría son: número de placa del carro, fecha de fabricación, tipo de carro, etc. En un escenario orientado a objetos, John y Edna son objetos de la clase estudiante y sus carros son objetos de la clase carro. Clases y Objetos Una clase es una entidad auto contenida que provee una plantilla (framework) para definir atributos y comportamiento encontrados comúnmente en objetos de software pertenecientes a un tipo en particular. Los atributos se representan como variables y el comportamiento como métodos en una clase Java. Cualquier instancia creada a partir de la plantilla se denomina un objeto. El proceso a través del cual una instancia (objeto) se crea se llama instanciación. Una vez modelada la clase, se pueden crear cualquier número de objetos de ella. Para crear un objeto de la clase, se necesita un constructor. Un constructor es un método (un método es similar a una función en C o C++), que tiene el mismo nombre de la clase. En el ejemplo anterior, se puede usar el método Estudiante() para crear un objeto de la clase Estudiante, llamado estudiante. El atributo nombre de este objeto será el nombre de estudiante Edna Smith. El código Java que permite hacer esto se muestra a continuación: Estudiante estudiante = new Estudiante(“Edna Smith”); Estructura de una Clase Java Una clase Java consiste de una sentencia package, sentencia import, y una definición de clase. Puede haber más de una sentencia import en el mismo programa Java. import NombreClase; Las sentencias import son seguidas por la definición de la clase. De acuerdo a la sintaxis general de una clase, se requiere sólo la palabra reservada class seguida por el nombre de la clase. Miembros de una Clase Java Una clase Java tiene variables miembro y métodos miembro. Una clase Java usa modificadores de acceso para otorgar permiso a otras clases para acceder a una variable o método en particular. Un modificador de acceso especifica el acceso a una a variable, método o clase Variables Las variables disponibles en una clase pueden ser de varios tipos, son estos, variables de instancia, variables de clase, variables final, variables transient y variables volatile. Variables de Instancia Algunas variables tienen diferentes valores para diferentes instancias de la clase. Estas son llamadas variables de instancia. Variables de Clase Estas variables se denominan variables de clase. Las variables de clase a veces se les llaman variables static. Sólo habrá una copia de una variable de clase en la memoria independientemente del número de instancias creadas de la clase. Así si el valor es cambiado en alguna instancia, se reflejará en todas las instancias de la clase. Se usa el modificador static para declarar que una variable es una variable de clase. Para tener acceso a una variable de clase no se necesita crear una instancia de la clase. Se puede acceder a una variable de clase directamente por su nombre junto con el nombre de la clase. Variables Volátil (Volatile) El compilador Java, en tiempo de compilación, realiza muchas optimizaciones para mejorar el desempeño de un programa. El modificador volatile previene al compilador de realizar ciertas optimizaciones sobre una variable miembro. Le dice al compilador que el valor de la variable puede ser cambiado inesperadamente por otras partes del programa. Esta variable miembro se denomina variable volatile. El compilador, no realiza optimizaciones en estas variables. El modificador volatile se coloca antes de la declaración de la variable. Variables Transitorias (Transient) El modificador transient se usa en una declaración de variable para especificar al sistema de tiempo de ejecución de Java que la variable no debe ser serializada. Una variable que no puede ser serializada y que tiene especificado el modificador transient, se denomina variable transient La sintaxis para declarar variables transient en Java es la siguiente: transient int var = 100; 4.5 Variables Final El modificador final indica que el miembro tiene un valor constante. Un miembro con un valor constante no puede ser modificado. Este tipo de variable se denomina una variable final. En caso de que se trate de cambiar el valor de una variable final en el programa, entonces se generará un error en tiempo de compilación. Como se muestra aquí: final float PI = 3.14; Declaración de Variables Miembro Aquí, nombre es declarada como una variable miembro, porque la declaración se hace dentro del cuerpo de la clase y fuera de cualquier método o constructor de la clase. El nombre de la variable miembro es nombre, y su tipo de dato es String. El modificador private indica que nombre como una variable sólo puede ser accedida dentro de los constructors y métodos de la clase Estudiante. Métodos Los métodos en Java se usan para tener acceso y manipular las variables. Usualmente, los métodos se usan para asignar, recuperar, o cambiar los valores almacenados en una variable. La definición de métodos establece el tipo y nombre de los parámetros de entrada. Los parámetros pasan a ser variables locales del método, también el método puede declarar otras variables locales dentro de ella public void hacerCualquierCosa() { MiClase mc; mc.getNombre(); // Error mc = new MiClase(); mc.getNombre(); // OK También se puede combinar el uso de parámetros variables con parámetros no variables, con la restricción de que la declaración del parámetro variable solo se puede hacer al final de la lista de argumentos del método. Se presenta un ejemplo de lo dicho anteriormente: public void hacerCualquierCosa(String a, int … args) { System.out.println("a: " + a); for (int arg : args) System.out.println(arg); } Métodos de Instancia Ciertos métodos definidos en una clase operan en variables de instancia de la instancia actual de una clase. Ellos también pueden tener acceso a las variables de clase de esa clase. Estos métodos se denominan métodos de instancia. Las siguientes variables y métodos pueden ser accedidos por un método de instancia: • Variables de instancia. • Variables de clase. • Otros métodos de instancia. • Métodos de clase. Un método setter se usa para asignar valor a variables privadas. Los métodos setter se inician con la palabra set. La Figura 1.10 muestra como el método setter se usa para asignar valor a la variable nombre. public void setNombre(String nuevoNombre){ nombre = nuevoNombre; } Métodos de Clase Otros métodos definidos en la clase operan solo en variables de clase. Se pueden invocar éstos métodos directamente usando el nombre de la clase sin necesidadde crear una instancia. Estos métodos se conocen como métodos de clase o métodos estáticos. Por ejemplo, un método de clase miMetodoDeClase() de MiClase puede ser invocado como: MiClase.miMetodoDeClase() Un método de clase no puede acceder a variables de instancia o métodos de instancia. Acceder a variables o métodos no estáticos desde un método estático genera un error en tiempo de compilación, aunque un método de clase puede ser accedido a través de una instancia. La librería Math y las clases envolventes (wrapper) tienen varios métodos estáticos. La Figura 1.11 muestra el uso del método estático parseInt definido en la clase Integer. Cuando un usuario inicia una aplicación, algún código debe ser ejecutado. Sin una referencia a objetos, no habrá código a ser ejecutado. Java supera esto proveyendo el método main, que es un método estático. Este método estático main es independiente de un objeto. Dentro del método main, otros objetos pueden ser instanciados. A continuación se aprenderá a cómo usar los métodos de clase para acceder a la clase. Uso de Métodos de Clase para Acceder a la Clase Cuando una declaración de un método tiene el modificador static, indica que el método es un método de clase y no un método de instancia. Un método de instancia solamente se puede usar cuando se crea un objeto. Un método de clase se puede usar independientemente del objeto. Si el constructor de una clase se declara como private, no se puede crear un objeto de la clase. En este caso, se puede acceder a métodos estáticos para usar los métodos y variables disponibles en la clase. Sea el Ejemplo 1.1, que muestra como los métodos estáticos se pueden usar en un programa Java. Ejemplo 1.1 El siguiente código muestra el uso de métodos estáticos. El código Java comienza aquí... 1. /*Definicion de la clase StaticEjemplo comienza aqui*/ 2. public class StaticEjemplo { 3. static int n; 4. 5. /*El metodo agregar comienza aqui */ 6. static public void agregar(int j, int k) { 7. n = j + k; 8. System.out.println(n); 9. }/* El metodo agregar termina aqui */ 10. 11. /*El metodo main comienza aqui */ 12. public static void main(String[] args) { 13. agregar(53, 74); 14. }/* El metodo main termina aqui */ 15. }/*Definicion de la clase StaticEjemplo termina aqui*/ La sintaxis para declarar variables transient en Java es la siguiente: transient int var = 100; Una clase es una entidad auto contenida que provee un framework para definir atributos y comportamiento encontrados comúnmente en objetos de software pertenecientes a un tipo en particular. Una vez modelada la clase, se pueden crear cualquier número de objetos de ella. Para crear un objeto de la clase, se necesita un constructor. Un constructor es un método, que tiene el mismo nombre de la clase. Cuando se quiere usar una librería de funciones escritas en otro lenguaje como C++, se usa el modificador native para especificar que la implementación de este método no fue hecha en Java. En un ambiente multihilos, se pueden usar los modificadores de acceso de Java para proteger las variables y métodos de una clase de ser accedidos sin garantía por parte de otras clases. Un constructor se usa esencialmente para inicializar un nuevo objeto creado de un tipo en particular. Se puede identificar fácilmente el constructor y diferenciarlo de otros métodos en la clase porque el constructor tiene el mismo nombre de la clase. Java permite tener tantos constructores como se requiera para una clase, la única diferencia será en el número o el tipo de argumentos para una clase. El modificador public no coloca ninguna restricción en las variables y métodos de una clase. Cuando las variables y métodos de una clase son declarados como public, los objetos de cualquier clase pueden accederlos. La clase que esta haciendo el acceso no necesita ser una subclase de la clase accedida o estar presente en el mismo paquete que la clase accedida. Una clase sin ninguna relación, que está en un paquete diferente, puede también acceder a variables y métodos public de una clase. Se debe tener cuidado antes de declarar una variable o método como public para asegurar que no habrá ningún acceso malicioso por parte de un objeto de una clase externa, que pueden colocar a los objetos de la clase accedida en un estado inconsistente. Considere el Ejemplo 1.2, que ilustra el uso de variables y métodos public. La clase ClaseNoRelacionada no tiene ninguna relación con (no es una subclase de) la clase PublicEjemplo. A pesar de esto, se puede acceder a la variable y al método public definidos en la clase PublicEjemplo. El Modificador de Acceso El modificador de acceso package se usa cuando no se especifica ni public, ni protected, ni private como nivel de acceso. Si no se especifica el nivel de acceso de una variable o un método o una clase usando un modificador de acceso, entonces, por defecto, el nivel de acceso se asume como package. Esto significa que todas las clases que están presentes en el mismo paquete pueden acceder a las variables y métodos de la clase accedida. Un paquete es similar a un módulo. Ada fue uno de los primeros lenguajes en introducir el concepto de un paquete en los lenguajes de programación. El Modificador de Acceso El modificador de acceso private se usa para proteger información muy confidencial. Puede haber ocasiones cuando no se quiere que métodos o variables de una clase en particular accedan a ciertas variables o métodos de otra clase específica. Usando variables y métodos privados en una clase se provee la máxima protección. Constructores de una Clase Un constructor se usa esencialmente para inicializar un nuevo objeto creado de un tipo en particular. Se puede identificar fácilmente el constructor y diferenciarlo de otros métodos en la clase porque el constructor tiene el mismo nombre de la clase. Los constructores también son métodos, pero están definidos para realizar la tarea de inicialización al momento de creación de objetos. Todas las clases en Java tienen al menos un constructor. Si el programador no define ningún constructor para una clase, entonces la clase tendrá un constructor por defecto creado por el sistema de tiempo de ejecución de Java. El constructor por defecto no acepta ningún argumento. Tiene una implementación vacía y no realiza nada. Java permite tener tantos constructores como se requiera para una clase, la única diferencia será en el número o el tipo de argumentos para una clase. Esto se denomina sobrecarga del constructor, que será discutida en detalle en la próxima sección. Sobrecarga de Método En la sección anterior se vio que más de un constructor puede ser creado para una clase. De manera similar, Java permite tener dos o más métodos con el mismo nombre dentro de la misma clase. Como con los constructores, los métodos sobrecargados deben también tener un número diferente de parámetros o diferentes tipos de datos en los parámetros. Esta característica de Java se llama sobrecarga de métodos. Ésta es una forma de lograr polimorfismo en Java. El compilador detectará un error en tiempo de compilación si dos métodos en una clase tienen el mismo nombre y el mismo número y tipo de parámetros. Los métodos sobrecargados pueden tener diferentes tipos de datos de retorno. Pero si la diferencia entre dos métodos es sólo en cuanto a sus tipos de retorno, el nombre, número, y tipo de argumentos aceptados por el método, y el orden en el cual son aceptados, son iguales, el compilador no distinguirá entre los dos métodos. Si dos métodos son diferentes solo en sus tipos de retorno, esto no se considera una sobrecarga de métodos. Sin embargo, si existen dos métodos que aceptan el mismo número de argumentos y el mismo tipo de argumentos, pero difieren en el orden de los tipos de datos aceptados por los dos métodos, entonces sí se considera una sobrecarga de métodos.