• No se han encontrado resultados

PROGRAMACION 2. MSIG. Antonio Rodríguez Andrade

N/A
N/A
Protected

Academic year: 2022

Share "PROGRAMACION 2. MSIG. Antonio Rodríguez Andrade"

Copied!
65
0
0

Texto completo

(1)

PROGRAMACION 2

MSIG. Antonio Rodríguez Andrade

(2)

Objetivos

• Que el estudiante adquiera habilidades y destrezas en el manejo de técnicas especiales de programación orientada a objetos

(3)

Introducción

(4)

Paradigmas de programación

(5)

Paradigmas de programación

En la programación imperativa, de la cual hacen parte muchos de los principales lenguajes de programación tales como C, Java y PHP, un programa se describe en términos de instrucciones, condiciones y pasos que modifican el estado de un programa al permitir la mutación de

variables, todo esto con el objetivo de llegar a un resultado. En contraparte, en la programación declarativa un programa se describe en términos de proposiciones y afirmaciones que son

declaradas para describir el problema, sin especificar los pasos para resolverlo; en este tipo de programas, el estado no puede ser modificado ya que todos los tipos de datos son inmutables.

De esta familia hacen parte lenguajes como Scala, Haskell, Erlang y Elixir.

(6)

Javascript

Erlang 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,…

(7)

Técnicas de programación

Programación declarativa

Programación estucturada

Programación modular

Programación ooorientada a objetos

(8)

Programación declarativa

Paradigma de programación que está basado en el desarrollo de programas especificando o “declarando” un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a la computadora qué es lo que se desea obtener o qué es lo que se está buscando).

(9)

Programación declarativa

Paradigma de programación que está basado en el desarrollo de programas especificando o “declarando” un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a la computadora qué es lo que se desea obtener o qué es lo que se está buscando).

(10)

Tipos

• Los lenguajes lógicos, como Prolog.

• Los lenguajes algebraicos, como Maude y SQL

• Los lenguajes funcionales, como Haskell y Erlang

(11)

Ventajas

Se ha dicho que los lenguajes declarativos tienen la ventaja de ser razonados matemáticamente, lo que permite el uso de mecanismos matemáticos para optimizar el rendimiento de los programas.

Son fiables, elegantes y expresivos.

(12)

Programación estructurada

paradigma de programación orientado a mejorar la claridad, calidad y tiempo de desarrollo de un programa de computadora, utilizando únicamente subrutinas y tres estructuras: secuencia, selección (if y switch) e iteración (bucles for y while), considerando innecesario y contraproducente el uso de la instrucción de transferencia incondicional (GOTO), que podría conducir a “código espagueti”, que es mucho más difícil de seguir y de mantener, y era la causa de muchos errores de programación.

(13)

Ventajas

• Los programas son más fáciles de entender, pueden ser leídos de forma secuencial y no hay necesidad de hacer engorrosos seguimientos en saltos de líneas (GOTO) dentro de los bloques de código para intentar entender la lógica.

• La estructura de los programas es clara, puesto que las instrucciones están más ligadas o relacionadas entre sí.

• Reducción del esfuerzo en las pruebas y depuración.

• El seguimiento de los fallos o errores del programa (debugging) se facilita debido a su estructura más sencilla y comprensible, por lo que los errores se pueden detectar y corregir más fácilmente.

(14)

Lenguajes

• ALGOL, Pascal, PL/I y Ada

(15)

Programación modular

Paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible y manejable.

Al aplicar la programación modular, un problema complejo debe ser dividido en varios subproblemas más simples, y estos a su vez en otros subproblemas más simples. Ésta técnica se llama refinamiento sucesivo, divide y vencerás ó análisis descendente (Top-Down).

(16)

Ventajas

• Facilitan la escritura y depuración de un programa

• Localización rápida de errores

• La modificación de un módulo no afecta a los demás

• Un grupo de instrucciones que se repite en varias partes de un programa puede incluirse en un módulo y llamarlo en el programa.

(17)

Lenguajes

• C++

(18)

Programación orientada a objetos

Paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento.

(19)

Objeto

Compuesto de datos e información

Estado Está definido por los

métodos o mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se pueden realizar con él

Comporta miento

Propiedad que lo diferencia del resto.

Identidad

