Descripción: Lenguaje de programación Python 3 editorial ENI...
Description
Created in Master PDF Editor - Demo Version
Created in Master PDF Editor - Demo Version
Created in Master PDF Editor - Demo Version
Python 3 Los fundamentos del lenguaje
Prólogo 1. Contenido del libro
29
2. Progresión del libro
30
3. Destinado a profesores y alumnos
32
4. Destinado a investigadores y doctores
33
5. Destinado a aquellos que vienen de otro lenguaje
34
Python en el paisaje informático 1. Breve historia de los lenguajes informáticos
35
1.1 Informática teórica 1.2 Cronología de la informática 1.2.1 Evolución de las problemáticas vinculadas a la informática 1.2.2 Cronología de los lenguajes informáticos 1.3 Historia de Python 1.3.1 Génesis 1.3.2 Extensión del perímetro funcional 1.3.3 Evolución de la licencia 1.3.4 Porvenir 2. Tipología de los lenguajes de programación 2.1 Paradigmas 2.1.1 Definición 2.1.2 Paradigma imperativo y derivados 2.1.3 Paradigma orientado a objetos y derivados 2.1.4 Programación orientada a aspectos 2.1.5 Paradigma funcional
2.1.6 Paradigma lógico 2.1.7 Programación concurrente 2.1.8 Síntesis 2.2 Interoperabilidad 2.3 Niveles de programación 2.3.1 Máquina 2.3.2 Bajo nivel 2.3.3 Alto nivel 2.4 Tipado 2.4.1 Débil vs. fuerte 2.4.2 Estático vs dinámico 2.5 Gramática 2.5.1 Lenguajes formales 2.5.2 Sintaxis
48 48 48 49 51 51 51 52 52 52 53 53 53 54
3. Ubicar Python en el paisaje informático
54
3.1 Tipología de Python 3.1.1 Gramática y sintaxis 3.1.2 Tipado 3.1.3 Nivel de programación 3.1.4 Paradigmas soportados 3.2 Posición estratégica del lenguaje Python 3.2.1 Segmentos de mercado 3.2.2 Nivel de complejidad 3.2.3 Fortalezas del lenguaje 3.2.4 Puntos débiles 3.3 Integración con otros lenguajes 3.3.1 Extensiones C 3.3.2 Integración de programas escritos en C 3.3.3 Integración de programas Python en C 3.3.4 Integración de programas escritos en Java 3.3.5 Integración de programas Python en Java 3.3.6 Otras integraciones
1.1 Python en pocas líneas 1.1.1 ¿ De dónde proviene el nombre «Python» ? 1.1.2 Presentación técnica 1.1.3 Presentación conceptual 1.2 Comparación con otros lenguajes 1.2.1 Shell 1.2.2 Perl 1.2.3 C, C++ 1.2.4 Java 1.2.5 PHP 1.3 Grandes principios 1.3.1 El zen de Python 1.3.2 El desarrollador no es estúpido 1.3.3 Documentación 1.3.4 Python viene con todo incluido 1.3.5 Duck Typing 1.3.6 Noción de código pythónico 2. Gobierno
68
2.1 Desarrollo 2.1.1 Ramas 2.1.2 Comunidad 2.2 Modo de gobierno 2.2.1 Creador del lenguaje 2.2.2 PEP 2.2.3 Toma de decisiones
68 68 69 70 70 70 70
3. ¿ Qué contiene Python ?
71
3.1 Una gramática y una sintaxis 3.2 Varias implementaciones 3.3 Una librería estándar 3.4 Librerías de terceros 3.5 Frameworks
4. Fases de ejecución de un programa Python 4.1 Carga de la máquina virtual 4.2 Compilación 4.3 Interpretación
73 73 73 73
Por qué escoger Python 1. Cualidades del lenguaje
75
1.1 Cobertura funcional 1.2 Puerta de entrada 1.3 Garantías
75 76 77
2. Difusión
78
2.1 Empresas 2.2 El mundo de la investigación 2.3 El mundo de la educación 2.4 Comunidad
78 80 80 81
3. Referencias
82
3.1 Pesos pesados en la industria informática 3.1.1 Google 3.1.2 Mozilla 3.1.3 Microsoft 3.1.4 Canonical 3.1.5 Cisco 3.2 Empresas de innovación 3.2.1 Servicios de almacenamiento en línea 3.2.2 Cloud computing 3.2.3 Plataforma colaborativa (Forge) 3.2.4 Redes sociales 3.3 Editores de contenidos 3.3.1 Disney Animation Studio 3.3.2 YouTube
5.1 Herramienta de distribución 5.2 Creación de paquetes distribuibles 5.3 Distribución binaria para Windows 5.4 Distribución binaria para Mac 5.5 Distribución binaria multiplataforma 5.6 Distribución específica para un entorno
101 101 102 102 102 103
Algoritmos básicos 1. Delimitadores
105
1.1 Instrucción 1.2 Una línea de código = una instrucción 1.3 Comentario 1.4 Una instrucción en varias líneas 1.5 Palabras clave 1.6 Palabras reservadas 1.7 Indentación 1.8 Símbolos 1.9 Operadores 1.10 Uso del carácter de subrayado 1.11 PEP-8 1.12 PEP-7 1.13 PEP-257 2. Instrucciones
2.5.7 Gestionar la salida del bloque de captura 2.5.8 Gestionar que no se produzcan excepciones 2.5.9 Uso y liberación de recursos 2.6 Otros 2.6.1 Gestionar imports 2.6.2 Compartir espacios de nombres 2.6.3 Funciones print, help, eval y exec
146 147 148 150 150 150 152
Declaraciones 1. Variable
155
1.1 ¿ Qué es una variable ? 1.1.1 Contenido 1.1.2 Continente 1.1.3 Formas de modificar una variable 1.2 Tipado dinámico 1.2.1 Asignación: recordatorio 1.2.2 Primitiva type y naturaleza del tipo 1.2.3 Características del tipado Python 1.3 Visibilidad 1.3.1 Espacio global 1.3.2 Noción de bloque 2. Función
169
2.1 Declaración 2.2 Parámetros 2.2.1 Firma de una función 2.2.2 Noción de argumento o de parámetro 2.2.3 Valor por defecto 2.2.4 Parámetros nombrados 2.2.5 Declaración de parámetros extensibles 2.2.6 Paso de parámetros con asterisco 2.2.7 Firma universal 2.2.8 Obligar a un parámetro a ser nombrado (keyword-only)
3.1 Declaración 3.1.1 Firma 3.1.2 Atributo 3.1.3 Método 3.1.4 Bloque local 3.2 Instanciación 3.2.1 Sintaxis 3.2.2 Relación entre la instancia y la clase 4. Módulo
183 183 183 184 184 185 185 185 186
4.1 Declaración 4.2 Instrucciones específicas 4.3 ¿ Cómo conocer el contenido de un módulo ?
186 187 187
Modelo de objetos 1. Todo es un objeto
189
1.1 Principios 1.1.1 Qué sentido dar a «objeto» 1.1.2 Adaptación de la teoría de objetos en Python 1.1.3 Generalidades 1.2 Clases 1.2.1 Introducción 1.2.2 Declaración imperativa de una clase 1.2.3 Instancia 1.2.4 Objeto en curso 1.2.5 Declaración por prototipo de una clase 1.3 Métodos 1.3.1 Declaración 1.3.2 Invocar al método 1.3.3 Métodos y atributos especiales
1.3.4 Constructor e inicializador 1.3.5 Gestión automática de atributos 1.3.6 Interés del paradigma orientado a objetos 1.3.7 Relación entre objetos 1.4 Herencia 1.4.1 Polimorfismo por subtipado 1.4.2 Sobrecarga de métodos 1.4.3 Sobrecarga de operadores 1.4.4 Polimorfismo paramétrico 1.4.5 Herencia múltiple
206 207 207 208 209 209 210 212 212 214
2. Otras herramientas de la programación orientada a objetos
217
2.1 Principios 2.2 Interfaces 2.3 Atributos 2.4 Propiedades 2.5 Ubicaciones 2.6 Metaclases 2.7 Clases abstractas 2.8 Zope Component Architecture 2.8.1 Presentación 2.8.2 Instalación 2.8.3 Definir una interfaz y un componente 2.8.4 Otras funcionalidades 2.8.5 Ventajas de la ZCA 3. Funciones principales y primitivas asociadas 3.1 Personalización 3.1.1 Clases 3.1.2 Instancias 3.1.3 Comparación 3.1.4 Evaluación booleana 3.1.5 Relaciones de herencia o de clase a instancia 3.2 Clases particulares 3.2.1 Iterador
3.2.2 Contenedores 3.2.3 Instancias similares a funciones 3.2.4 Recursos que hay que proteger 3.2.5 Tipos
242 242 243 244
Tipos de datos y algoritmos aplicados 1. Números
245
1.1 Tipos 1.1.1 Enteros 1.1.2 Reales 1.1.3 Cosas en común entre números enteros y reales 1.1.4 Métodos dedicados a los números enteros 1.1.5 Métodos dedicados a los números reales 1.1.6 Complejos 1.2 La consola Python, la calculadora por excelencia 1.2.1 Operadores matemáticos binarios 1.2.2 Operadores binarios particulares 1.2.3 Operadores matemáticos unarios 1.2.4 Redondeo 1.2.5 Operadores de comparación 1.2.6 Operaciones matemáticas n-arias 1.2.7 Funciones matemáticas usuales 1.3 Representaciones de un número 1.3.1 Representación decimal 1.3.2 Representación por un exponente 1.3.3 Representación por una fracción 1.3.4 Representación hexadecimal 1.3.5 Representación octal 1.3.6 Representación binaria 1.3.7 Operaciones binarias 1.3.8 Longitud de la representación en memoria de un entero 1.4 Conversiones 1.4.1 Conversión entre enteros y reales
1.4.2 Conversión entre reales y complejos 1.4.3 Conversión en un booleano 1.5 Trabajar con variables 1.5.1 Un número es inmutable 1.5.2 Modificar el valor de una variable 1.5.3 Operadores incrementales 1.6 Estadísticas 1.7 Cálculo científico 1.7.1 El cálculo científico ¿ para qué hacerlo ? 1.7.2 Python, una alternativa libre y con credibilidad 1.7.3 Algunas librerías 2. Secuencias
280
2.1 Presentación de los distintos tipos de secuencias 2.1.1 Generalidades 2.1.2 Las listas 2.1.3 Las n-tuplas 2.1.4 Conversión entre listas y n-tuplas 2.1.5 Cosas en común entre una lista y una n-tupla 2.1.6 Noción de iterador 2.2 Uso de índices y tramos 2.2.1 Definición de índice de un objeto y sus ocurrencias 2.2.2 Utilizar el índice para recorrer la secuencia 2.2.3 Encontrar las ocurrencias de un objeto y sus índices 2.2.4 Tamaño de una lista, contar ocurrencias 2.2.5 Utilizar el índice para modificar o eliminar 2.2.6 Iteración simple 2.2.7 Presentación de la noción de tramos (slices) 2.2.8 Caso particular de la rama 2.x de Python 2.2.9 Uso básico de tramos 2.2.10 Uso avanzado de tramos 2.3 Uso de operadores 2.3.1 Operador + 2.3.2 Operador * 2.3.3 Operador += 2.3.4 Operador *=
2.3.5 Operador in 2.3.6 Operadores de comparación 2.4 Métodos de modificación 2.4.1 Agregar elementos a una lista y a una n-tupla 2.4.2 Eliminar un objeto de una lista y de una n-tupla 2.4.3 Soluciones alternativas para la modificación de n-tuplas 2.4.4 Invertir una lista o una tupla 2.4.5 Ordenar una lista 2.5 Uso avanzado de listas 2.5.1 Operaciones de conjunto 2.5.2 Pivotar una secuencia 2.5.3 Iterar correctamente 2.5.4 Programación funcional 2.5.5 Recorrido de listas 2.5.6 Iteraciones avanzadas 2.5.7 Combinatoria 2.6 Adaptar las listas a necesidades específicas 2.6.1 Lista de enteros 2.6.2 Presentación del tipo array 2.6.3 Utilizar una lista como una pila 2.6.4 Utilizar una lista como una lista de espera 2.6.5 Utilizar las listas para representar matrices 2.6.6 Lista sin duplicados 2.7 Otros tipos de datos 3. Conjuntos
360
3.1 Presentación 3.1.1 Definición de un conjunto 3.1.2 Diferencias entre set y frozenset 3.1.3 Uso para eliminar valores duplicados de las listas 3.1.4 Agregar una relación de orden 3.2 Operaciones sobre conjuntos 3.2.1 Operadores para un conjunto a partir de otros dos 3.2.2 Operadores para modificar un conjunto a partir de otro 3.2.3 Métodos equivalentes a la creación o modificación de conjuntos 3.2.4 Métodos de comparación de conjuntos
3.2.5 Ejemplos de uso poco clásicos 3.3 Métodos de modificación de un conjunto 3.3.1 Agregar un elemento 3.3.2 Eliminar un elemento 3.3.3 Vaciar un conjunto 3.3.4 Duplicar un elemento 3.3.5 Sacar un valor de un conjunto 3.3.6 Utilizar un conjunto como un almacén de objetos 3.3.7 Algorítmica avanzada: resolución del problema de las n reinas 4. Cadenas de caracteres
379
4.1 Presentación 4.1.1 Definición 4.1.2 Vocabulario 4.1.3 Especificidades de la rama 2.x 4.1.4 Cambios aportados por la rama 3.x 4.1.5 Cadena de caracteres como secuencia de caracteres 4.1.6 Caracteres 4.1.7 Operadores de comparación 4.2 Dar formato a cadenas de caracteres 4.2.1 Operador módulo 4.2.2 Métodos para dar formato al conjunto de la cadena 4.2.3 Nuevo método para dar formato a variables en una cadena 4.3 Operaciones de conjunto 4.3.1 Secuenciación de cadenas 4.3.2 Operaciones sobre mayúsculas y minúsculas 4.3.3 Búsqueda en una cadena de caracteres 4.3.4 Información sobre los caracteres 4.4 Problemáticas relativas a la codificación 4.4.1 Codificación por defecto 4.4.2 Codificación del sistema 4.4.3 Unicode, referencia absoluta 4.4.4 Otras codificaciones 4.4.5 Puntos entre el Unicode y el resto del mundo 4.4.6 Volver a Unicode 4.5 Manipulaciones de bajo nivel avanzadas
4.5.1 Operaciones para contar 4.5.2 Una cadena de caracteres vista como una lista 4.5.3 Una cadena de caracteres vista como un conjunto de caracteres 4.6 Representación en memoria 4.6.1 Presentación del tipo bytes 4.6.2 Vínculo con las cadenas de caracteres 4.6.3 Presentación del tipo bytearray 4.6.4 Gestión de un juego de caracteres 5. Diccionarios
427
5.1 Presentación 5.1.1 Definición 5.1.2 Evolución y diferencias entre las ramas 2.x y 3.x 5.1.3 Vistas de diccionarios 5.1.4 Instanciación 5.1.5 Recorrer un diccionario 5.2 Manipular un diccionario 5.2.1 Recuperar un valor de un diccionario 5.2.2 Modificar los valores de un diccionario 5.2.3 Eliminar una entrada de un diccionario 5.2.4 Duplicar un diccionario 5.2.5 Utilizar un diccionario como un agregador de datos 5.2.6 Métodos de iteración 5.3 Uso avanzado de diccionarios 5.3.1 Agregar una relación de orden 5.3.2 Algorítmica clásica 5.3.3 Adaptar los diccionarios a necesidades específicas 5.3.4 Representación universal de datos 6. Booleanos
6.1 El tipo booleano 6.1.1 Clase bool 6.1.2 Los dos objetos True y False 6.1.3 Diferencia entre el operador de igualdad y de identidad 6.2 Evaluación booleana
7.1 Gestionar una fecha del calendario 7.1.1 Noción de fecha del calendario 7.1.2 Trabajar con una fecha 7.1.3 Consideraciones astronómicas 7.1.4 Consideraciones históricas 7.1.5 Consideraciones técnicas 7.1.6 Representación textual 7.2 Gestionar un horario o un momento de la jornada 7.2.1 Noción de instante 7.2.2 Noción de huso horario 7.2.3 Representación textual 7.3 Gestionar un instante absoluto 7.3.1 Noción de instante absoluto 7.3.2 Relación con las nociones anteriores 7.3.3 Representación textual 7.3.4 Gestión de los husos horarios 7.3.5 Crear una fecha a partir de una representación textual 7.4 Gestionar una diferencia entre dos fechas o instantes 7.4.1 Noción de diferencia y de resolución 7.4.2 Consideraciones técnicas 7.4.3 Uso con fechas del calendario 7.4.4 Uso con horarios 7.4.5 Uso con fechas absolutas 7.4.6 El segundo como unidad básica 7.5 Especificidades de los husos horarios 7.6 Problemáticas de bajo nivel 7.6.1 Timestamp y struct_time 7.6.2 Medidas de rendimiento 7.7 Uso del calendario 7.7.1 Presentación del módulo calendar 7.7.2 Funciones esenciales del calendario
1.1 Situación respecto a la noción de objeto 1.2 Organización del capítulo 1.3 Situación respecto a otros conceptos 2. Creación 2.1 Singleton 2.2 Fábrica 2.2.1 Presentación de 2.2.2 Soluciones 2.2.3 Conclusiones 2.3 Fábrica abstracta 2.3.1 Presentación de 2.3.2 Solución 2.4 Constructor 2.4.1 Presentación de 2.4.2 Solución 2.4.3 Conclusiones 2.5 Prototipo 2.5.1 Presentación de 2.5.2 Solución 2.5.3 Conclusiones
3.3.1 Presentación de 3.3.2 Solución 3.3.3 Conclusiones 3.4 Decorador 3.4.1 Presentación de 3.4.2 Solución 3.4.3 Conclusiones 3.5 Fachada 3.5.1 Presentación de 3.5.2 Solución 3.5.3 Conclusiones 3.6 Peso mosca 3.6.1 Presentación de 3.6.2 Solución 3.6.3 Conclusiones 3.7 Proxy 3.7.1 Presentación de 3.7.2 Solución 3.7.3 Conclusiones
la problemática
la problemática
la problemática
la problemática
la problemática
4. Comportamiento
506
4.1 Cadena de responsabilidad 4.1.1 Presentación de la problemática 4.1.2 Solución 4.1.3 Conclusiones 4.2 Solicitud 4.2.1 Presentación de la problemática 4.2.2 Solución 4.2.3 Conclusiones 4.3 Iterador 4.3.1 Presentación de la problemática 4.3.2 Solución 4.3.3 Conclusiones 4.4 Memento 4.4.1 Presentación de la problemática 4.4.2 Solución
5.1 Consideraciones 5.2 Adaptador 5.2.1 Declaración 5.2.2 Uso 5.3 Utilidad 5.3.1 Declaración 5.3.2 Uso 5.4 Fábrica 5.4.1 Declaración 5.4.2 Uso 5.5 Para ir más allá
1.1 Presentación 1.2 Acceso a una base de datos relacional 1.2.1 Punto de entrada 1.2.2 MySQL 1.2.3 PostgreSQL 1.2.4 SQLite 1.2.5 Oracle 1.3 Uso de un ORM 1.3.1 ¿ Qué es un ORM ? 1.3.2 ORM propuestos por Python 1.3.3 SQLAlchemy 1.4 Otras bases de datos 1.4.1 CSV 1.4.2 NoSQL 1.4.3 Base de datos orientada a objetos: ZODB 1.4.4 Base de datos de tipo clave-valor: REDIS 1.4.5 Bases de datos orientadas a documentos: CouchDB y MongoDB 2. LDAP
558
2.1 Presentación 2.1.1 Protocolo 2.1.2 Servidores 2.1.3 Terminología 2.2 Instalación 2.3 Abrir una conexión a un servidor 2.4 Realizar una búsqueda 2.5 Síncrono vs asíncrono 2.6 Conexiones seguras
558 558 559 559 559 560 561 562 563
3. XML
564
3.1 XML y las tecnologías relacionadas 3.1.1 Definición de XML, terminología asociada 3.1.2 Noción de esquema 3.1.3 Ventajas e inconvenientes de XML 3.1.4 Distintas maneras de recorrer un archivo XML
3.1.5 Módulos Python dedicados a XML 3.2 Validar un documento XML 3.2.1 Documento XML 3.2.2 Esquema DTD 3.2.3 Esquema XSD 3.2.4 Esquema RNG (RelaxNG) 3.2.5 Schematron 3.3 DOM 3.3.1 Lectura 3.3.2 Escritura 3.4 SAX 3.4.1 Soporte de SAX en lxml 3.4.2 API SAX ligera 3.5 XPath 3.6 XSLT 3.7 El caso concreto de los archivos HTML 3.7.1 Problemática 3.7.2 Parsear un archivo HTML según DOM 3.7.3 Parsear un archivo HTML según SAX 4. Herramientas de manipulación de datos 4.1 Encriptar un dato 4.1.1 Funciones de hash 4.1.2 Código de autenticación del mensaje 4.1.3 Esteganografía 4.2 Generar números aleatorios 4.3 Expresiones regulares 5. Trabajar con medios gráficos
585 585 585 587 588 592 593 597
5.1 Imágenes 5.1.1 Representación informática de una imagen 5.1.2 Presentación de Pillow 5.1.3 Formatos de imágenes matriciales 5.1.4 Recuperar la información de una imagen 5.1.5 Operaciones de conjunto sobre una imagen
1.1 Presentación 1.1.1 Formato PDF 1.1.2 Ventajas 1.1.3 Inconvenientes 1.1.4 Presentación de la librería libre 1.2 Bajo nivel 1.2.1 Librería de datos 1.2.2 Canvas 1.3 Alto nivel 1.3.1 Estilos 1.3.2 Flujo de datos 1.3.3 Creación de un elemento visual 1.3.4 Plantilla de página 1.3.5 Página que contiene varias zonas 2. OpenDocument
2.1 Instalación 2.2 OpenDocument Texto 2.2.1 Hello World 2.3 OpenDocument Hoja de cálculo 2.3.1 Principios generales respecto al texto 2.3.2 Ir más allá
2.1 Gestión de una tarea 2.1.1 Presentación 2.1.2 Creación 2.2 Gestión de varias tareas 2.2.1 Arranque y control 2.2.2 Oportunidad de utilizar una tarea 2.3 Resolución de problemáticas asociadas 2.3.1 Sincronización 2.3.2 Sincronización condicional 2.3.3 Semáforo 3. Uso de procesos
626 626 627 630 630 632 634 634 637 640 641
3.1 Gestión de un proceso 3.1.1 Presentación 3.1.2 Creación 3.2 Gestión de varios procesos 3.2.1 Sincronización 3.2.2 Paralelizar un trabajo 3.3 Resolución de problemáticas asociadas 3.3.1 Comunicación interproceso 3.3.2 Compartir datos entre procesos 3.4 Oportunidad de utilizar los procesos 3.5 Demonio 4. Ejecución asíncrona
2.1 Conozca su sistema operativo 2.1.1 Advertencia 2.1.2 Sistema operativo 2.1.3 Procesos en curso 2.1.4 Usuarios y grupos 2.1.5 Constantes para el sistema de archivos 2.1.6 Gestionar las rutas 2.2 Gestión de archivos 2.2.1 Abrir un archivo 2.2.2 Leer un archivo 2.2.3 Escribir un archivo 2.2.4 Cambiar los permisos de un archivo 2.2.5 Cambiar de propietario o de grupo 2.2.6 Recuperar información relativa al archivo 2.2.7 Eliminar un archivo 2.3 Alternativas sencillas a los comandos bash habituales 2.3.1 Carpetas 2.3.2 Archivos 2.3.3 Módulo de alto nivel 2.3.4 Buscar un archivo 2.4 Ejecutar comandos externos 2.4.1 Ejecutar y mostrar el resultado 2.4.2 Ejecutar y recuperar el resultado 2.5 Herramientas 2.5.1 Diferencias entre archivos 2.5.2 Herramienta de salvaguarda 2.5.3 Leer un archivo de configuración 2.5.4 Pickle 2.6 Comprimir y descomprimir un archivo 2.6.1 Tarfile 2.6.2 Gzip 2.6.3 Bz2
4.1 Escribir un servidor y un cliente 4.1.1 Uso de un socket TCP 4.1.2 Uso de un socket UDP 4.1.3 Creación de un servidor TCP 4.1.4 Creación de un servidor UDP 4.1.5 Un poco más allá 4.2 Utilizar un protocolo estándar 4.2.1 HTTP 4.2.2 Proxy 4.2.3 Cookies 4.2.4 FTP y SFTP 4.2.5 SSH 4.2.6 POP y POPS 4.2.7 IMAP e IMAPS 4.2.8 SMTP y SMTPS 4.2.9 NNTP 4.2.10 IRC 4.3 Servicios web 4.3.1 REST 4.3.2 SOAP 4.3.3 Pyro 5. Uso de hardware
741
5.1 Wake-on-LAN 5.1.1 Requisitos previos 5.1.2 Implementación 5.2 Uso del puerto serie
1.1 Pruebas unitarias 1.1.1 Principios 1.1.2 Interpretación 1.1.3 Cobertura 1.1.4 Herramientas 1.2 Pruebas de no regresión 1.2.1 Acciones de desarrollo 1.2.2 Gestión de las anomalías detectadas 1.3 Pruebas funcionales 1.4 Pruebas de rendimiento 1.5 Integración continua
745 745 746 747 747 750 750 750 751 752 755
2. Programación dirigida por la documentación
756
2.1 Documentación interna 2.1.1 Destinada a los desarrolladores 2.1.2 Destinada a los usuarios 2.2 Documentación externa 2.2.1 Presentación 2.2.2 Inicio rápido 2.2.3 Resultado
756 756 757 758 758 758 760
3. Optimización
761
3.1 Medir la calidad 3.2 Herramientas de depuración 3.3 Herramientas de perfilado 3.4 Reglas de optimización 3.4.1 ¿ Por qué optimizar ? 3.4.2 Reglas generales 3.4.3 Optimizar un algoritmo 3.4.4 Optimizar el uso de la memoria
Thank you for interesting in our services. We are a non-profit group that run this website to share documents. We need your help to maintenance this website.