Programación orientada a objetos II

Documentos relacionados
PROGRAMACION ORIENTADA A OBJETOS EN C++

Programación orientada a objetos

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Programación Orientada a Objetos (POO)

Principios de Computadoras II

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Tema: Clases y Objetos en C#. Parte II.

Guía práctica de estudio 04: Clases y objetos

Los constructores son funciones miembro especiales que sirven para inicializar un objeto de una determinada clase al mismo tiempo que se declara.

Curso de Java POO: Programación orientada a objetos

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Java Avanzado Facultad de Ingeniería. Escuela de computación.

2.2 Nombres, Ligado y Ámbito

Clases en C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Algoritmos y Programación II. Enero de 2005

Forma Básica Clase Java

Tema 3. Programación orientada a objetos en Java (Parte 1)

CONTENIDO. Programación orientada a objetos - POO. Clases. Constructores y destructores. Definiciones. Entrada y salida

Categorías de métodos. Métodos constructores y destructores

Tema 6. Gestión dinámica de memoria

PRÁCTICA No 4 POO Encapsulación. El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos

Elementos de un programa en C

PROGRAMACIÓN EN C#.NET Programación Orientada a Objetos en C# Ing. Bruno López Takeyas

Modulo 11. Clases y Objetos en Java

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Programación con Visual C#

El patrón Composite (Compuesto) Propósito Componer los objetos a una estructura de jerarquía de relación partetodo.

Las clases como tipos de datos definidos por el usuario

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Taller de Programación I. Tema 06: Orientación al Objeto en Java (parte 2)

Las plantillas permiten definir funciones genéricas.

Polimorfismo. Métodos virtuales

Derechos de Acceso: COMPOSICION

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

16. Herencia Definición de herencia. 168 A. García-Beltrán y J.M. Arranz

1

La sintaxis básica para definir una clase es la que a continuación se muestra:

Una Clase: define un grupo de objetos que tienen propiedades similares y se comportan de manera similar.

Tema: Sobrecarga de Operadores.

Necesidad de la herencia pertenencia variedad is a has a herencia variedad definir una clase modificando una o más clases añadir nuevos miembros

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos

Programación orientada a objetos. Capítulo 8 Mejora de las estructuras mediante herencia

Estructuras de Datos Declaraciones Tipos de Datos

Procesadores de lenguaje Tema 6 La tabla de símbolos

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Ejercicio 1. Ejercicio 2

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

Tema: Punteros a Objetos. Puntero this.

Tabla de Símbolos. Programación II Margarita Álvarez

Introducción a C++ y Code::Blocks

Prof. Dr. Paul Bustamante

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Fundamentos Programación Orientada a Objetos ( POO ) - Parte I Desarrollo de Software

Aspectos de los LP. Diseño de compiladores. Estático vs. Dinámico. Estático vs. Dinámico. Scope. Scope 24/03/2015

El lenguaje C. 1. Estructuras. Principios de Programación Definicion de estructuras

Tema 4. Clases y objetos en C Introducción

Diseño Basado en Componentes. Curso 2008 / 09

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

CURSO de C++ Ignacio López

Tema: Clases y Objetos en C++. Parte II.

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Objeto Clase Atributo / Método Encapsulamiento Mensaje Herencia Polimorfismo Encadenamiento Dinámico

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Lenguajes de Programación. Juan Zamora O. Semestre II Nombres, Ambitos y Ligados

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11

2 - Clases y objetos en C++

Introducción a la programación orientada a objetos

Tema 16: Tipos de datos estructurados en lenguaje C

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Programación estructurada (Introducción a lenguaje C)

Unidad Nº V Listas Enlazadas

Introducción. Herencia y Polimorfismo. Ejemplos (I) Ejemplos (II) Control de Acceso. Herencia

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Capítulo 6. Introducción a la POO

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Tema: Tipos Abstractos de Datos (TAD s) en C++.

Funciones como Subprogramas en C++

TIPOS DE DATOS EN ABAP

TEMA 2 Introducción a C# ANÁLISIS Y DESARROLLO DE APLICACIONES INFORMÁTICAS Curso 2010/2011

CURSO DE LENGUAJE C. 4.1 Conceptos básicos de funciones 4.2 Funciones que regresan valores no enteros 4.3 Variables externas 4.4 Reglas de alcance

Constructores y Destructores

Instituto Tecnológico de Celaya

Lenguaje C [Apuntadores y arreglos]

Herencia. Hay clases que comparten gran parte de sus características.

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

