operadores poo

35
Investigación operadores poo Dávalos Rocha Rosaura Jaqueline 4102 Programación orientado a objetos

Upload: rochajaqueline

Post on 09-Aug-2015

33 views

Category:

Technology


1 download

TRANSCRIPT

Investigación operadores poo

Dávalos Rocha Rosaura Jaqueline4102

Programación orientado a objetos

• Las sobrecargas de operadores permiten combinar y comparar los tipos utilizando operadores como "+", "-", "=" y "!=". Agregando sobrecargas de operadores a un tipo, se permite a los desarrolladores utilizar el tipo como si fuera un tipo primitivo integrado. La sobrecarga de operadores sólo debería realizarse cuando el significado de la operación es intuitivo para el tipo (por ejemplo, para admitir que se agreguen dos instancias de un tipo que representa un valor numérico). La sobrecarga de operadores no se debería utilizar para proporcionar un acceso directo sintáctico para las operaciones no intuitivas.

• El ejemplo siguiente muestra la firma para la operación de suma de la clase DateTime

•  • [Visual Basic]• Public Shared Function op_Addition(ByVal d As DateTime, _• ByVal t As TimeSpan _• ) As DateTime

Sobrecargas de operador

Operador lógico unario

• El Not (Operador, Visual Basic) realiza la negación lógica en una expresión Boolean. Produce el contrario lógico de su operando. Si la expresión se evalúa como True, Not devuelve False; si la expresión se evalúa comoFalse, Not devuelve True. Debido a que Object es la clase base de todos los tipos de referencia en .NET Framework, este comportamiento es heredado por los tipos de referencia que no reemplazan el métodoToString.

• VB• Dim x, y As Booleanx = Not 23 > 14y = Not 23 > 67' The

preceding statements set x to False and y to True.

Operadores lógicos binarios

• El And (Operador, Visual Basic) realiza la conjunción lógica de dos expresiones Boolean. Si ambas expresiones se evalúan como True, And devuelve True. Si al menos una de las expresiones se evalúa como False, Anddevuelve False.

• El Or (Operador, Visual Basic) realiza la disyunción o inclusión lógicas de dos expresiones Boolean. Si una de las expresiones o ambas se evalúan como True, Or devuelve True. Si ninguna de las expresiones se evalúa como True, Or devuelve False.

• Xor (Operador, Visual Basic) realiza la exclusión lógica de dos expresiones Boolean. Si exactamente una expresión, pero no ambas, se evalúa como True, Xor devuelve True. Si ambas expresiones se evalúan como Trueo como False, Xor devuelve False.

• En el siguiente ejemplo se muestra cómo utilizar los operadores And, Or y Xor.• • • VB• Dim a, b, c, d, e, f, g As Boolean a = 23 > 14 And 11 > 8b = 14 > 23 And 11 > 8' The preceding

statements set a to True and b to False. c = 23 > 14 Or 8 > 11d = 23 > 67 Or 8 > 11' The preceding statements set c to True and d to False. e = 23 > 67 Xor 11 > 8f = 23 > 14 Xor 11 > 8g = 14 > 23 Xor 8 > 11' The preceding statements set e to True, f to False, and g to False.

Polimorfismo y Funciones Virtuales

• El polimorfismo es la funcionalidad que permite a código antiguo invocar código nuevo, también permite extender el sistema sin modificar el código existente, esto se logra sobreescribiendo o redefiniendo el código, para lo cual se utilizan funciones virtuales y la palabra clave override.

• Las funciones abstractas son automaticamente funciones virtuales, las cuales permiten al programador usar polimorfismo para hacer su código simple.

• Virtual significa que cuando una invocación a funciones miembro, el compilador debería buscar por el tipo real del objeto y no por el tipo de la referencia, e invocar en base al tipo la función apropiada.

