FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS PROGRAMACION
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS PROGRAMACION I / 2019 ING. ASENCIO
PROGRAMACION ORIENTADA A OBJETOS • La Programación Orientada a Objetos (POO) es un paradigma de programación que se basa en modelar objetos, sus características, su funcionamiento y sus relaciones. • Es una forma de diseño y una metodología de desarrollo de software. Ing. Asencio 2019
PROGRAMACION ORIENTADA A OBJETOS • La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de programación. Ing. Asencio 2019
COMO SE PIENSA EN TERMINOS DE OBJETOS Es muy parecido a cómo lo haríamos en la vida real. Por ejemplo, si pensamos en un carro, diríamos que el carro es el elemento principal; que tiene una serie de características como el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, acelerar, frenar o parar. Ing. Asencio 2019
CLASES • Una Clase es una definición que agrupa características similares y comportamiento común de una entidad, ya sea del mundo real o virtual. (futuros objetos). • Se puede ver como una plantilla o un molde que define objetos, estos van a tener la misma estructura y el mismo comportamiento. Ing. Asencio 2019
CLASES • Una clase por lo tanto es una definición de una categoría de objetos. • Esta definición describe las características y operaciones fundamentes de los objetos que pertenecen a dicha clase: atributos y métodos. • Entonces, podemos decir que un objeto carro pertenece a una clase automóvil (carros, camionetas, camiones, ………. ) Ing. Asencio 2019
CLASES • En C# una clase puede tener los siguientes miembros: • Campos de datos o atributos: • - Constantes(campos de solo lectura) y • - Variables • Declaraciones: • Constructores • propiedades y • métodos. Ing. Asencio 2019
REPRESENTACIÓN GRÁFICA (UML) Ing. Asencio 2019
OBJETOS • Un objeto es una colección de datos y una serie de rutinas, llamadas métodos, que pueden manipular estos datos. • Los objetos tienen un estado (atributos) y un comportamiento (métodos) • Los objetos representan cosas físicas o abstractas. • Ejemplos de objetos: un estudiante, un círculo, un automóvil, una cuenta corriente, …. Ing. Asencio 2019
OBJETOS • Los objetos poseen: • Atributos que lo definen (campos de datos). • Son las características individuales que diferencian un objeto de otro. • Métodos que definen lo que hacen (Comportamientos ) • son las operaciones (acciones o funciones) definidas para los objetos Ing. Asencio 2019
GRAFICAMENTE Objeto Campo de dato 1 Campo de dato 2 Método 1 Método 2 Ing. Asencio 2019
EJEMPLO Campo de dato: radio Objeto círculo Método: Calcular area Método: Calcular perimetro Ing. Asencio 2019
• El campo de datos radio, es el atributo que caracteriza el objeto círculo. • El comportamiento (métodos) del objeto círculo permite calcular su área y su perímetro. Ing. Asencio 2019
Ing. Asencio 2019
PROGRAMACION ORIENTADA A OBJETOS Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas, en términos de objetos, atributos, propiedades, métodos y otras técnicas como: Herencia, Abstracción, Polimorfismo, Encapsulamiento y Reutilización de Código. Ing. Asencio 2019
COMO SE PIENSA EN TERMINOS DE OBJETOS Recordemos nuestro ejemplo del carro, decíamos que este tiene una serie de características como el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como ponerse en marcha, acelerar, frenar o parar. Ing. Asencio 2019
COMO SE PIENSA EN TERMINOS DE OBJETOS • Pues en un esquema POO el carro sería el objeto, las características serían los atributos o campos de dato como el color o el modelo y las funcionalidades serían los métodos asociadas como ponerse en marcha, acelerar, frenar o parar. Ing. Asencio 2019
COMO SE PIENSA EN TERMINOS DE OBJETOS • La idea fundamental de la orientación a objetos es combinar (encapsular) en una sola unidad tanto los datos como las funciones que operan (manipulan) sobre ellos. Ing. Asencio 2019
• Al diseñar una clase, no se crea un objeto. • Un objeto es una instancia (Ejemplar) de la clase y, por consiguiente, puede haber muchos objetos de la misma clase. • La creación de una variable específica de un tipo particular de clase se conoce como instanciación (creación de instancias) de esa clase. Ing. Asencio 2019
• Una clase tiene un nombre y especifica los miembros que pertenecen a ella. • Una vez que se define una clase, el nombre de la misma se convierte en un nuevo tipo de datos y se puede utilizar para: • - Declarar variables de ese tipo y • - Crear objetos de ese tipo. Ing. Asencio 2019
Las clase de declaran con el siguiente formato: class Nombre { // Cuerpo de la clase } El cuerpo de la clase define los miembros. Todos los miembros de la clase deben tener nombres distintos, excepto en el caso de sobrecarga de métodos. • Los métodos sobrecargados, es decir, definidos mas de una vez deben tener una lista de argumentos diferentes. Ing. Asencio 2019 • •
En el siguiente ejemplo, se define una clase de nombre Circulo que se utilizará para construir objetos del tipo Circulo. class Circulo { double radio; public double Calcular. Area() { return radio * 3. 1416; } } Ing. Asencio 2019
CONSTRUCTORES DE INSTANCIA • Un constructor de instancia es un tipo especial de método que permite inicializar una instancia de una clase a valores definidos por sus datos. • Se ejecutan automáticamente al crear una instancia de clase. • El constructor tiene exactamente el mismo nombre de la clase a la que pertenece. Ing. Asencio 2019
• Si una clase no tiene constructores, se utiliza un constructor por omisión o constructor por defecto que no inicializa los datos del objeto. • La accesibilidad del constructor por defecto, excepto para clases abstractas, es public. Ing. Asencio 2019
• class Circulo • { • double radio; • public Circulo ( ) • { • } • • • // Constructor por // defecto public double Calcular. Area() { return radio * 3. 1416; } } Ing. Asencio 2019
• La clase Circulo no tiene un método Main ( ) y por consiguiente, no se puede ejecutar. • La clase Circulo es, simplemente, una definición que se utiliza para declarar y crear objetos del tipo Circulo. Ing. Asencio 2019
DECLARACION Y CREACION DE UN OBJETO • Anteriormente dijimos que una clase es una plantilla que define los datos y los métodos del objeto. • Un objeto es una instancia de una clase • Se pueden crear muchas instancias de una clase. • La creación de una instancia se conoce como instanciación. Ing. Asencio 2019
clase Circulo objeto 1 de Circulo objeto 2 de Circulo • Una clase puede tener muchos objetos diferentes Ing. Asencio 2019
• La sintaxis para declarar un objeto es: • Nombre. Clase nombre. Objeto ; • Ejemplo: • Circulo mi. Circulo ; • La variable mi. Circulo es una instancia de la clase Circulo. Ing. Asencio 2019
• La declaración de un objeto simplemente asocia el objeto con una clase, haciendo al objeto una instancia de esa clase. • La declaración no crea el objeto. • Para crear el objeto se necesita utilizar el operador new con el propósito de indicar a la computadora que cree un objeto y asigne espacio de memoria para él. Ing. Asencio 2019
• La sintaxis para crear un objeto es: • nombre. Objeto = new Nombre. Clase ( ) ; • Ejemplo: • mi. Circulo = new Circulo ( ) ; • Esta sentencia, crea un objeto llamado mi. Circulo y le asigna memoria. Ing. Asencio 2019
DECLARACION E INSTANCIACION • Podemos combinar la declaración y la instanciación en una sola sentencia. • La sintaxis es: • Nombre. Clase nombre. Objeto = new Nombre. Clase ( ) ; • Ejemplo: • Circulo mi. Circulo = new Circulo ( ) ; Ing. Asencio 2019
ACCESO A DATOS • Por seguridad, los atributos o campos de datos de una clase son privados, por lo que son visibles únicamente dentro de la clase. • Para poder tener acceso a los atributos desde fuera de la clase, se hace a través de las propiedades. Ing. Asencio 2019
PROPIEDADES • Las propiedades son la interfaz publica de los campos de datos en una clase. • Las propiedades proporcionan un modo de leer o asignar valores a campos privados a través de los métodos especiales de acceso a la propiedad, denominados get y set. Ing. Asencio 2019
• Estos métodos de encapsulamiento se utilizan sólo cuando es apropiado entregar los datos a otro objeto que solicite la información. • Es importante encapsular los atributos de una clase, para que los objetos sólo puedan entregar los valores que sean programados por nosotros y no por nadie más. Ing. Asencio 2019
• get utiliza la palabra reservada return para devolver el valor del campo. • set utiliza la palabra reservada value que representa el valor a asignar al campo. • Las propiedades son extensiones de los campos, por lo que se accede a ellas de la misma forma que a las variables. Ing. Asencio 2019
Para cada atributo debe definirse una propiedad. Las propiedades NO pueden llamarse igual a los atributos, por eso el nombre de la propiedad debe iniciar con una mayúscula, para diferenciarse del atributo. Las propiedades tienen acceso público. Ing. Asencio 2019
• • • class Circulo { double radio; • • • public double Radio { get { return radio; } • • • set { radio = value; } } //Aquí finaliza la prop. public double Calcular. Area() { return Radio*Math. PI; } } Ing. Asencio 2019 PROPIEDAD DEL ATRIBUTO radio
double radio; public double Radio { get { return radio; } set { radio = value; } } Ing. Asencio 2019
ACCESO METODOS • Cuando se ha creado un objeto, se puede acceder a sus datos y métodos utilizando la siguiente notación: • nombre. Objeto. propiedad • nombre. Objeto. Metodo ( ) • Ejemplo: • mi. Circulo. Radio • mi. Circulo. Calcular. Area ( ) Ing. Asencio 2019
static void Main(string[] args) { Circulo mi. Circulo = new Circulo(); mi. Circulo. Radio = 5. 0; double Area = mi. Circulo. Calcular. Area(); Console. Write. Line("El area es: {0}", Area ); Console. Read. Key(); } Ing. Asencio 2019
UTILIZACION DE METODOS • Los métodos son los miembros de un tipo clase donde se especifican las acciones que son realizadas por un objeto de la misma. • Una invocación a un método es una petición al método para que ejecute su acción y lo haga con el objeto mencionado • La invocación de un método se denomina también, llamar al método o pasar un mensaje a un objeto. Ing. Asencio 2019
• Existen dos tipos de métodos, aquellos que devuelven un valor único (Ej: Read. Line) y aquellos que ejecutan alguna acción distinta de devolver un único valor (Ej: Write. Line). • Los métodos que realizan una acción distinta de devolver un valor se denomina métodos void. Ing. Asencio 2019
• Cuando un programa llama a un método, el control del programa se transfiere al método llamado. • Un método llamado devuelve el control al llamador cuando se ejecuta su sentencia return o cuando se alcanza la llave de cierre ( } ). Ing. Asencio 2019
EJEMPLO public class Mi. Clase { int mi. Campo; public Mi. Clase(int valor)//Constructor { mi. Campo = valor; } } Ing. Asencio 2019
• El constructor de una clase debe comenzar con un modificador de acceso, seguido por el nombre del constructor, luego irán sus argumentos entre paréntesis y, por último, el cuerpo del constructor. • Cuando se crea un objeto de la clase se deben proporcionar también los argumentos requeridos por el constructor. Ing. Asencio 2019
• Los constructores se pueden sobrecargar, lo que permite construir objetos con diferentes tipos iniciales de datos, es decir, usar para su construcción argumentos de diferente tipo. Ing. Asencio 2019
• public class Circulo • { • double radio; • public Circulo(double r) • { • radio = r; • } • public Circulo ( ) • { • radio = 5. 00; • } • public double Calcular. Area ( ) • { • return radio * 3. 1416; • } Ing. Asencio 2019
• Para crear un nuevo objeto Circulo de radio 6. 0 se puede utilizar la siguiente sentencia: • mi. Circulo = new Circulo(6. 0); • La sentencia anterior, asigna un valor de 6. 0 a mi. Circulo. radio. • Si tenemos la siguiente sentencia: • mi. Circulo = new Circulo(); • Se crea un círculo utilizando el segundo constructor que asigna el radio por defecto 5. 0 a mi. Circulo. radio Ing. Asencio 2019
• static void Main(string[] args) • { • double area; • Circulo mi. Circulo = new Circulo(6. 0); • area = mi. Circulo. Calcular. Area(); • Console. Write. Line("{0}", area); • mi. Circulo = new Circulo(); • area = mi. Circulo. Calcular. Area(); • Console. Write. Line("{0}", area); • Console. Read. Key(); } Ing. Asencio 2019
• OJO: • Los constructores son métodos especiales que no requieren un tipo de retorno , ni incluso void. Ej: • • public class Mi. Clase { int mi. Campo; public Mi. Clase (int valor ) { mi. Campo = valor; } } Ing. Asencio 2019
• Si se desea crear un objeto de la clase Mi. Clase, se debe proporcionar un valor entero que la clase utiliza para inicializar el campo de datos mi. Campo. Este entero es el único argumento del constructor de Mi. Clase. • Mi. Clase mi. Objeto = new Mi. Clase(5); • Esta sentencia no solo crea un objeto de la clase Mi. Clase, sino que inicializa el campo mi. Campo al valor 5. Ing. Asencio 2019
EJERCICIO • Elabore un programa que cree cinco objetos círculos, de radios almacenados en una estructura de datos y visualice sus áreas. • Crearemos una clase circulo que tendrá un constructor que recibirá como parámetro el radio. • Los radios se almacenarán en un array. • Los cinco objetos creados comparten los mismos métodos. Ing. Asencio 2019
class Circulo { public double radio; public Circulo(double r) { radio = r; } public double Calcular. Area() { return radio * 3. 1416; } } Ing. Asencio 2019
static void Main(string[] args) { double area; double[] radios = new double[] { 1, 2, 3, 4, 5}; foreach (double ra in radios) { Circulo mi. Circulo = new Circulo(ra); area = mi. Circulo. Calcular. Area(); double r = mi. Circulo. radio; Console. Write. Line("Radio: {0}", r); Console. Write. Line("Area: {0}", area); } Console. Read. Key(); } Ing. Asencio 2019
ENCAPSULAMIENTO • Es una de las maneras más eficientes de mantener la seguridad en las aplicaciones. • POO ----- Clases --- Plano de un objeto --Características y funcionalidades -- • Atributos y Métodos ---- Ej: Persona: • Atributos ---- Nombre, Número de DUI, estatura, color de la piel, peso, ……. . • Métodos ---- Caminar, hablar, reír, gritar, pensar, … Ing. Asencio 2019
• La POO encapsula datos (atributos) y comportamientos (métodos) en paquetes denominados objetos. La ocultación de la información como termino sinónimo, gestiona la visibilidad de los elementos de un programa. • Datos y acciones se combinan en una sola entidad, es decir, en un objeto de la clase, y se ocultan los detalles de implementación. Ing. Asencio 2019
• La POO encapsula datos y comportamientos en objetos. Los objetos tienen la propiedad de ocultación de la información. Esta propiedad significa que aunque los objetos puedan conocer como comunicarse unos con otros a través de interfaces bien definidas, no pueden conocer como están implementados otros objetos. Los detalles de la implementación están ocultos dentro de los propios objetos. Ing. Asencio 2019
PROPIEDADES • En la Programación Orientada a Objetos, los atributos son privados, esto es para tener seguridad sobre los valores del objeto. • De ahí que, el acceso a los campos o atributos no debe efectuarse directamente. • se deben mantener los atributos o campos de datos privadas o protegidos, y si se desea exponer públicamente se deben usar las propiedades Ing. Asencio 2019
HERENCIA • Es una de las propiedades más sobresalientes de la programación orientada a objetos. • Es un mecanismo que sirve para definir objetos basados en otros existentes. • En terminología C#, la clase existente se denomina superclase, clase base o clase padre. • La clase derivada de la superclase se denomina subclase, clase hija, clase extendido o clase derivada. Ing. Asencio 2019
• En C#, salvo la clase object, cada clase tiene una superclase. • La clase object no tiene ninguna superclase y es la última clase padre de todas las otras clases. • Cuando se define una clase en C# y no se proporciona explícitamente ninguna clase padre, se supone implícitamente que System. Object es su clase padre. Ing. Asencio 2019
JERARQUIA DE CLASES Persona Empleado Estudiante Ingeniero Ing. Asencio 2019 Abogado
• Aquí podemos ver la definición de una clase para estudiantes. • Un estudiante es una persona, por lo que se puede definir la clase Estudiante que deriva de la clase persona • Una clase derivada es una clase que se define añadiendo variables de instancia y métodos a una clase existente. Ing. Asencio 2019
• La clase Persona es la superclase y la clase Estudiante es la clase derivada. • Las clase derivadas tienen todas las variables de instancia y los métodos de la superclase, más las variables de instancia y métodos que se necesite añadir. Ing. Asencio 2019
SINTAXIS PARA LA DEFINICION DE UNA SUBCLASE • • • public class nombre. Clase : Clase. Base Ejemplos: public class Estudiante : Persona public class Empleado : Persona public class Ingeniero : Empleado La herencia es siempre transitiva, de modo que una clase puede heredar características de superclase de muchos niveles. Ing. Asencio 2019
- Slides: 65