Instancia de una clase. Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos), los mismos que consecuentemente reaccionan a eventos. Se corresponden con los objetos reales del mundo que nos rodea, o con objetos internos del sistema (del programa). Es una instancia a una clase.

(20)

Conceptos básicos

Clases en POO

Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos definiendo, aunque por encima, sus formas.

Propiedades en clases

Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo.

Nos podemos hacer a la idea de que las propiedades son algo así como variables donde almacenamos datos relacionados con los objetos.

(21)

Conceptos básicos

Métodos en las clases

Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos. Los métodos son como funciones que están asociadas a un objeto.

Objetos en POO

Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar. Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto.

(22)

• Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche. Describa los atributos y los métodos

Cómo se piensa en objetos

(23)

• El diagrama de clase es una representación semi-gráfica de la clase, que ayuda al programador a visualizar cuales son las propiedades y métodos que contendrá una clase o conjunto de clases en particular.

En un diagrama de clase se pueden representar también relaciones entre clases.

Diagrama de Clase

(24)

Conociendo el lenguaje

• Operadores lógicos

(25)

Conociendo el lenguaje

Procedencia operadores lógicos

• En primer lugar se realizarán las operaciones indicadas entre paréntesis.

• Luego la negación.

• Después las multiplicaciones, divisiones y el resto de la división.

• Finalmente, las sumas y las restas.

• En caso de tener igual prioridad, se analizan de izquierda a derecha.

(26)

Conociendo el lenguaje

Ejercicios propuestos

• Crea un programa que calcule el producto de los números 121 y 132, usando variables.

• Crea un programa que calcule la suma de 285 y 1396, usando variables.

• Crea un programa que calcule el resto de dividir 3784 entre 16, usando variables.

(27)

Conociendo el lenguaje

Variables

• Los nombres de variables (lo que se conoce como "identificadores") pueden estar formados por letras, números o el símbolo de

subrayado (_) y deben comenzar por letra o subrayado. No deben

tener espacios intermedios. También hay que recordar que las vocales acentuadas y la eñe son problemáticas, porque no son letras

"estándar" en todos los idiomas, así que no se pueden utilizar como parte de un identificador en la mayoría de lenguajes de

programación.

Nota: Las mayúsculas y minúsculas se consideran diferentes

(28)

Conociendo el lenguaje

Ejercicios propuestos interacciones con el usuario

• Crea un programa que calcule el producto de dos números introducidos por el usuario.

• Crea un programa que calcule la división de dos números

introducidos por el usuario, así como el resto de esa división.

• Suma tres números tecleados por usuario.

• Pide al usuario una cantidad de "millas náuticas" y muestra la equivalencia en metros, usando: 1 milla náutica = 1852 metros.

(29)

Conociendo el lenguaje

Estructuras de control

if Switch

(30)

Conociendo el lenguaje

Operadores relacionales Operadores lógicos

(31)

Conociendo el lenguaje

Ejercicios propuestos

• Crea un programa que pida al usuario un número entero y diga si es par .

• Crea un programa que pida al usuario dos números enteros y diga cuál es el mayor de ellos.

• Crea un programa que pida al usuario dos números enteros y diga si el primero es múltiplo del segundo.

• Crea un programa que pida al usuario un número entero y responda si es múltiplo de 2 o de 3.

• Crea un programa que pida al usuario un número entero y responda si es múltiplo de 2 y de 3 simultáneamente.

• Crea un programa que pida al usuario un número entero y responda si es múltiplo de 2 pero no de 3.

(32)

Conociendo el lenguaje

Ejercicios propuestos

• Crea un programa que pida un número del 1 al 5 al usuario, y escriba el nombre de ese número, usando "switch" (por ejemplo, si introduce

"1", el programa escribirá "uno").

(33)

Conociendo el lenguaje

Estructuras repetitivas (bucles)

while do

while for foreach

(34)

Conociendo el lenguaje

Ejercicios propuestos

• Crea un programa que pida al usuario su contraseña (numérica).

Deberá terminar cuando introduzca como contraseña el número 1111, pero volvérsela a pedir tantas veces como sea necesario.

• Crea un "calculador de cuadrados": pedirá al usuario un número y

mostrará su cuadrado. Se repetirá mientras el número introducido no sea cero

