Software: Introducción y Tipos PDF
Document Details
Uploaded by SpiritedMistletoe
Tags
Summary
This document provides an introduction to software, discussing its components and different types, including application and system software. It also touches upon utility programs and custom-developed software.
Full Transcript
SOFTWARE Introducción: El ordenador está compuesto por dos partes: La parte física, que llamamos hardware compuesta por el teclado, el ratón, el monitor, los discos duros o la placa base, memoria RAM entre otros elementos. Son todos aquellos componentes que podemos ver y tocar. La parte lógica...
SOFTWARE Introducción: El ordenador está compuesto por dos partes: La parte física, que llamamos hardware compuesta por el teclado, el ratón, el monitor, los discos duros o la placa base, memoria RAM entre otros elementos. Son todos aquellos componentes que podemos ver y tocar. La parte lógica llamada software es el conjunto de aplicaciones y datos almacenados en un ordenador. Permite que los dispositivos físicos puedan ser utilizados. El software NO se fabrica, es intangible Por ejemplo, los sistemas operativos, aplicaciones, navegadores web, juegos o programas. Tipos de software: Tipos de software- Software de Aplicación: Software de Aplicación: Son programas orientados a automatizar actividades o asistir al usuario en la realización de sus tareas. Podemos distinguir : ➔ Los programas utilitarios como su nombre lo indica son programas que brindan una "utilidad" específica y no están diseñados para un tipo de usuario particular, pueden usarse en empresas, industrias, comercios, escuelas, etc. Ejemplo, procesadores de texto, hoja de cálculo, videojuegos, navegadores para la web, antivirus... Tipos de software- Software de Aplicación ¿Qué son los paquetes utilitarios? Un paquete utilitario de escritorio es un conjunto de programas compuesto principalmente por herramientas suelen presentarse en paquetes de programas como suites de oficina y ofimática (procesador de texto, hoja de cálculo, presentaciones, agenda, entre otros) ➔ Los programas a medida se desarrollan considerando los requerimientos de un usuario o institución específico. Consiste en diseñar, crear, implementar y mantener software para un conjunto específico de usuarios, funciones u organizaciones. Por ejemplo, la directora de una escuela le encarga a un programador una aplicación para automatizar algunas de las actividades de la institución. Las principales características de desarrollar sistemas a medida son: ➔Exclusividad. El proceso se realiza pensando únicamente en tu negocio. ➔Opinión del cliente. El desarrollador valora en todo momento la opinión del cliente. ➔Personalización. El diseño es personalizado y se orienta al público objetivo. ➔Diferenciación. El diseño es único y diferencia la imagen de la empresa. ➔ Adaptación. El desarrollo se adapta a las necesidades específicas del cliente, incluso las más ocultas. ➔ Mantenimiento. Cuando el desarrollo cumple con los estándares de programación, se facilita el mantenimiento y la actualización. Software- Software del Sistema Es un conjunto de programas y herramientas que permiten que el hardware de un ordenador funcione y proporcionan una plataforma para ejecutar otros programas, como el software de aplicación. Su principal objetivo es gestionar los recursos del sistema y facilitar la comunicación entre el hardware y el software. Algunos ejemplos comunes de software del sistema son los sistemas operativos como Windows, macOS, Linux, y Android. Componentes clave del software del sistema: ➔Sistema Operativo (SO): Es el software más importante del sistema, ya que controla el hardware del ordenador, gestiona la memoria, los procesos y los dispositivos de entrada y salida. Ejemplos: Windows, Linux, Android ➔Controladores de dispositivos: Son programas que permiten que el sistema operativo se comunique con el hardware, como impresoras, tarjetas gráficas, y otros dispositivos. Ejemplos: NVIDIA GeForce Drivers: Controladores para tarjetas gráficas de NVIDIA. Realtek Audio Drivers: Controladores para la gestión del sonido en muchos ordenadores., HPPrinter Drivers: Controladores que permiten la comunicación entre el operativo y las impresoras HP. Componentes clave del software del sistema: sistema ➔ Programas utilitarios: Son herramientas que realizan tareas específicas de mantenimiento y configuración del sistema, como antivirus, compresores de archivos, o herramientas de gestión de disco. Antivirus (Windows Defender, Avast): Protegen el sistema de malware y otras amenazas. WinRARo7-Zip: Programas de compresión y descompresión de archivos. CCleaner: Herramienta de limpieza y optimización del sistema. Gestores de discos: Como el Administrador de discos de Windows, que permite gestionar particiones y discos duros. El software de programación es un conjunto de herramientas y aplicaciones diseñadas para ayudar a los desarrolladores a escribir, probar, depurar y mantener programas o aplicaciones informáticas. ➔Proporciona un entorno adecuado para crear código fuente, traducirlo a un lenguaje que pueda entender la máquina, y comprobar su correcto funcionamiento. ➔ Facilita la creación de programas y sistemas mediante lenguajes de programación. ➔ Incluye entornos de desarrollo integrados (IDEs), compiladores, intérpretes, depuradores, y editores de texto especializados. Estas herramientas ayudan a los programadores a transformar código fuente escrito en lenguajes de alto nivel (como Java, Python o C++) en código ejecutable que puede entender el hardware. Ejemplos de software de programación: Entornos de Desarrollo Integrado (IDE): Visual Studio: Un IDE desarrollado por Microsoft que soporta varios lenguajes como C\#, Visual Basic, y C++. Eclipse: IDE popular para el desarrollo en Java, aunque admite otros lenguajes mediante plugins. IntelliJ IDEA: IDE utilizado principalmente para desarrollo en Java, pero compatible con otros lenguajes. Netbeans... Licencias de software Las licencias del software son las distintas maneras que tienen las empresas, organizaciones y personas de autorizar el uso de sus programas. Una licencia es un contrato privado de cesión de derechos entre particulares. Cada una elige la que le parece más conveniente, bien por motivos éticos o simplemente comerciales. Esuncontrato entre el desarrollador de un software y el usuario final. Seespecifican los derechos y deberes de ambas partes. Eseldesarrollador el que especifica qué tipo de licencia distribuye. Software Libre o de Código Abierto (Open Source): Son los programas que se distribuyen incluyendo el código fuente. De esta manera, además de poder aprender cómo están hechos, el mismo usuario puede arreglar errores y adaptar el programa a sus gustos. Características: Libertad para usar el programa con cualquier fin. Libertad para saber cómo funciona el programa y adaptar el código a nuestras propias necesidades. Libertad para poder compartir copias a otros usuarios. Libertad para poder mejorar el programa y publicar las modificaciones realizadas. El Software Libre no tiene por qué ser gratuito. De hecho, su denominación de Libre se debe a que se tratan de programas de Código Abierto (Open Source) y es ahí donde reside la esencia de su libertad: los programas bajo licencias GPL, una vez adquiridos, pueden ser usados, copiados, modificados y redistribuidos libremente. La licencia que más se usa en el software libre es la licencia GPL (GNU General Public License-- Licencia Pública General) que nos dejará usar y cambiar el programa, con el único requisito que se hagan públicas las modificaciones realizadas. Software propietario Este software NO nos permitirá acceder al código fuente del programa y de forma general nos prohibirá la redistribución, la reprogramación, la copia o el uso simultáneo en varios equipos. Por el dinero que se paga, el usuario (llamado cliente en este caso) recibe el programa y la garantía de que funcionará; si no lo hace, se podrá consultar al servicio técnico de la compañía que (en el mejor de los casos) resolverá los problemas surgidos. Una situación muy común es que la compañía no arregle inmediatamente los errores de sus programas, sino que lance al mercado nuevas versiones con mejoras y arreglos y comunique a sus clientes anteriores que pueden actualizarse por un precio algo inferior al del nuevo producto. En ningún caso puede el usuario modificar el software. El propietario del software es quien tiene los derechos sobre el código fuente y el uso del programa. Ejemplos de software propietario popular: Microsoft Windows: Sistema operativo ampliamente utilizado en ordenadores personales Adobe Photoshop: Herramienta profesional para edición de imágenes y gráficos Shareware Describe el tipo de software que primero se prueba y luego se paga; es decir, los usuarios pueden comprobar si el software les resulta de utilidad antes de desembolsar alguna cantidad de dinero. La garantía, por tanto, es absoluta y el riesgo nulo. Si después del periodo de prueba el usuario decide quedarse el programa, deberá registrarse, es decir, comunicarse con los autores y pagar el dinero establecido, que generalmente es una cantidad muy razonable. A veces los autores entregan a los usuarios registrados un manual o una versión más completa del programa, con más características que la versión sin registrar. Los programas de shareware más populares que quizás conozcas incluyen WinRAR, AnyDVD, programas de Adobe y Microsoft, algunos programas antivirus y más. Freeware Los programas de esta categoría son los de distribución y uso gratuito. Sus autores los distribuyen por los canales que consideran más adecuados e intentan que resulten conocidos y útiles. ➔Gratuito: los usuarios NO PAGAN NADA ➔ No reciben garantía alguna, es decir, si el software no funciona no se puede reclamar legalmente nada; sin embargo, lo habitual, en caso de problemas, es contactar directamente con el autor y explicar la situación. ➔Código cerrado: no permite modificar ni acceder al código fuente. ➔ Licencia limitada: Aunque es gratuito, el uso puede estar limitado a un propósito específico (personal, no comercial, etc.) Ejemplos: Google Drive, Ubuntu, LibreOffice.... Software de dominio público El software de dominio público es aquel que no tiene derechos de autor vigentes, lo que significa que cualquier persona puede usarlo, modificarlo, distribuirlo e incluso venderlo, sin restricciones legales. Libre de derechos de autor: Cualquier persona puede usarlo sin necesidad de pagar licencias o pedir permiso. Código abierto: El código fuente está disponible y puede ser modificado y redistribuido. No tiene restricciones de uso: Puede usarse para cualquier propósito, incluyendo el comercial. Este tipo de software es ideal para proyectos educativos, personales y comerciales, ya que no tiene limitaciones legales ni de uso. Software con copyleft Es un tipo de software libre que está protegido por una licencia que asegura que todas las versiones derivadas del software original también sean libres y mantengan las mismas libertades. Es decir, cualquier persona que modifique o distribuya este software debe hacerlo bajo los mismos términos, garantizando que las libertades de uso, estudio, modificación y distribución se mantengan intactas en las versiones modificadas. Libre para usar, modificar y distribuir: Los usuarios pueden hacer lo que quieran con el software, siempre que respeten las condiciones de la licencia. Obligación de mantener las mismas libertades: Si distribuyes una versión modificada, debes hacerlo bajo la misma licencia copyleft. Protección contra apropiación privada: Las modificaciones no pueden volverse propietarias, lo que impide que alguien tome el software libre y lo cierre. Ejemplos de software con licencias copyleft: Linux: El sistema operativo más conocido con licencia copyleft, bajo la GNU General Public License (GPL). GIMP: Programa de edición de imágenes, también bajo la GPL. WordPress: El popular sistema de gestión de contenidos (CMS), que también usa la licencia GPL. MySQL: Sistema de gestión de bases de datos, también licenciado bajo GPL. Licencia GPL (General Public License) La GPL es la licencia copyleft más conocida y utilizada. Fue creada por Richard Stallman como parte del proyecto GNU y garantiza que cualquier software distribuido bajo esta licencia permanezca libre para todos los usuarios. Principio clave de la GPL: Si alguien distribuye una versión modificada de un software con GPL, debe hacerlo bajo la misma licencia GPL, manteniendo así los derechos de los usuarios intactos. En resumen, el software con copyleft garantiza que siempre será libre y abierto, sin posibilidad de que se privatice o restrinja su uso en el futuro, protegiendo los principios del software libre. Características clave de la licencia GPL: ➔ Libertad para usar el software: Los usuarios pueden ejecutar el programa para cualquier propósito sin restricciones. ➔Libertad para estudiar el código fuente: El acceso al código fuente es un derecho. Los usuarios pueden examinar cómo funciona el software y modificarlo para sus propias necesidades. ➔Libertad para redistribuir copias: Los usuarios pueden distribuir copias del software, ya sea sin modificar o en versiones modificadas, siempre y cuando se respeten las condiciones de la GPL. ➔Libertad para modificar y distribuir las versiones derivadas: Si un usuario modifica el software, puede distribuir su versión modificada, pero debe hacerlo bajo la misma licencia GPL. Esto asegura que las modificaciones también sean libres y que los derechos sobre el software no se limiten. PROGRAMAINFORMÁTICO Concepto de programa informático Un programa informático es un grupo de instrucciones que están escritas en un lenguaje de programación sobre el que se aplican una serie de datos para resolver un problema. Ejemplo: este programa mostrará "Hola Mundo" por la pantalla Entornos de desarrollo Aplicación informática Las aplicaciones informáticas suelen estar formadas por varios programas con sus librerías correspondientes aunque podrían constar solamente de un programa. Cuando son varios programas que pueden ejecutarse independientemente uno del otro suelen denominarse suite o paquete integrado como por ejemplo la suite ofimática de OpenOffice Las aplicaciones tienen un nexo de unión en común, comparten librerías, almacenes e incluso datos. La compatibilidad entre ellos es completa. Una aplicación informática está en contacto con el usuario y no con el hardware. Será el sistema operativo el que haga de nexo de unión entre ambos (aplicación informática y Hardware) Ejemplos : Microsoft Office, Google Workspace, LibreOffice Comoseejecuta un programa Si queremos iniciar un programa necesitaremos recursos hardware del ordenador, como son el procesador, la memoria RAM, dispositivos E/S, etc. Las instrucciones para inicializar el programa se cargan en la memoria principal y se ejecutarán en la CPU (unidad central de proceso). ➔LaCPUeselcomponente principal de un ordenador encargado de interpretar y ejecutar las instrucciones de los programas. ➔Controla todas las funciones principales del sistema, como los cálculos, la lógica y la gestión de datos. ➔LaCPUescrucial para el funcionamiento de cualquier dispositivo informático. Procesador (CPU) Componentes que conforman la CPU: La Unidad de Control (UC): se encarga de interpretar y ejecutar las instrucciones que se almacenan en la memoria principal y, además, genera las señales de control necesarias para ejecutarlas. La Unidad Aritmético-Lógica (UAL): es la que recibe los datos y ejecuta operaciones de cálculo y comparaciones, además de tomar decisiones lógicas (si son verdaderas o falsas), pero siempre supervisada por la Unidad de Control. Los registros: son los que almacenan la información temporal, almacenamiento interno de la CPU. Entornos de desarrollo MEMORIA (RAMyalmacenamiento) La memoria de un sistema informático se divide principalmente en dos tipos: ➔Lamemoria principal (RAM) y el almacenamiento secundario (discos duros o SSD) ➔Cuando ejecutamos un programa, este se carga desde el almacenamiento secundario a la memoria RAM, que es mucho más rápida. ➔La RAM almacena temporalmente tanto el código del programa como los datos que este necesita procesar. ➔La RAM es volátil, lo que significa que toda la información se borra cuando se apaga el ordenador. BUSDEDATOS El bus de datos es una vía de comunicación que permite el intercambio de información entre la CPU, la memoria y otros dispositivos del sistema. Hay tres tipos de buses principales: ➔Busdedatos: Transporta los datos. ➔Busdedirecciones: Transporta las direcciones de memoria. ➔Busdecontrol: Transporta las señales de control y sincronización. Entornos de desarrollo Ejecución de una instrucción Cuando ejecutamos una instrucción podemos distinguir dos fases: ➔ Fase de búsqueda: se localiza la instrucción en la memoria principal y se envía a la Unidad de Control para poder procesarla. ➔Fasedeejecución: se ejecutan las acciones de las instrucciones: ◆Obtiene la obtiene la primera instrucción de la memoria, ◆Sedecodifica la instrucción para determinar el código de operación y los datos. ◆Ejecuta la instrucción y en algunos casos almacena el resultado. Este proceso se ejecuta continuamente hasta que se leen todas las instrucciones del programa. Aplicación informática Existen multitud de aplicaciones informáticas: Programas de contabilidad bases de datos Programas de diseño gráfico Procesadores hoja de cálculo herramientas de correo electrónico Código fuente de un programa Es el conjunto de archivos que contienen órdenes o instrucciones que forman el programa. ➔Esrealizado por los programadores usando algún editor de texto o herramienta de programación. ➔Nosepuedeejecutar directamente en el ordenador. ➔Para hacer cambios en un programa es necesario acceder al código fuente. Ejemplo de código fuente del Lenguaje Java Entornos de desarrollo El proceso de traducción y compilación Los traductores son programas cuya finalidad es traducir lenguajes de alto nivel a lenguajes de bajo nivel como ensamblador o código máquina. Existen dos grupos de traductores: intérpretes y compiladores. Intérprete Traduce el código fuente línea a línea. Primero traduce la línea, detiene la traducción y posteriormente la ejecuta. Lee la siguiente línea, detiene la traducción y posteriormente la ejecuta..... El intérprete tiene que estar en memoria ejecutándose para poder ejecutar el programa. También el código fuente tiene que estar en memoria. Compilador El proceso de compilación de un programa implica convertir el código fuente (escrito en un lenguaje de programación como Java, C++ o Python) en un formato que pueda ser ejecutado por una máquina. Pasos del proceso de compilación: ➔Escritura del código fuente: El desarrollador escribe el código en un lenguaje de alto nivel (por ejemplo, Java o C++). Este código es entendible por humanos, pero no puede ser ejecutado directamente por una máquina. ➔Compilación: El compilador traduce el código fuente a un código de bajo nivel llamado código objeto o bytecode (dependiendo del lenguaje). Por ejemplo: ★EnC/C++, el compilador genera código objeto (archivo.o o.obj). ★EnJava, el compilador genera bytecode (archivo.class) que luego es ejecutado por la Máquina Virtual de Java (JVM). Entornos de desarrollo Fases del compilador Análisis léxico: se lee el código obteniendo unidades de caracteres llamados tokens. Ejemplo: la instrucción resta = 2-- 1, genera 5 tokens: resta, =, 2,-, 1. Análisis sintáctico: recibe el código fuente en forma de tokens y ejecuta el análisis para determinar la estructura del programa, se comprueba si cumplen las reglas sintácticas. Análisis semántico: revisa que las declaraciones sean correctas, los tipos de todas las expresiones, si las operaciones se pueden realizar, si los arrays son del tamaño correcto, etc. Generación de código intermedio: después de analizarlo todo, se crea una representación similar al código fuente para facilitar la tarea de traducir al código objeto. Optimización de código: se mejora el código intermedio anterior para que sea más fácil y rápido a la hora de interpretarlo la máquina. Generación de código: se genera el código objeto. Entornos de desarrollo Compilador Ensamblado (si es necesario): Si el código se traduce a código máquina, el ensamblador convierte el código objeto en código ejecutable binario. Enlazado (Linking): El enlazador toma todos los archivos objeto generados (y las bibliotecas externas si las hay) y los une para formar un archivo ejecutable o bytecode completo que pueda ser ejecutado. Ejecución: Una vez creado el archivo ejecutable (en el caso de lenguajes compilados como C/C++) o el bytecode (en el caso de lenguajes como Java), el programa puede ser ejecutado directamente por la CPU o por una máquina virtual (en el caso de Java, la JVM). Si en el compilador se detecta algún tipo de error no se generará el código objeto y tendremos que modificar el código fuente para volver a pasarlo por el compilador. Compilación y ejecución en un programa en Java Una máquina virtual es un tipo de software capaz de ejecutar programas como si fuese una máquina real. Máquina Virtual de Java (JVM) Es responsable de ejecutar los programas Java, interpretando el código compilado llamado bytecode y traduciendo este bytecode a instrucciones que el sistema operativo puede entender. Proporciona una capa de abstracción entre el código Java y el hardware donde se ejecuta. Permite que los programas Java se ejecuten en cualquier dispositivo o sistema operativo que tenga instalada una JVM, lo que cumple con la filosofía de \"escribe una vez, ejecuta en cualquier lugar\" (WORA, por sus siglas en inglés). Por tanto los programas que se compilan en lenguaje Java son capaces de funcionar en cualquier plataforma (UNIX, Mac, Windows, Solaris, etc.). Entornos de desarrollo Funcionamiento de la Máquina Virtual de Java Pasos para compilar y ejecutar un programa en JAVA: El código fuente estará escrito en archivos de texto planos con la extensión.java. El compilador javac (programa) generará uno o varios archivos siempre que no se produzcan errores y tendrán la extensión.class. Este fichero.class contendrá un lenguaje intermedio entre el ordenador y el SO y se llamará bytecode. La JVMcarga el bytecode en memoria utilizando el Class Loader, un componente que gestiona la localización y carga de clases necesarias para la ejecución del programa. Verificación del bytecode: Una vez cargado el bytecode, la JVM verifica que el código no contenga errores o instrucciones que puedan causar fallos de seguridad, como accesos ilegales a memoria. Ejecución del bytecode: Finalmente el bytecode es interpretado o compilado por el Just-In-Time (JIT) compiler, que traduce el bytecode en código máquina específico de la plataforma en tiempo de ejecución para mejorar el rendimiento. Una de las desventajas de usar este tipo de lenguajes que se basan en una máquina virtual puede ser que son más lentos que los lenguajes ya compilados, debido a la capa intermedia. No obstante, cabe destacar que no es una desventaja demasiado crítica. LENGUAJES DEPROGRAMACIÓN Introducción Todos los programas se desarrollan en algún lenguaje de programación. Nadie programa directamente con instrucciones en lenguaje máquina debido a que son ininteligibles para el ser humano. Los lenguajes de programación son lenguajes artificiales creados para que al traducirse a código máquina cada una de las instrucciones de dicho lenguaje dé lugar a una o varias instrucciones en máquina. En la actualidad existen multitud de lenguajes de programación. Lenguajes de programación. Un lenguaje de programación hace referencia al conjunto de caracteres, reglas y acciones combinadas y consecutivas que un equipo debe ejecutar. Constará de los siguientes elementos: Alfabeto o vocabulario: conjunto de símbolos permitidos. Sintaxis: reglas para realizar correctamente construcciones con símbolos. Semántica: reglas que determinan el significado de construcción del lenguaje. Entornos de desarrollo Lenguaje de bajo nivel- lenguaje máquina El lenguaje de más bajo nivel por excelencia es el lenguaje máquina Características Susinstrucciones son complejas e ininteligibles. Se componen de 0s y 1s. Nonecesita ser traducido. Es el lenguaje que entiende directamente el ordenador. Fueel primer lenguaje utilizado. Losdesarrolladores tenían que tener un conocimiento profundo sobre el hardware. Esdiferente para cada procesador. Las instrucciones no son portables de un ordenador a otro. Salvo excepciones, nadie programa en lenguaje máquina. Lenguaje de Bajo Nivel El lenguaje ensamblador (también conocido como \"assembly\" o ASM) es un lenguaje de bajo nivel que está estrechamente vinculado a la arquitectura de la máquina o procesador en el que se ejecuta. Características: ➔ Lenguaje de bajo nivel: Se encuentra justo por encima del código máquina y permite una interacción directa con el hardware. Cada instrucción en ensamblador se traduce generalmente en una instrucción de máquina. ➔ Dependiente de la arquitectura: Las instrucciones varían según el tipo de procesador. El ensamblador para un procesador Intel no será el mismo que para un procesador ARM, por ejemplo. ➔ Uso de mnemónicos: Las instrucciones del lenguaje ensamblador se representan mediante mnemónicos, que son abreviaciones legibles para humanos de las instrucciones de máquina (como MOV, ADD, SUB, etc.). ➔ Control total del hardware: Ofrece un control sobre los registros del procesador, la memoria y otros recursos del hardware, lo que permite optimizar el rendimiento del programa. ➔ Eficiencia en recursos: Al permitir una programación más cercana al hardware, se pueden crear programas extremadamente eficientes en cuanto a tiempo de ejecución y uso de memoria, a diferencia de los lenguajes de alto nivel. ➔ Difícil de programar y mantener: Dado que se trabaja a un nivel muy bajo, el ensamblador es más complejo de aprender, programar y depurar que los lenguajes de alto nivel como Python o Java. ➔ Necesita ensamblador: Un ensamblador es el programa encargado de convertir el código escrito en lenguaje ensamblador en código máquina ejecutable. Entornos de desarrollo Lenguaje de Bajo Nivel ➔Instrucciones simples: Cada instrucción en ensamblador realiza una tarea muy básica, cómo mover datos entre registros o realizar operaciones aritméticas simples. ➔ Velocidad y optimización: Aunque su uso es más complejo, permite una optimización extrema del código, algo que es muy valioso en aplicaciones que requieren un rendimiento muy alto, como en videojuegos de bajo nivel. El uso del ensamblador es cada vez menos común en el desarrollo general de software, pero sigue siendo esencial en áreas donde se requiere un control directo sobre el hardware. Lenguaje de Nivel Medio- características Un lenguaje de programación de nivel medio está entre los lenguajes de bajo nivel (que están muy cerca del hardware, como el ensamblador) y los de alto nivel (que son más fáciles de entender para las personas, como Python o Java). Los lenguajes de nivel medio combinan características de ambos mundos: permiten trabajar más cerca del hardware, pero también con estructuras más comprensibles. ➔Equilibrio entre control del hardware y facilidad de uso: Te permiten trabajar directamente con la memoria y el procesador, pero también tienen características que los hacen más fáciles de usar que los lenguajes de bajo nivel. ➔Manipulación directa de hardware: Puedes acceder y manipular directamente la memoria y los registros del procesador, lo cual es útil para optimizar el rendimiento de los programas. ➔Eficiencia y velocidad: Los programas escritos en lenguajes de nivel medio tienden a ser más rápidos y eficientes en cuanto a uso de recursos (memoria y tiempo de ejecución) que los de alto nivel. ➔Estructuras comprensibles: Aunque te permite acceder al hardware, los lenguajes de nivel medio también usan estructuras como bucles (for, while), condicionales (if, else) y funciones, lo que los hace más fáciles de entender que los lenguajes de bajo nivel. ➔Código portátil, pero con acceso a bajo nivel: Aunque no son tan portátiles (es decir, no se pueden ejecutar fácilmente en cualquier plataforma) como los lenguajes de alto nivel, los de nivel medio permiten escribir código que puede funcionar en diferentes tipos de máquinas con algunas modificaciones. ¿Por qué son útiles? Los lenguajes de nivel medio son ideales cuando quieres crear programas que sean rápidos y eficientes, pero sin tener que escribir en un lenguaje complicado como ensamblador. Por ejemplo, los sistemas operativos como Windows, Linux y MacOS se han desarrollado en su mayoría con lenguajes de nivel medio como C. Entornos de desarrollo Lenguaje de Alto Nivel- características Un lenguaje de alto nivel es un tipo de lenguaje de programación que es más fácil de entender para los humanos, porque utiliza palabras y estructuras que se parecen al lenguaje que usamos todos los días. Los lenguajes de alto nivel son más simples de usar y permiten escribir programas más rápido. Características de los lenguajes de alto nivel: ➔ Fáciles de leer y escribir: Los lenguajes de alto nivel usan palabras y frases que parecen inglés o matemáticas. Esto hace que sean más fáciles de aprender y usar, como if, else, while, o print. ➔Portabilidad: El mismo código puede ejecutarse en diferentes tipos de ordenadores sin necesidad de hacer grandes cambios. Por ejemplo, un programa escrito en Python puede funcionar en Windows, macOS o Linux sin muchos ajustes. ➔No dependen del hardware: No tienes que preocuparte de cómo funcionan los componentes internos del ordenador (como la memoria o el procesador) al escribir el código. El lenguaje de alto nivel se encarga de esos detalles. ➔Más productivos: Permiten escribir programas más complejos en menos tiempo que los lenguajes de bajo nivel, porque hacen muchas tareas automáticamente. ➔Traducidos por un compilador o intérprete: Los lenguajes de alto nivel no son entendidos directamente por la computadora. Por eso, necesitan un compilador o un intérprete que los traduzca a lenguaje máquina (el lenguaje que sí entienden los ordenadores). Lenguaje de Alto Nivel Enocasiones ofrecen frameworks para una programación más rápida. Suelen trabajar con mucha abstracción y orientado a objetos. De esta manera es más fácil la reutilización y el encapsulamiento. Algunos ejemplos de lenguajes de alto nivel son: ALGOL, C++, C\#, Clipper, COBOL, Fortran, Java, Logo, Pascal, etc. Entornos de desarrollo Framework Un framework es una especie de \"esqueleto\" o \"estructura\" que te ayuda a desarrollar aplicaciones de manera más rápida y organizada. Imagina que un framework es como los cimientos de una casa: ya tienes las paredes y la estructura básica, y solo te falta construir lo demás encima. Te ofrece una base sólida, para que no tengas que empezar siempre desde cero. ¿Por qué usar un framework? Cuando creas una aplicación web desde cero, hay muchas tareas repetitivas, como conectarte a una base de datos, organizar el código o crear funciones para manejar errores. Un framework ya tiene todo esto preparado para que puedas enfocarte en las partes más importantes de tu proyecto, como el diseño y la funcionalidad. Ejemplos de frameworks ➔Frontend (lo que ves en la web). ➔React: Te ayuda a crear interfaces de usuario interactivas. ➔Vue.js: Un framework más fácil para principiantes que también sirve para hacer páginas dinámicas. ➔Angular: Una opción más completa, pero un poco más compleja. ➔Backend (lo que pasa detrás de la web): ➔Django (en Python): Un framework que te facilita gestionar usuarios, bases de datos, etc. ➔Laravel (en PHP): Muy usado para crear webs dinámicas y bien estructuradas. ➔Express (en JavaScript): Muy ligero, perfecto para crear aplicaciones web rápidas. Ventajas de usar un framework ➔Ahorro de tiempo: Ya tienes muchas funciones listas para usar. ➔Organización: Facilita mantener el código limpio y estructurado. ➔ Mejores prácticas: Te ayuda a seguir las reglas que usan los programadores profesionales. ➔Seguridad: La mayoría de frameworks incluyen medidas de seguridad básicas. Entornos de desarrollo Según la forma en que los lenguajes son ejecutados Podemos distinguir: Lenguajes compilados: como ya vimos se ejecutan de forma más rápida que los interpretados o virtuales. Ejemplo lenguaje C. Lenguajes interpretados como ya vimos, no genera código y se encarga de leer las instrucciones e interpretarlas para seguidamente ejecutarlas: php, javascript. Los lenguajes virtuales: como ya vimos son lenguajes de programación que no se ejecutan directamente en el hardware de una computadora, sino que se ejecutan en un entorno de máquina virtual: java Paradigmas de programación El paradigma de programación nos detalla las reglas, los patrones y los estilos de programación que usan los lenguajes. ➔Guía la forma en que se diseña y escribe un programa. Es un conjunto de principios y conceptos que definen cómo se estructura el código, cómo se resuelven los problemas y cómo interactúan los diferentes componentes del software ➔Cada lenguaje puede usar más de un paradigma, el cual resultará más apropiado que otro según el tipo de problema que queramos resolver Entornos de desarrollo Paradigmas de programación- LENGUAJES IMPERATIVOS Se basa en dar instrucciones secuenciales al ordenador para que realice una serie de pasos. Características: ➔Instrucciones paso a paso: Imagina que le dices a alguien: \"Primero, corta las verduras. Luego, ponlas en la sartén. Después, agrega sal\". Estás dando las instrucciones una detrás de la otra. En un lenguaje imperativo, haces lo mismo con el ordenador. ➔Cambiar cosas: (variables) Piensa en una caja donde guardas cosas (como números o palabras). En un programa, esas cajas se llaman variables, y puedes cambiar lo que tienen dentro. Por ejemplo, si guardas el número 5 y luego lo cambias a 10, eso es como lo que hace un programa imperativo: guarda y cambia información. ➔Control del orden A veces quieres que el ordenador repita algo o que haga una cosa si pasa algo especial. Por ejemplo, \"si está caliente, retira la sartén del fuego\" (sentencias condicionales) o \"repite el paso de mover la sartén hasta que las verduras estén doradas\". En un programa imperativo, puedes decirle al ordenador que haga algo una y otra vez (como bucles), o que haga algo solo si ocurre una condición especial (if- else). Dentro de esta categoría podemos englobar: ➔Programación modular: se trata de dividir un programa en pequeñas piezas o módulos. Es como cuando haces una lista de tareas y cada tarea se encarga de algo específico. Esto ayuda a que sea más fácil entender el código y trabajar con él. Paradigmas de programación- Programación orientado a objetos ➔ Programación orientada a objetos (POO): Aquí el enfoque es diferente. En lugar de simplemente darle instrucciones paso a paso, como en la imperativa, en la orientada a objetos organizamos el programa en torno a objetos, que son como pequeñas entidades con sus propias características y comportamientos. Es como si fueras creando cosas en lugar de sólo escribir instrucciones. Ejemplo: Imagina que tienes que diseñar un videojuego. En vez de dar una lista de instrucciones para cada cosa, crea objetos como un \"personaje\" o \"enemigo\", y cada uno tiene sus propias acciones y propiedades. Por ejemplo: El personaje puede tener un nombre (propiedades) , tipo y puede caminar o saltar (acciones). El enemigo puede tener su propio nombre, puntos de vida, y puede atacar. Cada objeto es independiente, pero todos interactúan entre sí para que el juego funcione. Así es como funciona la programación orientada a objetos: creamos objetos con características y comportamientos propios, que luego interactúan entre ellos. Entornos de desarrollo Paradigmas de programación- Programación orientado a objetos Entre las ventajas de este tipo de lenguaje hay que destacar: ➔Fácil de entender: La POO usa conceptos que ya conocemos del mundo real. Piensa en objetos como un coche o un perro: cada uno tiene características (como el color o la raza) y puede hacer cosas (como moverse o ladrar). Ejemplo: En un juego de coches, puedes tener un \"objeto coche\" con características como \"color\" y \"velocidad\", y con acciones como \"acelerar\" o \"frenar\". ➔Organización clara: Al usar objetos y clases, la POO te ayuda a organizar el código de una forma ordenada. En lugar de escribir todo el código en un solo lugar, puedes dividir el programa en partes más pequeñas (objetos) que son más fáciles de manejar. Ejemplo: si estás creando un videojuego, puedes tener una clase para Personajes, otra para Enemigos y otra para Vehículos, cada una con sus propias características y acciones ➔ Reutilización de código: permite reutilizar partes del código, lo que significa que no tienes que escribir lo mismo una y otra vez. Puedes crear una \"plantilla\" (clase) para algo, y luego usar esa misma plantilla para crear muchos objetos similares, pero con pequeñas diferencias. ➔ Protección de los datos (encapsulamiento): La POO permite proteger la información que contiene un objeto, de manera que solo se puede cambiar usando ciertas reglas. Esto ayuda a evitar errores y a que el programa sea más seguro. Paradigmas de programación- Programación estructurada Programación estructurada. Cuando hablamos de programación estructurada nos estamos refiriendo a programas creados a través de módulos, es decir, pequeñas partes más manejables que, unidas entre sí, hacen que el programa funcione. Cada uno de los módulos poseen una entrada y una salida, y deben estar perfectamente comunicados, aunque cada uno de ellos trabaja de forma independiente. A continuación, vemos un programa estructurado en módulos: Entornos de desarrollo Paradigmas de programación- programación declarativa Lenguajes funcionales: La programación funcional es un estilo diferente de pensar en cómo programar, donde en lugar de decirle al ordenador paso a paso lo que debe hacer (como en la programación imperativa), le dices que calcular usando funciones (como en las matemáticas). Están basados en el concepto de función y están formados por definiciones de funciones junto con argumentos que se aplican. ➔La operación fundamental es la aplicación de una función a una serie de argumentos y, además, la computación se realiza evaluando expresiones. ➔Apenas se usan para el software comercial. Existen muchos lenguajes de programación conocidos con los que podremos aplicar modelos de programación funcional entre sus paradigmas: javascript, ruby phyton, ➔Setrata de un código más corto, sencillo, legible y preciso. ➔Fácilmente combinable con la programación orientada a objetos e imperativa. Ejemplo En este ejemplo, la problemática es conocer la cantidad de elementos en la lista mayores a 10. List numeros = List.of(18, 6, 4, 15, 55, 78, 12, 9, 8); // lista de enteros Long result = numeros.stream().filter(num-\> num \> 10).count(); System.out.println(result); Entornos de desarrollo Paradigmas de programación- Lenguajes lógicos Lenguajes lógicos: ➔Programación lógica es como decirle al ordenador lo que es verdad y las reglas que debe seguir. Luego, le haces preguntas y él llega a conclusiones. ➔Nole das órdenes paso a paso, sino que dejas que el ordenador \"piense\" cómo resolver el problema por sí mismo. ➔El lenguaje Prolog es uno de los más conocidos para este tipo de programación. ¿Qué es la programación reactiva? La programación reactiva es un estilo de programación en el que los programas reaccionan a los cambios que suceden en tiempo real. En lugar de que el programa haga todo de forma lineal o secuencial, el programa \"escucha\" eventos o cambios (como el clic de un botón, la llegada de un mensaje, o el cambio en los datos) y responde automáticamente cuando ocurren. En la programación reactiva, el programa está diseñado para estar pendiente de los cambios o eventos. Cuando algo cambia, el programa reacciona automáticamente. Esta forma de programar es muy útil para aplicaciones web modernas que necesitan actualizarse en tiempo real sin que el usuario tenga que hacer nada extra. Paradigmas de programación- Programación reactiva Java, NO es un lenguaje de programación reactivo. Sin embargo, esto no significa que no podamos crear programas reactivos en Java. Con Java 9, el JDK comienza a admitir programación reactiva, proporcionando algunas clases e interfaces para este propósito. ¿Dónde se usa la programación reactiva? Este tipo de programación se usa mucho en aplicaciones web, especialmente cuando queremos que el usuario vea los cambios en la pantalla sin tener que actualizar la página o hacer alguna acción extra. Por ejemplo: ➔Redessociales: Cuando recibes notificaciones nuevas sin refrescar la página. ➔Aplicaciones de chat: Cuando los mensajes aparecen en tu pantalla al instante. ➔Aplicaciones financieras: Cuando los precios o gráficos cambian en tiempo real. Entornos de desarrollo Lenguajes de programación más difundidos- JAVA Características principales de Java: ➔Lenguaje orientado a objetos. ➔Java organiza el código en objetos, que son como piezas o bloques de construcción. ➔Multiplataforma (\"escribe una vez, ejecuta en cualquier parte\"), esto se debe a que Java usa JVM (Máquina Virtual de Java). ➔Esunlenguaje virtual interpretado. ➔Está pensado para trabajar con redes y protocolos HTTP, FTP, TCP/IP ➔Ofrece muchos aspectos de seguridad. Actualmente se trabaja en la encriptación del código fuente para mayor seguridad. Lenguajes de programación más difundidos- C Y C++ ➔ C++ permite a los programadores crear aplicaciones que van desde software de sistemas hasta videojuegos y aplicaciones de alto rendimiento, gracias a su capacidad para gestionar memoria y su flexibilidad. Tipos de programación en C++ Admite múltiples paradigmas de programación, lo que lo convierte en un lenguaje versátil para diferentes tipos de proyectos. Entre los principales estilos de programación que C++ soporta se encuentran: ➔ Programación orientada a objetos (POO): Con conceptos como clases, herencia y polimorfismo, C++ permite estructurar el código en objetos, lo que facilita la reutilización y el mantenimiento. ➔ Programación estructurada, como C, donde el código se organiza en funciones y procedimientos. ➔ Programación genérica: A través de las plantillas, C++ permite crear código que puede funcionar con diferentes tipos de datos, promoviendo la reutilización y la flexibilidad. Entornos de desarrollo Lenguajes de programación más difundidos- JAVASCRIPT Los lenguajes más difundidos- PHP Entornos de desarrollo MVC-MODELO-VISTA-CONTROLADOR El MVC o Modelo-Vista-Controlador es un patrón de arquitectura de software que, utilizando 3 componentes (Vistas, Models y Controladores) separa la lógica de la aplicación de la lógica de la vista en una aplicación. Modelo Se encarga de los datos, generalmente (pero no obligatoriamente) consultando la base de datos. Actualizaciones, consultas, búsquedas, etc. todo eso va aquí, en el modelo. Controlador: Se encarga de\... controlar, recibe las órdenes del usuario y se encarga de solicitar los datos al modelo y de comunicarles a la vista. Vistas: Son la representación visual de los datos, todo lo que tenga que ver con la interfaz gráfica va aquí.Ni el modelo ni el controlador se preocupan de cómo se verán los datos, esa responsabilidad es únicamente de la vista. Fases del desarrollo de una aplicación Fases del desarrollo de una aplicación El ciclo de vida del desarrollo de software es el proceso completo que se sigue para crear una aplicación o sistema. Se divide en varias fases que ayudan a planificar, diseñar, construir y mantener el software. Las fases son: Fases Inicial Por tanto: El cliente solicita un producto de software determinado. Nos contacta para plasmar sus necesidades concretas y presentar su solicitud de desarrollo de software. Por tanto: ➔Hayqueanalizar los recursos que se destinarán al proyecto. ➔Seinvestigará la viabilidad financiera y tecnológica. Se utilizan algoritmos para saber si el proyecto de software es factible o no. ➔Serealizará un presupuesto. ➔serealizarán documentos tanto de planificación (general o detallada) como de estimaciones en los que se incluyen datos económicos, posibles soluciones al problema y sus costes. Fase de Análisis ¿Qué se hace?: En esta fase se define qué es lo que el cliente o los usuarios necesitan de la aplicación. Esto puede ser desde qué funcionalidades tendrá la web (por ejemplo, un sistema de registro de usuarios) hasta qué tipo de información gestionará. Por tanto: ➔Seanaliza el problema. ➔ Recopilar y formular los requisitos del cliente y analizar cualquier restricción que pueda aplicarse. ➔Entrevista con el cliente. ➔Debenquedar registrados en un documento de requisitos de aplicación. ➔Eldocumento obliga a ambas partes a cumplir con lo acordado. Ejemplo: Si estamos creando una tienda online, aquí se definiría que los usuarios podrán ver productos, agregar productos al carrito, y hacer pagos. Fase de Diseño ¿Qué se hace?: Se decide cómo va a ser la estructura de la aplicación. Esto incluye tanto el diseño visual (interfaz gráfica) como el diseño técnico (base de datos, estructura del código). Por tanto: ➔Determinar los requisitos generales de la arquitectura de la aplicación. ➔Los documentos son más técnicos. Suelen crearse dos documentos de diseño: uno más genérico en el que se tiene una visión más general de la aplicación y otro más detallado en que se profundizará en los detalles técnicos. ➔Estos documentos los realizan los analistas junto con la supervisión del jefe de proyecto. Ejemplo: En la tienda online, se diseñarán las páginas que el usuario verá (como la página de productos o el carrito), y también cómo se organizará la información de los productos en la base de datos. Fase de Codificación e Implementación ¿Qué se hace?: Aquí es donde los programadores escriben el código que convierte el diseño en una aplicación funcional. Se programan las funcionalidades de la web. El analista trabaja con los programadores y es donde se usan los lenguajes de programación para el desarrollo del proyecto. En esta etapa también se debe trabajar en conjunto con los usuarios para desarrollar la documentación efectiva para el software, como manuales de procedimiento, ayuda en línea y sitios web que incluyan respuestas a problemas frecuentes. Por tanto: ➔Implementación del software en un lenguaje de programación. ➔Secrea documentación muy detallada que incluye el código. Ejemplo: En una aplicación Web los desarrolladores crearían las funcionalidades para que los usuarios puedan registrarse, ver productos, agregar al carrito, y hacer pagos de manera segura. Fase de Pruebas Fase de Pruebas Ejemplo: ★ Se probaría que los usuarios pueden registrarse correctamente, que los productos se agregan al carrito sin fallos, y que los pagos se procesan de manera segura. ★Las pruebas de estrés de software son una técnica crucial para evaluar el rendimiento y la estabilidad de un sistema de software en condiciones extremas o desfavorables. Consiste en someter la aplicación a altos niveles de estrés, como grandes cargas de usuarios, recursos limitados o entradas de datos excesivas, para identificar su punto de ruptura y sus posibles puntos débiles. Fase de Explotación ¿Qué se hace?: Una vez que la aplicación ha pasado todas las pruebas, se lanza al público. Esto significa que se sube la aplicación al servidor para que los usuarios puedan acceder a ella a través de internet. Ejemplo: La tienda online se publica en un servidor web y los clientes pueden empezar a comprar en ella. Fase de Mantenimiento ¿Qué se hace?: Después de que la aplicación está en funcionamiento, es necesario darle mantenimiento. Esto incluye corregir errores que aparezcan, mejorar funciones o agregar nuevas características según las necesidades de los usuarios. Ejemplo: Si después de un tiempo los usuarios piden una nueva funcionalidad, cómo pagar con PayPal, los desarrolladores la añadirían en esta fase.