Eficiencia: La eficiencia del software es su capacidad para hacer un buen uso
de los recursos que manipula.
Transportabilidad (portabilidad) : La transportabilidad o portabilidad es la facilidad con la que un software puede ser transportado sobre diferentes sistemas fsicos o lgicos. Verificabilidad: La verificabilidad es facilidad de verificacin de un software; es su capacidad para soportar los procedimientos de validacin y de aceptar juegos de pruebas o ensayos de programas. Integridad: La integridad es la capacidad de un software para proteger sus propios componentes contra los procesos que no tengan derecho de acceso. Fcil de utilizar: Un software es fcil de utilizar si se puede comunicar con l de manera cmoda. Correccin: Capacidad de los productos software de realizar exactamente las tareas definidas por su especificacin. Robustez: Capacidad de los productos software de funcionar incluso en situaciones anormales. Extensibilidad: Facilidad que tienen los productos de adaptarse a cambios en su especificacin. Existen dos principios fundamentales para conseguir esto: diseo simple descentralizacin Reutilizacin: Capacidad de los productos para ser reutilizados, en su totalidad o en parte, en nuevas aplicaciones. Compatibilidad: Facilidad de los productos para ser combinados con otros. Que es un paradigma ? Paradigma: Modo de Pensar expresado en breve (Un punto de vista personal, una metfora, un esquema-mental, una visin del Mundo o cosmovisin) Por ejemplo: Cmo pensaba la gente que era la Tierra antes de 1492?
Existen muchos paradigmas de programacin diferentes, cada uno de ellos tiene sus propias caractersticas y tratan de solucionar los problemas clsicos del desarrollo de software desde diferentes perspectivas y filosofas Que es un paradigma de programacin ? El paradigma de programacin representa un enfoque particular o filosofa para la construccin del software.
El enfoque no es mejor uno que otro sino que cada uno tiene ventajas y desventajas. Tambin hay situaciones donde un paradigma resulta ms apropiado que otro.
Terminologa de la POO Clase Objeto Atributos Mtodos Instancia Abstraccin Encapsulamiento Modularidad Jerarqua Generalizacin
El elemento principal en la programacin de objetos es la clase, es como una plantilla del objeto.
La casa sali de un plano.
La clase es lo que define a un objeto.
Un objeto es una instancia de la clase, es la creacin, es darle vida a una clase es lo que forma el objeto, la clase ya construida es el objeto. Instancias-Objetos Una Instancia es una ocurrencia de la clase
Al momento de crear un objeto se produce la instanciacin
Un Objeto es una instancia de una Clase especfica
EJEMPLO: Suponer que existe la clase Vehculo
El auto patente WF-4631 es una instancia de la clase Vehculo, o sea, un objeto de esa clase
La camioneta patente ZT-9283 es otra instancia de la clase Vehculo Las clases y los objetos estn en todas partes Vehculo Animal Figura Clases
Tenemos tipos de datos enteros, booleanos pero cuando creamos una clase estamos definiendo un nuevo tipo de datos.
Deben tener una sola responsabilidad, solo hago una sola cosa. Todos los sustantivos tienden a ser clases (atento no confundirlas con las propiedades)
Ejemplo: Una persona camino por las escalera para abrir la puerta
Objeto = persona, escalera, puerta Mtodos = camin, abri Un programa se encarga de procesar informacin. El usuario se encarga de dos cosas fundamentales:
- Los datos que se procesan (datos) -Las operaciones que procesan esos datos (funciones)
Podemos unir datos con operaciones
Las operaciones se aplican sobre unos datos, ms exactamente, sobre unos tipos de datos. Las clases
Las clases C++ permiten definir nuevos tipos de datos, Cada clase es un nuevo tipo, Cada elemento de la clase se caracteriza por ciertos valores y las operaciones disponibles para crear dichos elementos, modificarlos y destruirlos. Un concepto se define en trminos de:
qu tiene? campos qu hace? mtodos 39 Abstraccin Concepto. Se define como la capacidad para examinar algo sin preocuparse de sus detalles internos. Existen dos tipos de abstracciones: abstraccin de datos y abstraccin funcional Abstraccin de Datos Consiste en utilizar los datos sin preocuparse por los detalles de su implementacin, es decir, lo importante es saber que tipo de informacin se puede utilizar y no como est almacenado Que Atributo Como Campo Abstraccin funcional Consiste en saber que es lo que hace un determinado proceso, pero no como lo hace. Por ejemplo el proceso Ordenar de la clase Vector, sabemos que el mtodo ordenar los elementos del vector, pero no nos interesa como lo har. Que mtodo Como algoritmo Encapsulamiento Proceso por el que se ocultan: Las estructuras de datos Los detalles de la implementacin
Permite considerar a los objetos como "cajas negras", evitando que otros objetos accedan a detalles que NO LES INTERESA
Una vez creada la clase, las funciones usuarias no requieren conocer los detalles de su implementacin Encapsulamiento Toda clase tiene un conjunto de atributos y mtodos asociados a ella
Todos ellos estn encapsulados o contenidos dentro de la misma clase, de manera que son miembros de dicha clase
Esos mtodos y atributos pueden ser utilizados por otras clases slo si la clase que los encapsula les brinda los permisos necesarios para ello Encapsulamiento Atributos de una Cuenta Corriente: Nmero Saldo
Mtodos: Depositar Girar Conocer el saldo
Cmo se almacenan estos datos? Objetos En la POO se dice que un objeto: "integra datos y algoritmos" En la programacin estructurada, variables y funciones estn separadas Clase Objeto Instanciacin de objetos Tipo Variable Declaracin de variables POO Procedural Objetos Cada objeto es responsable de inicializarse y destruirse en forma correcta
Un objeto consta de: Tiempo de vida Estado Comportamiento Atributos Mtodos Tiempo de vida de un objeto La duracin de un objeto en un programa siempre est limitada en el tiempo
La mayora de los objetos slo existen durante una parte de la ejecucin del programa
Los objetos son creados mediante un mecanismo denominado instanciacin
Los objetos dejan de existir cuando son destruidos Queda definido por sus atributos
Con l se definen las propiedades del objeto, y el estado en que se encuentra en un momento determinado de su existencia
Estado de un objeto Queda definido por los mtodos
Los prototipos de los mtodos definidos en la interfaz de una clase permiten a otros objetos, que forman parte de la aplicacin, interactuar con los objetos de esa clase
Comportamiento de un objeto Mtodo Es un algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecucin se desencadena tras la recepcin de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un mtodo puede producir un cambio en las propiedades del objeto, o la generacin de un "evento" con un nuevo mensaje para otro objeto del sistema.
Cmo se declara una funcin miembro de la clase ? (menos los constructores y destructores) Tipo que devuelve nombre de la clase : : nombre del mtodo (Lista de parmetros ) { cuerpo de la funcin o mtodo }; Los : : son conocidos como el alcance del operador resolucin, lo que indica al compilador donde comienza la funcin. Evento Es un suceso en el sistema (tal como una interaccin del usuario con la mquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. Tambin se puede definir como evento, a la reaccin que puede desencadenar un objeto, es decir la accin que genera.
Datos Mtodos Mensajes Objetos Mensaje Es una comunicacin dirigida a un objeto, que le ordena que ejecute uno de sus mtodos con ciertos parmetros asociados al evento que lo gener.
Ejemplos class class_name { id_acceso1: miembro1; id_acceso2: miembro2; ... }; class CRectangle { int w, h; public: CRectangle(int,int); int area(void); }; int CRectangle::area () {return (w*h);} void CRectangle::CRectangle (int a, int b) { w = a; h = b;} #include "Car.h" CRectangle rect(3,4); cout << "area: " << rect.area(); Crectangle.h Crectangle.cpp main.cpp Conceptos POO: Tipo Es el reforzamiento del concepto de clase Objetos de tipo diferente no pueden ser intercambiados El C++ y el Java son lenguajes fuertemente tipeados Ayuda a corregir errores en tiempo de compilacin Mejor que en tiempo de ejecucin 98 Constructor El constructor es un proceso que se encarga de: Reservar espacio de memoria para los datos del objeto Inicializar los atributos del objeto (darle un estado inicial) Tipos de Constructor: Oficio, Copia, con Parmetros 100 Constructor de oficio Inicializa los atributos con valores definidos por el implementador de la clase. Ej. Fecha::Fecha() { d=1; m=1; a=2001; } 101 Constructor de copia Inicializa los atributos del objeto con los datos provenientes de otro objeto de la misma clase. Ej. Fecha::Fecha(const Fecha &f2) { d=f2.d; m=f2.m; a=f2.a; } Constructor con parmetros Inicializa el objeto con datos provenientes de los parmetros. Ej. Fecha::Fecha(byte dd, byte mm,Word aa) { SetFecha(dd, mm, aa); } Mtodos abstractos Si la clase padre define un mtodo, la clase hija puede usar ese mtodo sin necesidad de redefinirlo
Si la clase padre no define un mtodo (mtodo abstracto), la clase hija tiene que definirlo obligatoriamente. Vehculo depsito velocidad acelerar frenar Vehculo areo queroseno aterrizar despegar Vehculo terrestre gasolina Tren vagones Vagn puertas asientos Vagn pasajeros puertas=2 asientos=20 Vagn conductor puertas=1 asientos=2 1..n Coche
Avin aterrizaje horizontal despegue horizontal Helicptero aterrizaje vertical despegue vertical Herencia La herencia consiste en el compartir atributos y mtodos entre clases basndose en una relacin jerrquica. Una clase puede definirse ampliamente y redefinirse sucesivamente en subclases ms refinadas. Cada subclase que se incorpora, hereda todas las propiedades de su superclase y adiciona sus propias y nicas propiedades. Herencia A veces, campos y mtodos son compartidos por varias clases: Acelerar es un mtodo compartido por coches y trenes Para simplificar el cdigo, se usa la herencia Creamos una clase Vehiculo que tenga los mtodos comunes a coche y tren Creamos clases hijas que heredan de ella Herencia Vehculo acelerar frenar depsito velocidad Coche puertas Tren vagones Avin despegar aterrizar puertas Herencia Empleado Sueldo Cliente Cuenta Alumno Carrera Persona Nombre Direccin RUT
Una clase puede heredar los atributos de dos o ms clases. Para lograr esto, se utiliza una lista de herencia separada mediante comas en la lista de clases base de la clase derivada. La forma General es: Class Nombre_clase_derivada : lista de clases base { . . . }; Considere crear una clase MesaRedonda, que no solo tenga las propiedades de las mesas, sino tambin la caracterstica geomtrica de ser redonda. #include <stdio.h> class Circle{ float radio; public: Circle(float r){ radio = r; } Float Area(){ return radio*radio*3.1416; } }; class Mesa{ float height; public: Mesa(float h) { height = h; } float Height() { return height; } }; class MesaRedonda:public Mesa, public Circle { int color; public: MesaRedonda(float h, float r, int c); int Color() { return color; } }; MesaRedonda::MesaRedonda(float h, float r, int c): Circle(r),Mesa(h) { color = c; } MESA CIRCULO MESA REDONDA void main() { MesaRedonda Mesa1(15.0, 3.0, 5); printf("\n Las propiedades de la Mesa son:"); printf("\n Altura = %f ", Mesa.Height()); printf("\n Area = %f ", Mesa.Area()); printf("\n Color = %d ", Mesa.Color()); } 126 POLIMORFISMO Polimorfismo Capacidad que permite a dos clases diferentes responder de forma distinta a un mismo mensaje
Esto significa que dos clases que tengan un mtodo con el mismo nombre y que respondan al mismo tipo de mensaje (es decir, que reciban los mismo parmetros), ejecutarn acciones distintas Ejemplo 1:
Al presionar el acelerador esperamos que aumente la velocidad del auto, independiente de si se tiene un:
Motor con carburador Motor con inyeccin electrnica
Si se tienen las clases Entero y Char, ambas respondern de manera distinta al mensaje "Sucesor" Polimorfismo
Polimorfismo por Coercin: Es una operacin semntica que convierte argumentos a los tipos esperado por una funcin, en una situacin que de otra forma resultara en un tipo de error. La coercin puede estar dada estticamente, insertndose automticamente entre argumentos y funciones a tiempo de compilacin o pueden tener que determinarse dinmicamente, con pruebas a tiempos de ejecucin sobre los argumentos.
CLASES AMIGAS (Palabra reservada friend) A veces se necesitan 2 clases que son tan conceptualmente cercanas que usted deseara que una de ellas tuviera acceso irrestricto a los miembros de la otra. Ejercicios Y Ejemplos Ejemplo: mi Coche Un coche desde la filosofa OO Qu tiene? Fsico: puertas, motor, depsito Abstracto: velocidad, aceleracin, consumo Estado: parado con una puerta abierta a 120 Km/h con el depsito medio lleno Qu hace? Acelerar, abrir/cerrar puertas, repostar Ejercicio 1 Crear una clase coche que tenga los siguientes campos: Matrcula, marca y modelo (pblicos) Velocidad, velocidad mxima y aceleracin Nmero de puertas Generar los constructores y destructores Crear un constructor que inicie los parmetros Instanciar un objeto de la clase y mostrar por pantalla sus atributos pblicos Ejercicio 2 Controlar el estado de las puertas Crear mtodos para abrir y cerrar puertas Almacenar el estado de las puertas (abiertas/cerradas)
Pistas: usar array de bool (true=abierto) usar constantes enteras para identificar las puertas (MALETERO=0, DETRAS_IZQ=1, etc)
Ejercicio 3 Implementar el movimiento del coche: Acelerar Entrada: tiempo durante el que acelera Efecto: v=min(at, vmax) Frenar: anlogo a la aceleracin Considerar que una vez en movimiento se mantiene a velocidad constante Comprobar que no acelere si hay puertas abiertas
Ejercicio 4 Implementar el consumo del coche: Aadir campos: deposito y depositoMax consumo (litros por kilmetro) cuentaKilometros Aadir mtodo repostar(float litros) Aadir mtodo crucero(int segundos) que modifique: depsito, cuentaKilometros d=vt Comprobar que funciona correctamente repostar 20 litros acelerar 10s crucero 1000s frenar 10s
0 = Negro 1= Azul 2= Verde 3= Aguamarina 4= Rojo 5= Prpura 6= Amarillo 7= Blanco 8= Gris 9= Azul Claro A= Verde Claro B= Aguamarina Claro C= Rojo Claro D= Prpura Claro E= Amarillo Claro F= Blanco Brillante Por Ejemplo si queremos que a la hora de ejecutar un cdigo de programa con fondo de color azul y texto de color rojo, ingresamos: