Parte I: Programación En Un Lenguaje Orientado A Objetos - Unican.es

Transcription

Parte I: Programación en un lenguajeorientado a objetos1. Introducción a los lenguajes de programación Lenguajes de programación. Compiladores e intérpretes. El lenguaje Python.Encapsulamiento de datos y algoritmos. Estructura de un programa. Funciones.Estilo de codificación.2. Datos y expresiones3. Clases4. Estructuras algorítmicas5. Estructuras de Datos6. Tratamiento de errores7. Entrada/salida8. Herencia y polimorfismowww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/221

1.1. Lenguajes de programaciónUn computador es una máquina capaz de almacenar información en sumemoria y ejecutar una secuencia de instrucciones cada instrucción le dice al computador lo que debe hacer; porejemplo, sumar dos números, restarlos o tomar una decisión enfunción de los datos disponiblesLas instrucciones de los computadores están escritas en lenguajes deprogramación el lenguaje natural, como el español, es demasiado complicado paraun computador los lenguajes de programación son más sencillos y el computador loscomprendewww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/222

Números binariosLos computadores se construyen mediante circuitos electrónicosdigitales digital viene de dígito o númeroLa electrónica digital solo maneja dos números: el 0 y el 1 normalmente uno es un valor de voltaje bajo, y el otro un voltaje altoLos números compuestos por ceros y unos se llaman binarios Podemos poner muchas cifras binarias una a continuación de otra,para representar números tan grandes como necesitemos Por ejemplo, prueba a poner en google: número binario 10011010- obtendremos: 128 0 0 16 8 0 2 0 154Afortunadamente, como veremos enseguida, aunque el computadorusa números binarios nosotros no necesitamos usarloswww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/223

Instrucciones de un programaLas instrucciones de un programa son códigos numéricos binariosalmacenados en la memoria del computadorEjemplo de lenguaje máquina para el microprocesador 68000: suma dedos enteros:Dirección Código Binario 1000 1002 1004 1006 1008 www.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/224

Programación del computadorLa programación mediante códigos numéricos se conoce comolenguaje máquina es muy compleja para los humanosPor ello se necesitan lenguajes de programación más cercanos a losprogramadoreswww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/225

Lenguajes de bajo nivelNecesitamos escribir programas en un lenguaje más cómodo para loshumanosUna primera aproximación es el lenguaje de bajo nivel o ensamblador- cada instrucción corresponde a una instrucción de lenguajemáquina- es dependiente de la máquina: no portableEjemplo de lenguaje ensamblador: suma de dos enteros:Dirección Código BinarioCódigo Ensamblador 1000 1002 1004 1006 1008 100AMOVE.W 100www.istr.unican.esUNIVERSIDADDE CANTABRIAADD.W 1202,D5MOVE.W D5, 1204 Michael González Harbour, 4/feb/226

Lenguajes de alto nivelPara evitar las desventajas de los lenguajes ensambladores, se hancreado los lenguajes de alto nivel- tienen instrucciones más abstractas y avanzadas- son independientes de la máquina- en la práctica, mucho más productivosEjemplo de instrucción en lenguaje de alto nivel: suma de dos enteros:Dirección Código BinarioCódigo EnsambladorAlto Nivel 1000 1002 1004 1006 1008 100AMOVE.W 1200,D5Z X .istr.unican.esUNIVERSIDADDE CANTABRIAADD.W 1202,D5MOVE.W D5, 1204 Michael González Harbour, 4/feb/227

1.2 Compiladores e intérpretesSon aplicaciones que traducen un programa escrito en un lenguaje deprogramación, a lenguaje máquina: lenguaje ensamblador: se traduce mediante un programaensamblador lenguajes de alto nivel: se traducen mediante compiladores eintérpretes- los compiladores traducen el programa de aplicación antes de que éstese ejecute- los intérpretes van traduciendo el programa de aplicación a medidaque se va ejecutando-www.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/228

Ejemplos de lenguajes de alto nivel:Los inicios Fortran: 1956, para cálculo científico. Estándar actual: 2018 Cobol: 1960, para aplicaciones de gestión. Estándar actual: 2014 Lisp: 1958, para inteligencia artificial. Estándar actual: 2007- tiene un dialecto importante llamado Scheme Basic: 1964, para docencia, interpretado- una versión popular: Visual Basic (Microsoft)www.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/229

Ejemplos de lenguajes:programación estructuradaLa programación estructurada mejora la claridad, calidad y tiempo dedesarrollo recurriendo únicamente a instrucciones con un comienzo y unfinal claros Pascal: 1969, para docencia, programación estructurada- Ha reaparecido como Delphi (1995-ahora), una versión orientada aobjetos C: 1972, para programación del software del sistema. Estándaractual: 2018 Ada 83: 1983, para sistemas de alta integridad, incluyendo sistemasde tiempo realwww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2210

Ejemplos de lenguajes:programación orientada a objetosLa programación orientada a objetos (OOP) aumenta la reutilización decódigo basándose en técnicas como la abstracción, la herencia y elpolimorfismo Smaltalk: 1980, creado para uso educativo. Estándar actual 1998 C : 1987, extensión mejorada del C. Estándar actual 2020 Java: 1995, mejora la fiabilidad y añade programación distribuida.Estándar de facto Ada: se añade programación orientada a objetos. Estándar actual2016 C# (C sharp): Similar a Java, divergen a partir de 2005. Estándaractual 2018www.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2211

Ejemplos de lenguajes:programación orientada a objetos Objective-C: es un superconjunto de C con programación orientadaa objetos- se origina en los años 80 por Apple. Versión actual: 2017 Swift: Creado por Apple en 2014 a partir de Objective C, con mejorasy mayor fiabilidad GO: Creado por Google en 2009, a partir de C, para hacerprogramación con mayor fiabilidadwww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2212

Ejemplos de lenguajesLenguajes de guiones o “scripts”:Normalmente interpretados, pensados para aplicaciones no muygrandes o para hacer tareas en el entorno de otras aplicacionesAlgunos de estos lenguajes han evolucionado hasta convertirse enlenguajes de programación de propósito general PHP: desarrollado para hacer páginas Web dinámicas Perl: eficaz para operaciones de manipulación de textos Python: hace énfasis en la legibilidad JavaScript: soportado por muchos navegadores Web para hacerpáginas web interactivas Ruby: derivado de Lisp, con OOP del estilo de Smalltalk R: lenguaje para cálculo estadístico y representación gráficawww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2213

Resumen de características de loslenguajes de programaciónlenguajesde cturadoslenguajesOOPPortableNo portable RSIDADDE CANTABRIAlenguajeensambladormuy pocoproductivo-productivo Michael González Harbour, 4/feb/22 14

Ranking de lenguajes de programaciónwww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2215

Ranking de lenguajes de programaciónwww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2216

Ranking de lenguajes de programaciónIEEE SpectrumTop E CANTABRIA Michael González Harbour, 4/feb/2217

Notas:Fuentes:http://www.tiobe.com/tiobe-index/ Fecha de consulta: Feb 2022https://madnight.github.io/githut/#/pull requests/2021/4 Fecha de consulta: Feb uages/ Fecha de consulta: Feb 2022Los diferentes rankings usan criterios distintos, y por ello no salen las mismas listasEn todo caso, como podemos ver, el lenguaje Python es uno de los más populares en la actualidadwww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2218

1.3 El lenguaje PythonDesarrollado por Guido van Rossum (NL) en 1991Objetivos generales: Tipos dinámicos Gestión automática de memoria Objetos dinámicos, sin declaración Soporta varios paradigmas de programación- orientada a objetos, estructurada, funcional Tiene una amplia librería estándar y numerosas contribuciones de lacomunidad de usuarios Las principales distribuciones son de código abiertowww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2219

Versiones de PythonHasta hace poco coexistían las versiones 2 y 3, que son incompatibles Inicialmente existía más software hecho para la versión 2 Sin embargo, la versión 2 ha sido discontinuada con la distribución2.7.18 (Abr 2020)La versión actual es la 3.10.2 (Ene 2022)Trabajaremos con la versión 3.9 que al principio del curso es la queinstala por defecto la distribución recomendada: anacondawww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2220

Ventajas de Python muy legible (comparado con C/C ) código más compacto muchas librerías código abierto estructuras de datos integradas en la gramática del lenguaje alta productividadwww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2221

Python es interpretadoAl ser interpretado es menos eficiente que otros lenguajes clásicos dependiendo del tipo de aplicación:- Java es entre 2 y 50 veces más rápido que CPython- C es entre 3 y 100 veces más rápido que CPythonPrincipales implementaciones: CPython: implementación de referencia- escrita en C- compila el código fuente a un lenguaje intermedio, más simple(llamado bytecode)- el bytecode es interpretado por una máquina virtual PyPy: intérprete más eficiente- usa la tecnología just-in-time compile (compilar sobre la marcha)- 7 veces más rápido que CPython, en promediowww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2222

1.4. Encapsulamiento de datos yalgoritmosEs el principio fundamental de la programación orientada a objetos(OOP)Cada "trozo" o módulo de programa contiene en su interior: datos- guardados en memoria en "recipientes" o variables de diversos tipos(números, texto, .) algoritmos que trabajan con estos datos- secuencias de instrucciones descritas dentro de funcionesEn OOP se llama clase a uno de estos módulos En Python un módulo puede contener una clase o variaswww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2223

Ejemplo de clase con datos y algoritmosNombre de la clasedatos de la clase(atributos):3 notas y la nota mediafunciones(métodos)NotasAlumnon1, n2, n3: numero enteromedia: número realcalcula media:suma n1 n2 n3media suma / 3sube notas:n1 n1 1n2 n2 1n3 n3 1algoritmos:secuencias de instruccionesel orden importaLa asignación: operación de asignación:copia el valor derecho en la variable o dato de la izquierdadato valoren Python lo representaremos con el signo www.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2224

1.5. Estructura de un programaUn programa python es un conjunto de uno o varios módulos con:- datos, funciones, clases e instrucciones sueltas- los módulos se pueden organizar en paquetes¡No se puedenusar desde fuera!Suele haber un módulo inicial, desde el que se cargan otros- es habitual que sus instrucciones estén en una función llamada main()Proyectomódulo 2módulo 3módulo 4módulo inicialdatos, clasesotras funcionesmain()www.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/22módulo 5usa25

Estructura de un móduloEl módulo más sencillo es un programa con una sola instrucción Hola Mundo: pone un mensaje de saludo en la pantallaEscribiremos un módulo en un fichero llamado hola mundo.py, conesta instrucción:Función que pone en pantallaprint("Hola, ¿qué tal?")el mensaje indicadoEl mensaje de texto se poneentre " " o ' 'Al ejecutar el módulowww.istr.unican.esUNIVERSIDADDE CANTABRIAen el intérprete, se muestra el mensaje Michael González Harbour, 4/feb/2226

Un principio fundamental de laprogramaciónUn programa se escribe una única vez y se lee muchas veceswww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2227

Documentación de un móduloEs recomendable indicar al principio de un módulo: qué sistema de codificación de caracteres se usa- especialmente importante en entornos con lenguas diferentes al inglés una breve descripción autor y fechaEjemplo# -*- coding: utf-8 -*"""Pone un mensaje de bienvenida en pantalla@author: Michael González@date : 18/ene/2022"""print("Hola, ¿qué tal?")www.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2228

Carga y ejecución del móduloLa ejecución del módulo en el intérprete carga el módulo y ejecuta susinstrucciones usar el botónSin embargo, tras la carga, el módulo no podría ejecutarse desde otro Para resolverlo pondremos nuestra instrucción dentro de una funciónwww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2229

1.6 FuncionesSon conjuntos de instrucciones agrupadas bajo un nombre se pueden invocar repetidas veces, para ejecutar sus instrucciones se les pueden pasar datos para operar con ellos pueden devolver un resultadoHabitualmente encapsulamos un algoritmo dentro de una funciónwww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2230

Estructura de una funciónEstructura:Datos que necesita la funcióndef nombre funcion(argumentos):"""Breve descripciónComentario de documentación,SangradoDescripción"""también llamado DADDE CANTABRIA Michael González Harbour, 4/feb/2231