• Crea un programa que escriba en pantalla los números del 1 al 10, usando "while".

(35)

Conociendo el lenguaje

Ejercicios propuestos

• Crear un programa que pida números positivos al usuario, y vaya

calculando y mostrando la suma de todos ellos (terminará cuando se teclea un número negativo o cero).

• Crea un programa que escriba en pantalla los números del 1 al 10, usando "do..while".

• Crea un programa que escriba 6 líneas de texto, cada una de las cuales estará formada por los números del 1 al 7. Debes usar dos variables llamadas "linea" y "numero", y ambas deben estar

declaradas en el "for".

(36)

Conociendo el lenguaje

Ejercicios propuestos

• Crea un programa que cuente cuantas veces aparece la letra 'a' en una frase que teclee el usuario, utilizando "foreach".

(37)

Conociendo el lenguaje: Excepciones

Try Catch

(38)

Conociendo el lenguaje

Tipos de datos para números enteros

(39)

Conociendo el lenguaje

Operaciones abreviadas

(40)

Conociendo el lenguaje

Ejercicios propuestos

• ¿Cuál sería el resultado de las siguientes operaciones? a=5; b=a+2; b-

=3; c=-3; c*=2; ++c; a*=b; Crea un programa que te lo muestre. ".

(41)

Conociendo el lenguaje

Tipos de datos para números reales

(42)

Conociendo el lenguaje: char y string

Cadena de caracteres

(43)

Conociendo el lenguaje

Tipos de datos booleanos

En C# tenemos también un tipo de datos llamado "booleano" ("bool"), que puede tomar dos valores: verdadero ("true") o falso ("false")

(44)

Conociendo el lenguaje

Arreglos

Un programa que calcule el determinante de una matriz de 2x2. (4.2.5)

(45)

Conociendo el lenguaje

Ejercicios propuestos

• Un programa que pida al usuario 4 números, los memorice (utilizando un array), calcule su media aritmética y después muestre en pantalla la media y los datos tecleados.

• Crea un programa que pida al usuario 6 números enteros cortos y luego los muestre en orden inverso (pista: usa un array para

almacenarlos y "for" para mostrarlos).

• Crea un programa que pregunte al usuario cuántos números enteros va a introducir (por ejemplo, 10), le pida todos esos números, los

guarde en un array y finalmente calcule y muestre la media de esos números.

(46)

Conociendo el lenguaje

Ejercicios propuestos

• Un programa que almacene en una tabla el número de días que tiene cada mes (supondremos que es un año no bisiesto), pida al usuario que le indique un mes (1=enero, 12=diciembre) y muestre en pantalla el número de días que tiene ese mes.

(47)

Estructuras

Agrupación de datos, llamados campos, los cuales no necesariamente son del mismo tipo. Los datos que forman un "struct" pueden ser

públicos o privados

(48)

Conociendo el lenguaje

Ejercicios propuestos

• Crea un "struct" que almacene datos de una canción en formato MP3:

Artista, Título, Duración (en segundos), Tamaño del fichero (en KB).

Un programa debe pedir los datos de una canción al usuario,

almacenarlos en dicho "struct" y después mostrarlos en pantalla.

• Amplia el programa para que almacene datos de hasta 100 canciones.

Deberá tener un menú que permita las opciones: añadir una nueva canción, mostrar el título de todas las canciones, buscar la canción que contenga un cierto texto (en el artista o en el título).

(49)

Cadenas

Un programa que te pida tu nombre y lo muestre en pantalla

separando cada letra de la siguiente con un espacio. Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla "J u a n".

Un programa que pida una frase al usuario y la muestra en orden inverso (de la última letra a la primera).

Un programa que te pida tu nombre y lo muestre en pantalla como un triángulo creciente. Por ejemplo, si tu nombre es "Juan", debería

aparecer en pantalla:

(50)

Cadenas (Split)

Un programa que pida al usuario una frase y muestre sus palabras en orden inverso.

Un programa que pida al usuario varios números separados por espacios y muestre su suma.

Un programa que pida tu nombre y lo muestre con un espacio entre cada par de letras, usando "foreach".

(51)

Ejemplo completo

Crearemos un programa que pueda almacenar datos de hasta 1000 ficheros (archivos de ordenador). Para cada fichero, debe guardar los siguientes

datos: Nombre del fichero, Tamaño (en KB, un número de 0 a

8.000.000.000). El programa mostrará un menú que permita al usuario las siguientes operaciones:

1. Añadir datos de un nuevo fichero

2. Mostrar los nombres de todos los ficheros almacenados

3. Mostrar ficheros que sean de más de un cierto tamaño (por ejemplo, 2000 KB).

4. Ver todos los datos de un cierto fichero (a partir de su nombre)

5. Salir de la aplicación (como no usamos ficheros, los datos se perderán).

(52)

Funciones

Crea una función llamada "DibujarCuadrado3x3", que dibuje un cuadrado formato por 3 filas con 3 asteriscos cada una. Incluye un "Main" para probarla.

Crea una función "DibujarCuadrado" que dibuje en pantalla un cuadrado del ancho (y alto) que se indique como parámetro. Completa el programa con un Main que permita probarla.

Crea una función "DibujarRectangulo" que dibuje en pantalla un rectángulo del ancho y alto que se indiquen como parámetros. Incluye un Main para probarla.

Crea una función "DibujarRectanguloHueco" que dibuje en pantalla un rectángulo hueco del ancho y alto que se indiquen como parámetros, formado por una letra que también se indique como parámetro. Completa el programa con un Main que pida esos datos al usuario y dibuje el rectángulo.

(53)

Funciones

Crea una función "Cubo" que calcule el cubo de un número real (float) que se indique como parámetro. El resultado deberá ser otro número real.

Prueba esta función para calcular el cubo de 3.2 y el de 5.

Crea una función "Menor" que calcule el menor de dos números enteros que recibirá como parámetros. El resultado será otro número entero.

Crea una función llamada "Signo", que reciba un número real, y devuelva un número entero con el valor: -1 si el número es negativo, 1 si es positivo o 0 si es cero.

Crea una función "MostrarPerimSuperfCuadrado" que reciba un número entero y calcule y muestre en pantalla el valor del perímetro y de la superficie de un cuadrado que tenga como lado el número que se ha indicado como parámetro.

(54)

Programacion Orientada a Objetos

• Clase: Plantilla para la creación de objetos de datos según un modelo predefinido. Las clases se utilizan para representar entidades o

conceptos, como los sustantivos en el lenguaje. Está formado por atributos y métodos

• Objeto: Instancia de una clase

(55)

Ejercicios de Clases

Crea una clase llamada Persona, en el fichero "persona.cs". Esta clase deberá tener un atributo "nombre", de tipo string. También deberá tener un método "SetNombre", de tipo void y con un parámetro string, que permita cambiar el valor del nombre. Finalmente, también tendrá un método "Saludar", que escribirá en pantalla "Hola, soy " seguido de su nombre. Crea también una clase llamada PruebaPersona. Esta clase deberá contener sólo la función Main, que creará dos objetos de tipo Persona, les asignará un nombre a cada uno y les pedirá que saluden.

Para guardar información sobre libros, vamos a comenzar por crear una clase "Libro", que contendrá atributos "autor", "titulo", "ubicacion" (todos ellos strings) y métodos Get y Set adecuados para leer su valor y cambiarlo. Prepara también un Main (en la misma clase), que cree un objeto de la clase Libro, dé valores a sus tres atributos y luego los muestre.

Crea una clase "Coche", con atributos "marca" (texto), "modelo" (texto), "cilindrada"

(número entero), potencia (número real). No hace falta que crees un Main de prueba.

(56)

Programacion Orientada a Objetos

• Constructores: El objetivo de un constructor es el de inicializar un objeto cuando éste es creado. Asignaremos los valores iniciales así como los procesos que ésta clase deba realizar.

Se utiliza para crear tablas de métodos virtuales y poder así desarrollar el polimorfismo, una de las herramientas de la programación orientada a objetos (POO). Al utilizar un constructor, el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un paréntesis.

(57)

Programacion Orientada a Objetos

• Constructor por defecto: Un constructor por defecto es un constructor sin parámetros que no hace nada. Sin embargo será invocado cada vez que se construya un objeto sin especificar ningún argumento, en cuyo caso el objeto será iniciado con los valores predeterminados por el sistema (los atributos numéricos a ceros, los alfanuméricos a nulos, y las referencias a objetos a null)

(58)

Programacion Orientada a Objetos

• Destructores: Un destructor en algunos lenguajes de programación orientados a objetos es un método de una clase que se llama justo antes de una instancia de esa clase y se elimina de la memoria.

(59)

Programacion Orientada a Objetos

• Herencia: Mecanismo que permite crear nuevas clases partiendo de una clase o de una jerarquía de clases preexistente evitando con ello el rediseño, la modificación y verificación de la parte ya implementada

(60)

Ejercicios de Herencia

Crea una variante ampliada del ejercicio de clase de Persona. En ella, la clase Persona no cambia. Se creará una nueva clase PersonaInglesa, en el fichero

"personaInglesa.cs". Esta clase deberá heredar las características de la clase

"Persona", y añadir un método "TomarTe", de tipo void, que escribirá en pantalla

"Estoy tomando té". Crear también una clase llamada PruebaPersona2, en el fichero "pruebaPersona2.cs". Esta clase deberá contener sólo la función Main, que creará dos objetos de tipo Persona y uno de tipo PersonaInglesa, les asignará un nombre, les pedirá que saluden y pedirá a la persona inglesa que tome té.

Ejercicio Libro: crea una clase "Documento", de la que Libro heredará todos sus atributos y métodos. Ahora la clase Libro contendrá sólo un atributo "paginas", número entero, con sus correspondientes Get y Set.

Crea una clase "Vehiculo", de la que heredarán "Coche" y una nueva clase "Moto".

La clase Vehiculo contendrá todos los atributos y métodos que antes estaban en Coche, y tanto Coche como Moto heredarán de ella

(61)

Polimorfismo

• El concepto de "polimorfismo" se refiere a que una misma función (un método) puede tener varias formas, ya sea porque reciba distintos tipos de parámetros y/o en distinta cantidad, o porque incluso se aplique a distintos objetos.

(62)

Ejercicios Polimorfismo

Añade a la clase "Persona" un nuevo método Saludar, que reciba un parámetro, que será el texto que debe decir esa persona cuando salude.

Amplía el proyecto del ejercicio (Libro): la clase Libro tendrá un segundo constructor que permita dar valores al autor y el título, pero no a la ubicación, que tomará el valor por defecto "No detallada".

La clase Libro tendrá un segundo constructor que permita dar valores al autor y el título, pero no a la ubicación, que tomará el valor por defecto

"No detallada".

(63)

Static

• La palabra "static" delante de un atributo (una variable) de una clase, indica que es una "variable de clase", es decir, que su valor es el

mismo para todos los objetos de la clase.

• De igual modo, si un método (una función) está precedido por la palabra "static", indica que es un "método de clase", es decir, un

método que se podría usar sin necesidad de declarar ningún objeto de la clase.

(64)

Ejercicios

• Amplía el proyecto Libro, de modo que permita guardar hasta 1.000 libros. Main mostrará un menú que permita añadir un nuevo libro o ver los datos de los ya existentes.

(65)

Preguntas

Referencias

Documento similar

1. LAS GARANTÍAS CONSTITUCIONALES.—2. C) La reforma constitucional de 1994. D) Las tres etapas del amparo argentino. F) Las vías previas al amparo. H) La acción es judicial en

Esta asimilación que desde la cultura Occidental se hace con los lenguajes creativos de artistas procedentes de otros territorios puede argumentarse por el hecho

Los métodos estadísticos de Inferencia paramétrica suelen emplear la media aritmética; pero la media de una distribución asimétrica no es un buen índice del conjunto de datos.

Assaisonnement/Épices, Fruits, Poisson, Charcuterie, Produits Laitiers, Légumes, Fruits de Mer, Viande.. Légumes Fruits Viande Poisson Frutis de

Los 4 experimentos de 4000 datos cada uno, para cada ángulo de roll y pitch, fueron suficientes para mostrar la variación que había entre cada experimento a pesar

Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados

En el presente informe se describen los resultados obtenidos durante la práctica realizada en el laboratorio de suelos para le determinación de las propiedades físicas del

La heterogeneidad clínica de esta patolo- gía hizo que se considerasen a numerosos genes de pro- teínas de la matriz extracelular (elastina, fibronectina, genes de los colágenos de