• using System; public class Persona{ //Propiedades public string sNombre;public int iEdad; //Constructor public Persona(string sNombre, int iEdad){this.sNombre = sNombre; this.iEdad = iEdad; } //Métodosvirtual

public string Tipo(){ return "Persona"; } } //Herencia Simplepublic class Empleado : Persona{ public Empleado(string sNombre, int iEdad):base(sNombre, iEdad){} override public string Tipo(){ return "Empleado"; } } class App{ //Aplicación public static void Main(){

Persona Mexicano = new Persona("Gerado Ángeles Nava", 33);Console.WriteLine("Mexicano.sNombre : " + Mexicano.sNombre);Console.WriteLine("Mexicano.iEdad : " + Mexicano.iEdad);Console.WriteLine("Mexicano.Tipo : " + Mexicano.Tipo());Console.WriteLine("--- Arreglo de Objetos ---"); Empleado[] aProgramadores = new Empleado[2]; aProgramadores[0] = new Empleado("Bill Gates", 50);aProgramadores[1] = new Empleado("Eric S. Raymond", 60); for(int i = 0; i < aProgramadores.Length; i++){ Console.WriteLine("aProgramadores["+i+"].sNombre : " + aProgramadores[i].sNombre); Console.WriteLine("aProgramadores[" + i + "].iEdad : " + aProgramadores[i].iEdad); Console.WriteLine("aProgramadores[" + i + "].Tipo : " + aProgramadores[i].Tipo());

} } }

• Cuando una función es declarada con la palabra reservada override significa que es la misma función que fue declarada en laclase base, si la palabra reservada override se omite el compilador podría asumir que la función no está relacionada a la función de la clase base y no despacha la función virtual (el compilador podría sugerir omitir override o agregar new) .

• Cuando existe una función virtual el programador puede pasar una referencia a la clase abstracta aunque la clase derivada y el compilador podrían escribir código para invocar la versión apropiada de la función en tiempo de ejecución.

• Por ejemplo, el objeto base object tiene una función virtual llamada ToString() que convierte un objeto a string. Si se invoca la función ToString() en un objeto que que no la tiene como versión propia, la versión de la función que es parte de la clase object podría ser invocada.

IDENTIFICACION DE PATRONES DE DISEÑO PARA LA AUTENTIFICACION EN APLICACIONES

• En algunas aplicaciones, hay clases que deben ser instanciadas una sola vez. Por ejemplo, un sistema operativo debe tener solo un sistema de reloj y una compañía debe tener solo un sistema contable llamada singular o singleton.El patrón de diseño Singular (Singleton) asegura que se cree sólo una instancia de la clase y provee un método para acceder esa única instancia.

• Todos los objetos que utilizan una instancia de una clase Singular utilizan la misma instancia Estructura Observa que los miembros estáticos de la clase están subrayados . En este patrón de diseño El atributo estático instance contiene la única instancia de la clase. El constructor es definido como private de modo que las otras clases no puedan crear instancias. El método estático getSingletonInstance regresa la única instancia de la clase. La primera vez que este método es llamado, crea la única instancia En la línea 10, la variable estática y privada singletonInstance es inicializada con una instancia de la claseICarnegieInfo —singletonInstance será la única instancia de la clase ICarnegieInfo en una aplicación.

• En la línea 22, el constructor es definido como privado, de modo que otras clases no puedan crear instancias deICarnegieInfo . En la línea 36, la clase define un método estático llamado getSingletonInstance que regresa una referencia a la única instancia de ICarnegieInfo . a primera llamada al método getSingletonInstance crea la única instancia.

• ConsecuenciasEl patrón de diseño Singular tiene los siguientes beneficios: Una clase Singular puede controlar cómo y cuando el código cliente puede acceder a la única instancia. El código cliente no tiene la libertad de utilizar el operador new para crear una instancia de la clase Singular. En vez de eso, debe llamar a un método estático que regresa una referencia a la instancia única. Una clase Singular puede ser modificada fácilmente si los requerimientos cambian y la aplicación necesita limitar el número de instancias a un número diferente de uno.

FABRICAS ABSTRACTAS• Contexto y problema

Contexto: Debemos crear diferentes objetos, todos pertenecientes a la misma familia. Por ejemplo: las librerías para crear interfaces gráficas suelen utilizar este patrón y cada familia sería un sistema operativo distinto. Así pues, el usuario declara un Botón, pero de forma más interna lo que está creando es un BotónWindows o un BotónLinux, por ejemplo.El problema que intenta solucionar este patrón es el de crear diferentes familias de objetos.El patrón Abstract Factory está aconsejado cuando se prevé la inclusión de nuevas familias de productos, pero puede resultar contraproducente cuando se añaden nuevos productos o cambian los existentes, puesto que afectaría a todas las familias creadas.

Estático

• La estructura típica del patrón Abstract Factory es la siguiente:

• Cliente: La clase que llamará a la factoría adecuada ya que necesita crear uno de los objetos que provee la factoría, es decir, Cliente lo que quiere es obtener una instancia de alguno de los productos (ProductoA, ProductoB).

• AbstractFactory: Es de definición de la interfaces de las factorías. Debe de proveer un método para la obtención de cada objeto que pueda crear. ("crearProductoA()" y "crearProductoB()")

• Factorías Concretas: Estas son las diferentes familias de productos. Provee de la instancia concreta de la que se encarga de crear. De esta forma podemos tener una factoría que cree los elementos gráficos para Windows y otra que los cree para Linux, pudiendo poner fácilmente (creando una nueva) otra que los cree para MacOS, por ejemplo.

• Producto abstracto: Definición de las interfaces para la familia de productos genéricos. En el diagrama son "ProductoA" y "ProductoB". En un ejemplo de interfaces gráficas podrían ser todos los elementos: Botón, Ventana, Cuadro de Texto, Combo... El cliente trabajará directamente sobre esta interfaz, que será implementada por los diferentes productos concretos.

• • Producto concreto: Implementación de los diferentes productos. Podría ser por ejemplo "BotónWindows" y "BotónLinux". Como ambos implementan "Botón" el cliente no sabrá si está en Windows o Linux, puesto que trabajará directamente sobre la superclase o interfaz.

•Un ejemplo:Veremos un ejemplo didáctico y basado en el libro Head First Design Patterns, de O'Reilly.Supongamos que disponemos de una cadena de pizzerías. Para crear pizzas disponemos de un método abstracto en la clase Pizzería que será implementada por cada subclase de Pizzería.abstract Pizza crearPizza()Concretamente se creará una clase PizzeríaZona por cada zona, por ejemplo la Pizzería de New York sería PizzeriaNewYork y la de Californía PizzeríaCalifornia que implementarán el método con los ingredientes de sus zonas.

Las pizzas son diferentes según las zonas. No es igual la pizza de New York que la pizza de California. Igualmente, aunque usarán los mismos ingredientes (tomate, mozzarella...) no los obtendrán del mismo lugar, cada zona los comprará donde lo tenga más cerca. Así pues podemos crear un método creador de Pizza que seaPizza(FactoriaIngredientes fi);

• Como vemos utilizamos la factoría abstracta (no las concretas de cada zona, como podría ser IngredientesNewYork o IngredientesCalifornia). Pizza podrá obtener los ingredientes de la factoría independientemente de donde sea. Sería fácil crear nuevas factorías y añadirlas al sistema para crear pizzas con estos nuevos ingredientes. Efectivamente, en este ejemplo cliente es Pizza y es independiente de la Factoría usada.

El creador de la Pizza será el encargado de instanciar la factoría concreta, así pues los encargados de instanciar las factorías concretas serán las pizzerías locales. En PizzeríaNewYork podemos tener el método crearPizza() que realice el siguiente trabajo:Pizza crearPizza() {FactoríaIngredientes fi = new IngredientesNewYork();Pizza pizza = new Pizza(fi); // Uso de la factoríapizza.cortar();pizza.empaquetar();return pizza;}

SINGLENTOS O SINGULAR:• En algunas aplicaciones, hay clases que deben ser instanciadas una sola vez.

Por ejemplo, un sistema operativo debe tener solo un sistema de reloj y una compañía debe tener solo un sistema contable llamada singular o singleton.El patrón de diseño Singular (Singleton) asegura que se cree sólo una instancia de la clase y provee un método para acceder esa única instancia.

•Todos los objetos que utilizan una instancia de una clase Singular utilizan la misma instancia Estructura Observa que los miembros estáticos de la clase están subrayados . En este patrón de diseño El atributo estático instance contiene la única instancia de la clase. El constructor es definido como private de modo que las otras clases no puedan crear instancias. El método estático getSingletonInstance regresa la única instancia de la clase. La primera vez que este método es llamado, crea la única instancia En la línea 10, la variable estática y privada singletonInstance es inicializada con una instancia de la claseICarnegieInfo —singletonInstance será la única instancia de la clase ICarnegieInfo en una aplicación.

• En la línea 22, el constructor es definido como privado, de modo que otras clases no puedan crear instancias deICarnegieInfo . En la línea 36, la clase define un método estático llamado getSingletonInstance que regresa una referencia a la única instancia de ICarnegieInfo . a primera llamada al método getSingletonInstance crea la única instancia.

• ConsecuenciasEl patrón de diseño Singular tiene los siguientes beneficios: Una clase Singular puede controlar cómo y cuando el código cliente puede acceder a la única instancia. El código cliente no tiene la libertad de utilizar el operador new para crear una instancia de la clase Singular. En vez de eso, debe llamar a un método estático que regresa una referencia a la instancia única. Una clase Singular puede ser modificada fácilmente si los requerimientos cambian y la aplicación necesita limitar el número de instancias a un número diferente de uno.

FACTORY METHOD O METODO DE FÁBRICA:

• En diseño de software, el patrón de diseño Factory Method consiste en utilizar una clase constructora (al estilo del Abstract Factory) abstracta con unos cuantos métodos definidos y otro(s) abstracto(s): el dedicado a la construcción de objetos de un subtipo de un tipo determinado. Es una simplificación del Abstract Factory, en la que la clase abstracta tiene métodos concretos que usan algunos de los abstractos; según usemos una u otra hija de esta clase abstracta, tendremos uno u otro comportamiento.

Estructura• Las clases principales en este patrón son el creador y el

producto. El creador necesita crear instancias de productos, pero el tipo concreto de producto no debe ser forzado en las subclases del creador, porque entonces las posibles subclases del creador deben poder especificar subclases del producto para utilizar.La solución para esto es hacer un método abstracto (el método de la fábrica) que se define en el creador. Este método abstracto se define para que devuelva un producto. Las subclases del creador pueden sobrescribir este método para devolver subclases apropiadas del producto.Ejemplo de código (en Java)

• // Definimos la clase abstracta constructorapublic abstract class Creator{// Operación que realiza public Product anOperation() {

return factoryMethod();}

// Definimos método abstractoprotected abstract Product factoryMethod();}Ahora definimos el creador concreto.public class ConcreteCreator extends Creator{protected Product factoryMethod() {return new ConcreteProduct();}}Y definimos el producto y su implementación concreta.public interface Product{public void operacion();}

public class ConcreteProduct implements Product{public void operacion(){System.out.println("Una operación de este producto");}}Y un ejemplo de uso :public static void main(String args[]){Creator aCreator;aCreator = new ConcreteCreator();Product producto = aCreator.anOperation();producto.operacion();

PROTOTIPO:• Programación basada en prototipos es un estilo de programación

orientada a objetos en el cual, las "clases" no están presentes, y la re-utilización de procesos (conocida como herencia en lenguajes basados en clases) se obtiene a través de la clonación de objetos ya existentes, que sirven de prototipos, extendiendo sus funcionalidades. Este modelo es conocido como orientado a prototipos, o programación basada en instancias.

El original (y el más canónico) ejemplo de lenguaje prototipado es el lenguaje Self, desarrollado por David Ungar y Randall Smith. Sin embargo el paradigma sin clases está comenzando a popularizarse y ya ha sido implementado en lenguajes de programación como JavaScript, Cecil, NewtonScript, Ío, MOO, REBOL y varios otros.

Analógicamente

• Un ejemplo de instancia en un lenguaje de programación visual, sería tomar o arrastrar un objeto de la barra de herramientas o de la lista de librerías y colocarlo en el escritorio o escenario de trabajo (estamos creando una instancia de ese objeto, una copia). Si arrastramos 10 botones al entorno visual de trabajo, estamos creando una instancia del botón original, si a cada botón le cambiamos el nombre, tendremos 10 botones que heredan las mismas propiedades y métodos del objeto original. Tenemos como resultado que con un solo botón hicimos 10 y nuestro archivo pesara como si tuviese uno solo.De esta forma, partiendo de lo que conforma a un objeto original (propiedades y métodos) se reutilizan sus funciones creando una instancia del mismo en distintas partes del programa donde se necesite. Si el objeto original cambia o le es agregado algún nuevo atributo, las instancias lo heredaran puesto que son una copia del objeto original.

Comparación con el modelo basado en clases

• En lenguajes basados en clases los objetos pueden ser de dos tipos generales, las clases y las instancias. Las clases definen la disposición y la funcionalidad básicas de los objetos, y las instancias son objetos "utilizables" basados en los patrones de una clase particular. En este modelo, las clases actúan como colecciones de comportamiento (métodos) y estructuras que son iguales para todas las instancias, mientras que las instancias llevan los datos de los objetos. La distinción del papel se basa así sobre todo en una distinción entre la estructura y el comportamiento en un lado, y el estado en el otro.

• Los entusiastas de la programación basada en prototipos a menudo argumentan que los lenguajes basados en clases animan un modelo del desarrollo que se centra primero en la taxonomía y las relaciones entre las clases. En cambio, la programación basada en prototipos intenta animar al programador que se centre en el comportamiento de un cierto sistema de ejemplos y después de clasificar estos objetos en objetos arquetipos que se utilizan más adelante en una manera similar a las clases. Como tal, muchos sistemas basados en prototipos animan la alteración de prototipos durante tiempo de ejecución, mientras que solamente muy pocos sistemas orientados a objeto, basados en clase (como el primer sistema orientados al objetos dinámicos, Smalltalk) permiten que las clases sean alteradas durante la ejecución de un programa.Mientras que basan la amplia mayoría de sistemas basados en prototipos se hacen con lenguajes de programación interpretados y de tipos de datos dinámicos, es importante precisar que los sistemas de tipos de datos estáticos son técnicamente factibles. El lenguaje de programación de Omega que es basado en prototipos es un ejemplo de tal sistema, aunque según el Web site de Omega, Omega no es exclusivamente de tipos de datos estáticos, pero su "compilador puede elegir utilizar el tipo de dato estático donde es posible esto y puede mejorar la eficacia del programa.”

APLICACIÓN DE METODOS PARA LA OPERACIÓN CONTINUA DEL SISTEMA

• CIFRADO DE DATOS:• El cifrado de datos se puede entender como el hecho de guardar

algo valioso dentro de una caja fuerte cerrada con llave. Los datos confidenciales se cifran con un algoritmo de cifrado y una clave que los hace ilegibles si no se conoce dicha clave.

• Las claves de cifrado de datos se determinan en el momento de realizar la conexión entre los equipos. El uso del cifrado de datos puede iniciarse en su equipo o en el servidor al que se conecta.Conexiones de red admite dos tipos de cifrado:

• Microsoft MPPE, que utiliza cifrado RSA RC4.• Una implementación de Seguridad de Protocolo Internet (IPSec)

que utiliza cifrado de Estándar de cifrado de datos (DES).

INICIALIZACION DE OBJETOS:

• Para declarar o inicializar variables o ya sean objetos de referencia, el proceso es muy parecido al de crear las variables de tipo primitivo. La única diferencia es que se debe crear un objeto de la clase que apunta a la variable de referencia ante de que podamos inicializar dicho objeto.

Para poder obtener este proceso debemos seguir los siguientes pasos:

<!--[if !supportLists]-->- <!--[endif]-->Declara una referencia a un objeto, esto se hace mediante la especificación de un identificador y del tipo de objeto al que se quiere hacer referencia, que es la clase del objeto.

• <!--[if !supportLists]-->- <!--[endif]-->Crear nuestro nuevo objeto mediante la palabra reservada “new”.<!--[if !supportLists]-->- <!--[endif]-->Inicializar la variable que referencia al objeto asignándole el objeto.Veamos un ejemplo donde declaramos nuestra variable que referencia a un objeto e instanciamos nuestro objeto.

public class Fabrica{public static void main(String agrs[]){Auto miAuto;miAuto = new Auto();miAuto.mostrarInformacionAuto();}}

Bien, tenemos la clase Fabrica la cual contiene el método estático main, en donde nosotros instanciamos un objeto de tipo auto, el cual se llama miAuto y con el podemos invocar un método de la clase Auto que en este caso fue el método mostrarInformacionAuto().

DESTRUCCION DE OBJETOS:

• La destrucción de objetos es una función virtual que necesita ser implementada por una clase derivada que no sea abstracta. Las clases que contienen métodos virtuales puros son denominadas "abstractas". Éstas no pueden ser instanciadas directamente, y una subclase de una clase abstracta sólo puede ser instanciada directamente si todos los métodos virtuales puros han sido implementados por esa clase o una clase padre.

• Las destrucciones de objetos normalmente tienen una declaración (cabecera) pero no tienen definición (implementación). Como ejemplo, una clase base abstracta como "SimboloMatematico" puede ofrecer una función virtual pura como hazOperacion, y las clases derivadas "Suma" y "Resta" pueden implementar hazOperacion para ofercer implementaciones concretas. La implementación de hazOperacion no tendría sentido en la clase "SimboloMatematico" porque "SimboloMatematico" es un concepto abstracto cuyo comportamiento es definido solamente por cada tipo (subclase) de "SimboloMatematico" dado.De forma similar, una subclase dada de "SimboloMatematico" no sería completa sin una implementación de hazOperacion. Aunque los métodos virtuales puros normalmente no tienen implementación en la clase que los declara, en C++ permite hacer esto, ofreciendo un comportamiento por omisión en el que la clase derivada puede delegar si es apropiado.

• Las destrucciones de objetos también son utilizadas donde las declaraciones de métodos se utilizan para definir una interfaz para la que las clases derivadas proveerán todas las implementaciones. Una clase abstracta sirviendo como interfaz contiene sólo una destrucción de objetos, y ningún miembro de datos (variables, constantes, etc.) ni métodos ordinarios. El uso de clases puramente abstractas como interfaces funciona en C++ ya que éste soporta herencia múltiple. Debido a que muchos lenguajes orientados a objetos no soportan herencia múltiple, normalmente ofrecen un mecanismo por separado para hacer interfaces. Esto es así por ejemplo en Java.

MANEJO DE EXPRESIONES:• Una excepción en términos de lenguaje de programación es la indicación de un

problema que ocurre durante la ejecución de un programa. Sin embargo la palabra excepción se refiere que este problema ocurre con poca frecuencia generalmente cuando existe algún dato o instrucción que no se apega al funcionamiento del programa por lo que se produce un error. El manejo de excepciones permite al usuario crear aplicaciones tolerantes a fallas y robustos (resistentes a errores) para controlar estas excepciones y que pueda seguir ejecutando el programa sin verse afectado por el problema. En lenguaje java estas excepciones pueden manejarse con las clases que extienden el paquete Throwable de manera directa o indirecta, pero existen diversos tipos de excepciones y formas para manejarlas. Uso del manejo de excepciones El manejo de excepciones ayuda al programador a remover el código para manejo de errores de la línea principal de ejecución, además se pude elegir entre manejar todas las excepciones, las de cierto tipo o de las de grupos relacionados, esto hace que la probabilidad de pasar por alto los errores se reduzca y a la vez hace los programas más robustos.

Limpieza de pila

• En ocasiones cuando se hace lanza una excepción, pero no se atrapa en un enlace específico, la pila de llamadas se limpia y el programa intenta volverlo a atrapar en el siguiente bloque, esto se conoce como limpia de pila. Este proceso hace que el método en el que no se atrapó la excepción termina, todas sus variables quedan fuera del enlace y el control regresa a la instrucción que originalmente la invocó. La limpieza de pila de repetirá hasta que la excepción pueda ser atrapada porque de lo contrario se producirá un error a la hora de compilar.

Aserciones

• Las aserciones ayudan a asegurar la validez del programa al atrapar los errores potenciales e identificar los posibles errores lógicos del desarrollo. Estas pueden escribirse como comentarios para apoyar a la persona que desarrolla el programa. Algunos ejemplos son: Precondiciones y pos condiciones Estas características son utilizadas por los programadores para hacer un análisis de lo esperado del programa antes y después de su ejecución. Son importantes porque gracias a ellas se pueden detectar posibles fallas en el programa y corregirlas. Las precondiciones son verdaderas cuando se invoca a un método, estas describen las características del método y las expectativas que se tienen en el estado actual del programa. Si no se cumplen las precondiciones el comportamiento del método es indefinido por lo que se lanza una excepción que esté preparada o continuar con el programa esperando el error. Las pos condiciones describen las restricciones en el entorno y cualquier efecto secundario del método. Es recomendable escribirlas para saber que esperar en un futuro si es que se hacen modificaciones.Las aserciones ayudan a asegurar la validez del programa al atrapar los errores potenciales e identificar los posibles errores lógicos del desarrollo. Estas pueden escribirse como comentarios para apoyar a la persona que desarrolla el programa. Algunos ejemplos son: Precondiciones y pos condiciones Estas características son utilizadas por los programadores para hacer un análisis de lo esperado del programa antes y después de su ejecución. Son importantes porque gracias a ellas se pueden detectar posibles fallas en el programa y corregirlas. Las precondiciones son verdaderas cuando se invoca a un método, estas describen las características del método y las expectativas que se tienen en el estado actual del programa. Si no se cumplen las precondiciones el comportamiento del método es indefinido por lo que se lanza una excepción que esté preparada o continuar con el programa esperando el error. Las pos condiciones describen las restricciones en el entorno y cualquier efecto secundario del método. Es recomendable escribirlas para saber que esperar en un futuro si es que se hacen modificaciones.

• El manejo de excepciones ayuda a lidiar con los errores de una aplicación por medio de la manipulación del código para hacer programas más robustos. Además existen herramientas que ayudan a manejarlas tal es el caso de los bloques tratar que encierran el código que puede lanzar una excepción y los bloques atrapar que lidian con las excepciones que surjan. También existen técnicas que el programador utiliza para conocer el posible funcionamiento del programa y detectar los errores que pueda contener.Ejemplo de manejo de excepción en Java:import java.io.IOException;

• // ...

public static void main(String[] args) {try {// Se ejecuta algo que puede producir una excepción} catch (IOException e) {// manejo de una excepción de entrada/salida} catch (Exception e) {// manejo de una excepción cualquiera} finally {// código a ejecutar haya o no excepción}}Ejemplo de manejo de excepción en Delphi:procedure TForm1.Button1Click(Sender : TObject);begintrytrya := b / c;finally// Este código siempre se ejecuta, independientemente de si ocurre o no una excepción.end;excepton e:EZeroDivide do// Manejo de la excepción División por cero.on e:Exception do// Manejo de una excepción "genérica".end;end;

• Ejemplo de manejo de excepción en Python:try:result = x / yexcept ZeroDivisionError:print "division by zero!"else:print "result is", resultfinally:print "executing finally clause"Ejemplo de manejo de excepcion en Adatype T_Matriz is array (Positive range <>,Positive range <>) of Integer; procedure Rellenar_Matriz (Matriz : in T_Matriz;K : in Integer;Q : in Integer);isbeginbeginMatriz (K,Q) := 3;exceptionwhen Constraint_Error =>Put_Line ("Las posiciones se salen del rango de la matriz");end;end Rellenar_Matriz;