Invocar (ejecutar) una funciónPara invocar la función se pone su nombre y los argumentos o datosconcretosnombre funcion(datos concretos)Ejemplo:print("Hola, ¿qué tal?")www.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2232

Hola Mundo "bien estructurado"Función escrita en el fichero hola mundo.py:No necesita datosdef main():"""Hola MundoEste programa pone un mensaje en pantalla"""print("Hola, ¿qué tal?")Tras cargar el módulo conen el intérprete:, para invocar la función se debe escribirmain()www.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2233

ObservacionesSobre el ejemplo anterior sangrado- marca la estructura del programa y es obligatorio función sin argumentos (o parámetros) comentario de documentación, escrito entre """ ."""www.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2234

Resumen del programa "Hola Mundo"# -*- coding: utf-8 -*"""Programa principalprint("Hola, ¿qué tal?")@author: Michael González@date : 18/ene/2022"""# -*- coding: utf-8 -*"""def main():Pone un mensaje en la pantalla"""Hola mundo@author: Michael González@date : 18/ene/2022"""print("Hola, ¿qué tal?")www.istr.unican.esUNIVERSIDADDE CANTABRIAPone un mensaje en pantalla"""print("Hola, ¿qué tal?") Michael González Harbour, 4/feb/2235

1.7 Estilo de codificaciónLa facilidad de leer código es fundamentalUn estilo uniforme y agradable ayuda mucho a entender el códigoPython define unas normas de estilo en su documento PEP 8 https://www.python.org/dev/peps/pep-0008/Aquí mostramos un resumen de las normas más importanteswww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2236

Normas de estiloSangrado usar 4 espacios, sin tabuladoresLongitud de las líneas que no superen los 79 caracteresSeparar bloques visualmente usar líneas en blanco para separar funciones y clases, y bloques másgrandes de código dentro de las funcioneswww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2237

Normas de estilo: comentariosUtilizar docstrings (comentarios de documentación) los consideramos obligatorios para módulos, funciones y clases- el del módulo lo ponemos al principio y los de las funciones y clasesjusto debajo de sus respectivos encabezamientosUtilizar comentarios internos comienzan por el símbolo # y son efectivos hasta el final de la líneaLugar de los comentarios poner comentarios internos en una línea propia, encima del códigodocumentado evitar comentarios innecesarios, pues dificultan la lectura del códigowww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2238

Normas de estilo: espaciadoEspaciado Usar espacios alrededor de los operadores de asignación ( )x y 1# six y 1# no y después de las comasdibuja(inicio, fin) # sidibuja(inicio,fin)# no pero no justo antes o después de paréntesis, corchetes o llavescome(jamon[1], {chorizo: 2})# sicome ( jamon[ 1 ], { chorizo: 2 } ) # nowww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2239

Normas de estilo: nombresConvenio de nombres Clases: CamelCase funciones, datos, módulos,paquetes: snake case constantes: TODO MAYUSCULASFuente: svgConjunto de caracteres no usar letras acentuadas o ñ en losidentificadores (nombres de cosas) se pueden usar en textos (strings) y comentarioswww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/22snake case40

Normas de estilo: anotaciones de tiposAyudan a entender el tipo de cada dato (número real, número entero,texto, .)Anotaciones de tipos en funciones y datos aunque no son obligatorias en Python, debemos usarlas siempre- al crear funciones- al crear datos ayudan a entender los argumentos y respuestas retornadas por lasfunciones ayudan a entender los tipos de las variables ayudan a detectar errores las veremos más adelantewww.istr.unican.esUNIVERSIDADDE CANTABRIA Michael González Harbour, 4/feb/2241

Una primera aproximación es el lenguaje de bajo nivel o ensamblador - cada instrucción corresponde a una instrucción de lenguaje máquina - es dependiente de la máquina: no portable Ejemplo de lenguaje ensamblador: suma de dos enteros: Dirección Código Binario Código Ensamblador 1000 0011101000111000 MOVE.W 1200,D5 1002 0001001000000000