Informática I para Bachillerato

Tema 7.- Fundamentos de la Programación Orientada a Objetos

GUÍA DE ESTILO EN JAVA

Transcripción:

Repaso de conceptos Programación orientada a objetos II Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es! Clase! Objeto! Atributos! Métodos! Cambio de enfoque! Constructor! Creación de un objeto! Declaración/Definición! Destructor! Get/Set int cuenta; ingresa(cuenta,500);! Cuenta micuenta; micuenta.ingresa(500);! Ocultación de la información Cohesión y acoplamiento! El acceso directo a tributos no es recomendable porque revela la estructura interna del objeto! Los métodos definen cómo se debe usar un objeto! Permitir el acceso a los atributos es dar vía libre a manipular su estado sin control! Nos limita la posibilidad de modificar la implementación! En su lugar se deben definir métodos que, de forma genérica, modifiquen el estado de acuerdo a consideraciones semánticas! Se debe prohibir el acceso a los atributos! Modificadores de la visibilidad! Cohesión: Grado de relación entre las diferentes características de un objeto! Objeto con una función muy bien definida: muy cohesionado! Objeto con muchas funciones no relacionadas: poco cohesionado! Acoplamiento: Grado de dependencia entre los diferentes objetos! Programa en el que todas las clases tienen funciones distintas y definidas: Poco acoplado! Programa en el que todas las clases participan en todas las tareas Muy acoplado! Se debe maximizar la cohesión de cada objeto y minimizar el acoplamiento entre clases distintas 1

Estilos de declaración de clases: struct y class El puntero this class Perro! char inicial;! int edad;! Perro(int an);! struct Perro! char inicial;! int edad;! Perro(int an);!! Dentro de un método, la palabra reservada this representa al puntero implícito al objeto actual.! Lo pasa el compilador como el primer argumento implícito de cada llamada de un método! Se utiliza implícitamente para hacer referencia tanto a los atributos como a los métodos! También se puede utilizar de manera explícita Los miembros por defecto son privados Los miembros por defecto son públicos El puntero this El puntero this Perro.h int anyos;! Perro(int an);! Perro.cpp #include Perro.h! Perro::Perro(int anyos)! (*this).anyos = anyos! // o también! this->anyos = anyos;!! Para hacer llamadas encadenadas Rectangulo& mirect(1,1,2,3);! mirect.traslada(2,3).aumenta(2);! 2

