La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Programación Orientada a Objetos"— Transcripción de la presentación:

1 Programación Orientada a Objetos
Unidad 2 Clases y Objetos Universidad de Chile Departamento de Ciencias de la Computación Profesor: Nelson Baloian

2 Temario Clases Objetos Campos Métodos Encapsulamiento Propiedades
Instanciación Constructores

3 OOP En Object-Oriented Programming (OOP), o Programación Orientada a Objetos, un programa está hecho de clases, con sus campos y métodos La creación de un programa involucra ensamblar objetos y hacerlos interactuar entre ellos

4 UML Unified Modeling Language es el lenguaje o notación estándar para Análisis y Diseño Orientados a Objetos Creado por Rational ( y mantenido por OMG ( En el curso, se usará UML para describir los conceptos introducidos

5 Tipos de Datos En Java existen 2 categorías de tipos de datos:
Primitivos: boolean, char, byte, short, int, long, float, double Referencias: clases, interfaces, arreglos Un objeto es una instancia de una clase o de un arreglo Una variable es un espacio de memoria que puede almacenar: Tipo de la variable Puede almacenar Primitivo Un valor del tipo Clase El valor null, o una referencia a una instancia de la clase o de alguna subclase de la clase Interfaz El valor null, o una referencia a una instancia de alguna clase que implemente la interfaz Arreglo El valor null, o una referencia a un arreglo de elementos del tipo del arreglo

6 Tipos de Datos Primitivos
Valores boolean true o false char Carácter Unicode (de 16 bits) byte Entero de 8 bits (con signo) short Entero de 16 bits (con signo) int Entero de 32 bits (con signo) long Entero de 64 bits (con signo) float Número flotante de 32 bits double Número flotante de 64 bits

7 Clases y Objetos In object-oriented programming, a class is a construct that is used as a blueprint (or template) to create objects of that class. This blueprint describes the state and behavior that the objects of the class all share. An object of a given class is called an instance of the class. The class that contains (and was used to create) that instance can be considered as the type of that object, e.g. an object instance of the "Fruit" class would be of the type "Fruit". A class usually represents a noun, such as a person, place or (possibly quite abstract) thing - it is a model of a concept within a computer program. Fundamentally, it encapsulates the state and behavior of the concept it represents. It encapsulates state through data placeholders called attributes (or member variables or instance variables); it encapsulates behavior through reusable sections of code called methods Wikipedia

8 Curso de Java Visión Global Clases y Objetos Una clase describe un grupo de objetos que comparten propiedades y métodos comunes Una clase es una plantilla que define qué forma tienen los objetos de la clase Una clase se compone de: Información: campos (atributos, propiedades) Comportamiento: métodos (operaciones, funciones) Un objeto es una instancia de una clase “Juan Pérez” String Ventana (tiempo de ejecución) Ventana (tiempo de diseño) Juan Pérez Empleado La Moneda Casa Sodimac Empresa Objeto Clase 8

9 Definición de una Clase
class Circulo { // campos // métodos // constructores // main() }

10 Campos Los objetos almacenan información en sus campos
Existen dos tipos de campos: de instancia y static (de clase) Campos de instancia Hay una copia de un campo de instancia por cada objeto de la clase El campo de instancia es accesible a través del objeto al que pertenece Campos static (de clase) Hay una única copia de un campo static en el sistema (equivalente a lo que en otros lenguajes es una variable global) El campo static es accesible a través de la clase (sin necesidad de instanciar la clase)

11 Campos class Circulo { // campos double radio = 5; String color;
radio y color son variables de instancia, hay una copia de ellas por cada objeto Circulo class Circulo { // campos double radio = 5; String color; static int numeroCirculos = 0; static final double PI = ; // métodos // constructores // main( ) } numeroCirculos y PI son variables static, están sólo una vez en memoria; PI además es constante (final): no puede modificarse

12 Curso de Java Visión Global Acceso a Campos Acceso a variables de instancia: se utiliza la sintaxis "objeto." Circulo c1 = new Circulo(); c1.radio = 5; c1.color = "rojo"; // si c1 es null, // se genera una excepción NullPointerException Acceso a variables static: se utiliza la sintaxis "clase." Circulo.numeroCirculos++; System.out.println(Circulo.PI); 12

13 Curso de Java Visión Global Métodos Instrucciones que operan sobre los datos de un objeto para obtener resultados Tienen cero o más parámetros Pueden retornar un valor o pueden ser declarados void para indicar que no retornan ningún valor Pueden ser de instancia o static: Un método de instancia se invoca sobre un objeto de la clase, al cual tiene acceso mediante la palabra this (y sus variables de instancia son accesibles de manera directa) Un método static no opera sobre un objeto de la clase, y la palabra this no es válida en su interior Sintaxis [static] <tipo retorno> <nombre método> (<tipo> parámetro1, ...) { // cuerpo del método return <valor de retorno>; } 13

14 Métodos class Circulo { // campos double radio = 5; String color;
Método de instancia, tiene acceso directo a las variables de instancia del objeto sobre el que se invoca class Circulo { // campos double radio = 5; String color; static int numeroCirculos = 0; static final double PI = ; // métodos double getCircunferencia() { return getCircunferencia(radio); } static double getCircunferencia(double r) { return 2 * r * PI; // constructores // main( ) Método static, no tiene acceso directo a variables de instancia

15 Sobrecarga (Overload) de Métodos
Métodos de una clase pueden tener el mismo nombre pero diferentes parámetros Cuando se invoca un método, el compilador compara el número y tipo de los parámetros y determina qué método debe invocar Firma (signature) = nombre del método + lista de parámetros Ejemplo: class Cuenta { public void depositar(double monto) { this.depositar(monto, "$"); } public void depositar(double monto, String moneda) { // procesa el depósito

16 Curso de Java Visión Global Acceso a Métodos Acceso a campos y métodos de instancia: se utiliza la sintaxis "objeto." Circulo c1 = new Circulo(); c1.radio = 5; c1.color = "rojo"; double d = c1.getCircunferencia(); // Si c1 es null, // se genera una excepción NullPointerException; Acceso a campos y métodos static: se utiliza la sintaxis "clase." Circulo.numeroCirculos++; int n = Circulo.getNumeroCirculos(); System.out.println(Circulo.PI); 16

17 Sobrecarga de Operadores en .NET
.NET permite programar los operadores, como métodos static llamados "operator X", donde X es el nombre o símbolo del operador Operadores unarios tienen un parámetro; operadores binarios tienen dos parámetros Uno de los parámetros debe ser del mismo tipo que la clase o estructura que declara el operador public class Matriz { public static Matriz operator + (Matriz m1, Matriz m2) ... }

18 Sobrecarga de Operadores en .NET

19 Sobrecarga de Operadores en .NET

20 Encapsulamiento Gady Booch define al encapsulamiento “the process of compartmentalizing the elements of an abstraction that constitute its structure and behavior; encapsulation serves to separate the contractual interface of an abstraction and its implementation” La clase es el espacio donde se empaquetan atributos y métodos

21 Ocultamiento de la Información
Information hiding is the principle of segregation of design decisions in a computer program that are most likely to change, thus protecting other parts of the program from extensive modification if the design decision is changed. The protection involves providing a stable interface which protects the remainder of the program from the implementation (the details that are most likely to change). Wikipedia Beneficios Seguridad en el código: sólo los métodos de la clase pueden alterar el estado del objeto La implementación interna puede ser modificada sin afectar el código de la aplicación

22 Modificadores de Acceso
Curso de Java Visión Global Modificadores de Acceso Nivel de acceso para miembros de clases (campos, métodos, y clases anidadas) Public: miembro es accesible en cualquier lugar en que la clase sea accesible Protected: miembro es accesible por subclases y clases del mismo package Package (default): miembro es accesible por clases del mismo package Private: miembro es accesible sólo al interior de la clase Nivel de acceso para clases e interfaces Public: clase/interfaz es accesible globalmente Package (default): clase/interfaz es accesible por clases del mismo package 22

23 Modificadores de Acceso
class Circulo { // campos private double radio = 5; private String color; private static int numeroCirculos = 0; public static final double PI = ; // métodos // constructores // main( ) } Recomendación: los campos siempre deben ser privados (a menos que sean constantes)

24 Propiedades En Java, las propiedades se definen por la existencia de métodos getter y setter: class Circulo { void setRadio(double radio) { ... } double getRadio() { ... } double getCircunferencia() { ... } } Las propiedades pueden basarse en el uso de campos o no: la clase Circulo puede tener un campo radio, pero probablemente no tenga un campo circunferencia Las propiedades de una clase pueden ser determinadas en ejecución mediante reflection (lo que es utilizado por frameworks como JSP, JSF, JPA) Propiedad radio (read-write) Propiedad circunferencia (read-only)

25 Propiedades en .NET .NET provee un manejo de propiedades más estructurado que el de Java:

26 Identificación de Clases
Se han realizado diversas proposiciones para apoyar el proceso de identificación de clases: Realizar un análisis gramatical de los requerimientos del sistema: los sustantivos pueden corresponder a clases y atributos, los adjetivos a atributos, los verbos a métodos Considerar entidades tangibles (auto, factura), roles (socio, alumno), interacciones (reunión), ubicaciones (sucursal), unidades organizacionales (empresa), etc. Determinar las responsabilidades del sistema, y asignar estas responsabilidades a clases RUP: definir una clase de control por cada caso de uso, una clase de interfaz (boundary) por cada par {caso de uso, actor}, y clases de entidad según se requiera Actor 1 Actor 2

27 Declaración de Variables
Curso de Java Visión Global Declaración de Variables La definición de una clase crea un tipo de datos Variables de este tipo se declaran: Circulo c1; Una declaración de una variable de una clase no crea un objeto; crea una variable que contiene una referencia a un objeto, sin crear al objeto en sí .NET soporta estructuras (struct), además de clases; las estructuras se crean automáticamente en memoria con la declaración (se manejan de manera directa, no mediante referencias) 27

28 Instanciación y Referencias
Los objetos se crean con el operador new, y se manejan mediante referencias Los objetos se crean en el área de memoria dinámica conocida como el heap Una referencia contiene la dirección de un objeto (es similar a los punteros de otros lenguajes) Una asignación entre objetos es una asignación de referencias Circulo c1 = new Circulo(); Circulo c2 = c1; Memoria Stack Heap c1 c2

29 Paso de Parámetros En Java el paso de parámetros se realiza "por valor" Argumentos de tipos primitivos Si un método modifica el valor de un parámetro, este cambio sólo ocurre al interior del método; al retornar el método, se mantiene el valor original Argumentos de tipo referencia (objetos) Al retornar el método, la referencia pasada como parámetro sigue referenciando al mismo objeto; sin embargo, los campos del objeto podrían haber sido modificados por el método

30 Constructores Un constructor es un método especial invocado para instanciar e inicializar un objeto de una clase Invocado con la sentencia new Tiene el mismo nombre que la clase Puede tener cero o más parámetros No tiene tipo de retorno, ni siquiera void Un constructor no público restringe el acceso a la creación de objetos Si la clase no tiene ningún constructor, el sistema provee un constructor default, sin parámetros Si la clase tiene algún constructor, debe usarse alguno de los constructores definidos al instanciar la clase (el sistema no provee un constructor default en este caso)

31 Ejemplo class Circulo { ... // constructores public Circulo() { }
Curso de Java Visión Global Ejemplo class Circulo { ... // constructores public Circulo() { } public Circulo(double r) { radio = r; void f() { Circulo c = new Circulo(30); 31

32 Invocación entre Constructores
La palabra this puede ser utilizada en la primera línea de un constructor para invocar a otro constructor class Circulo { private double radio; private static int numeroCirculos = 0; Circulo(double radio) { this.radio = radio; Circulo.numeroCirculos++; } Circulo() { this(10); // radio default: 10

33 Inicialización Static
Es posible definir bloques de inicialización static al interior de una clase, que se ejecutan en la primera ocasión en que se realiza una referencia a la clase public class Log { private static DataSource datasource; static { try { datasource = ...; } catch (Exception e) { ... } En .NET existe un constructor static, equivalente a la inicialización static de Java

34 Curso de Java Visión Global Garbage Collection Cuando no quedan en el programa referencias a un objeto, el espacio que él ocupa puede ser reclamado por un "garbage collector" (recolector de basura) Uno no elimina explícitamente objetos (no existe el delete de C++) Entorno seguro (no hay punteros a basura) Circulo c1 = new Circulo(); Circulo c2 = new Circulo(); c1 = c2; El primer círculo no es eliminado de memoria al perderse su referencia, sino cuando la JVM decide invocar al garbage collector X c1 c2 34

35 Resumen Una clase es una plantilla a partir de la cual se instancian objetos Los objetos contienen información (en campos de instancia y static) y comportamiento (en métodos de instancia y static) Los miembros de instancia se utilizan con la sintaxis "objeto." Los miembros static se utilizan con la sintaxis "clase." Una clase puede tener varios métodos con el mismo nombre (sobrecarga), siempre que tengan diferentes parámetros

36 Resumen Para instanciar una clase (crear un objeto) se utiliza el operador new Los constructores son métodos especiales invocados al instanciar una clase Los objetos se manejan a través de referencias La palabra this representa una referencia al objeto sobre el cual se invoca un método de instancia Los modificadores de acceso controlan quién tiene acceso a los miembros de una clase


Descargar ppt "Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google