Clases y const Atributos const! Control extra para evitar que un objeto pueda modificarse! Se puede aplicar a:! Atributos! Métodos! Objetos! Sólo se pueden inicializar y no se pueden modificar class Contenedor! const int maxsize_;! Contenedor(int maxsize);!! Cómo controla el compilador que sólo se pueda inicializar una vez?! Lista de inicialización del constructor Lista de inicialización del constructor! Desarrollada originalmente para el uso con herencia! Se verá más adelante! Sólo ocurre en el constructor! Permite que se establezca un valor en el momento de creación de los atributos! Si no, en el constructor tendrían un valor indeterminado Perro::Perro(int ed)! Lista de inicialización del constructor! Sólo en la definición del constructor! Antes de la primera {! Cada atributo se inicializa con el valor determinado entre los paréntesis! Si hay más de un atributo, se separa con comas Constructor(int par, int par2) : atrib1(par1), atrib2(par2) { } // Aquí edad tiene un valor determinado! edad = ed;! 3

Lista de inicialización del constructor Métodos const Perro::Perro(int ed) : edad(ed)! Contenedor::Contenedor(int maxsize) : maxsize_(maxsize)!! No pueden alterar el estado de ningún atributo! Qué tipo de métodos que hemos visto deberían llevar const?! Métodos get, imprime,! Llevan el modificador const al final de su declaración! Y definición!!!!! Métodos const Métodos const Perro.h! int getedad() const;! Perro.cpp! int Perro::getEdad() const return edad;! Perro.h! int getedad() const;! Perro.cpp! int Perro::getEdad() const edad = 2; // Qué pasa?! return edad;! 4

Objetos const Constructor copia! Evita que se modifique el estado de un objeto! Sólo se permite invocar métodos const sobre este objeto int main()! const Perro miperro(2);! cout << miperro.getedad() << endl;!! Tipos de paso de parámetros?! Por valor y por referencia! Qué pasa en el paso por valor?! Ej: int a=2; mifuncion(a);! Y qué pasa con una función que recibe/devuelve un objeto?! Ej: mipancho(2); vetenerinario.anyade(mipancho) miperro.setedad(2); // Qué pasa?! Constructor copia Constructor copia! El constructor copia se llama automáticamente cuando se pasa/devuelve un objeto de una función! O cuando se crea un objeto con otro como parámetro! Perro mipancho2(mipancho);! El compilador genera uno por defecto si no se define! Hace una copia de todos los atributos! Podemos redefinirlo! Ej: Para hacer copias del contenido apuntado por variables de tipo puntero class Perro! int edad;! Perro(int ed);! Perro(const Perro &otro);! Perro::Perro(int ed)! edad = an;! Perro(const Perro &otro)! edad = otro.edad;!! 5

Constructor copia Valores por defecto! Qué pasa si lo declaro private?! Prohíbo el paso por valor! Permite asignar argumentos por defecto u omisión a parámetros! Es un valor dado en la declaración de un parámetro de un método que permite al compilador insertar automáticamente ese valor cuando no se incluya en la llamada Recordatorio: Constructor! Existe sobrecarga (distintos parámetros) #include Perro.h! Perro::Perro(int an)! enum Color {MARRON, NEGRO int anyos;! anyos = an;! Color color;! color = MARRON;! Perro(int an);! Perro::Perro(int an, Color col) Perro(int an, Color col);! anyos = an;! color = col;! Valores por defecto! Se está repitiendo la mayor parte del código de los constructores! Los valores por defecto nos permiten evitar este tipo de redundancia Perro(int an, Color col=marron);! // Me permite llamar! Perro(2); //automáticamente me inserta MARRON! Perro(2,NEGRO);! 6

Valores por defecto Valores por defecto enum Color {MARRON, NEGRO int anyos;! Color color;! Perro(int an, Color col=marron);! #include Perro.h!! Perro::Perro(int an, Color col) anyos = an;! color = col;!!! Son una ayuda del lenguaje! De la misma manera que la sobrecarga de métodos! Ambos métodos permiten utilizar un mismo nombre para situaciones distintas! Si los métodos tienen comportamientos muy distintos! Sobrecarga de métodos Valores por defecto Atributos estáticos o de clase! Limitaciones/Restricciones:! Sólo los últimos parámetros pueden ser asignados de esta manera! No puedo tener un parámetro por defecto seguido de uno que no lo es Perro(int edad=2,color color) // ERROR! Al realizar todos los parámetros que omita tendrán valores por defecto Perro(int edad=2, Color color=marron, int id=3); Perro(4); // color valdrá MARRON e id 3! Sólo se pueden usar al declarar el método!! Compartidos por todos los objetos! Similares a las variables globales pero con ámbito de clase! Representa información intrínseca de la clase! Existen incluso cuando no existen objetos de esa clase! Comienza con la palabra reservada static! La definición tiene que existir y además tiene que estar fuera de la declaración de la clase 7

Atributos estáticos o de clase Atributos estáticos o de clase static int numperros;! Perro();! int Perro::numPerros=0;! Perro::Perro() numperros+=1;! int main() Perro mipancho, mipancho2;! cout << Perro::numPerros;!!! Pueden tener visiblidad public, private y protected! Se inicializan una sola vez! Uso típico! Controlar el número de objetos que se han creado! Constantes de una clase! Cómo?! static const PI = 3.14;! La definición va incluida en la declaración Métodos estáticos o de clase! Accede solamente a atributos y métodos estáticos! Tienen el modificador static delante de la declaración del método! Se invocan o bien dentro de un método o por medio del identificador de clase! No tienen apuntador this Métodos estáticos o de clase int Perro::numPerros=0;! Perro::Perro() numperros+=1;! static int numperros;! int Perro::getNumPerros() static int getnumperros();! return numperros;! Perro();! int main() Perro mipancho, mipancho2;! cout << Perro::getNumPerros();!! 8

Resumen: Atributos y variables Funciones inline! Atributo de instancia: Definido para las instancias de una clase! Una copia por objeto! Atributo de clase: Definido para la clase! Común para todos los objetos! En este tipo de funciones, el código de la función se inserta en fase de compilación en el lugar de la llamada de la función! Eficiencia! Variable local: Definida dentro del cuerpo de un método.! De ámbito restringido Funciones inline Funciones inline Perro.h int anyos;! int getanyos()! return anyos;! Perro.h int anyos;! int getanyos() ;! Perro.cpp inline int Perro::getAnyos()! return anyos;! 9

Ejercicios 10