BITACORA
20201578109
Facultad Tecnológica
2020
2
TABLA DE CONTENIDO
1………………………………………………………………………………………5
1.1. …………………………………………………………………………………...6
1.2. …………………………………………………………………………………...6
1.2.1. …………………………………………………………………………………8
1.2.2. …………………………………………………………………………………8
1.2.3. …………………………………………………………………………………10
1.2.4. …………………………………………………………………………………10
12.5. ………………………………………………………………………………….11
2. ……………………………………………………………………………………..11
2.1…………………………………………………………………………………….11
2.2…………………………………………………………………………………….12
2.3…………………………………………………………………………………….13
2.4…………………………………………………………………………………….15
3. ……………………………………………………………………………………..15
3.1…………………………………………………………………………………….18
3.2. …………………………………………………………………………………...18
3.3…………………………………………………………………………………….19
3.4…………………………………………………………………………………….22
3.4.1…………………………………………………………………………………..22
3
3.5…………………………………………………………………………………….22
3.6…………………………………………………………………………………….23
3.7…………………………………………………………………………………….24
3.7.1…………………………………………………………………………………..24
3.7.2…………………………………………………………………………………..25
3.7.3…………………………………………………………………………………..25
3.7.4…………………………………………………………………………………..26
3.7.5…………………………………………………………………………………..27
4. ……………………………………………………………………………………..27
4.1…………………………………………………………………………………….29
4.2…………………………………………………………………………………….34
4.3…………………………………………………………………………………….34
4.4. …………………………………………………………………………………...36
4.4.1…………………………………………………………………………………..36
4.4.2…………………………………………………………………………………..36
4.4.3…………………………………………………………………………………..36
4.4.4. …………………………………………………………………………………37
4.4.5. …………………………………………………………………………………37
4.4.6…………………………………………………………………………………..38
4.5. …………………………………………………………………………………...38
4.6…………………………………………………………………………………….41
4.6.1…………………………………………………………………………………..41
4.6.2…………………………………………………………………………………..42
4.6.3…………………………………………………………………………………..42
4.6.4…………………………………………………………………………………..42
4
4.6.5…………………………………………………………………………………..43
4.6.6…………………………………………………………………………………..43
4.6.7…………………………………………………………………………………..43
4.7…………………………………………………………………………………….44
4.8…………………………………………………………………………………….44
4.9…………………………………………………………………………………….45
5. ……………………………………………………………………………………..45
5.1…………………………………………………………………………………….46
5.2…………………………………………………………………………………….49
5.3…………………………………………………………………………………….50
5.4…………………………………………………………………………………….59
5.5. …………………………………………………………………………………...60
5.6. …………………………………………………………………………………...61
5.6.1…………………………………………………………………………………..61
Referencias bibliográficas………………………………………………………...62-66
Conclusiones……………………………………………………………………...67-77
5
1. INTRODUCCIÓN A LA PROGRAMACIÓN
1.1. Lightbot
https://www.minijuegos.com/juego/light-bot
Lightbot es un juego que desarrolla las habilidades tanto de programación como lógicas. El
objetivo es programar el robot para que encienda las casillas azules que aparecen en el tablero
utilizando la menor cantidad de instrucciones posibles.
El juego posee un panel de control con comandos como “girar”, “saltar”, “encender”,
“apagar”, etc., que pondrán a nuestro robot en movimiento y de esa manera superar los doce
niveles.
El mayor problema se presenta cuando nos quedamos sin casillas en el panel de control
principal, por lo que tendremos que comenzar a utilizar funciones, por medio de los
comandos “F1” y “F2” que nos permitirán añadir hasta 8 movimientos más a cada función.
Lightboot puede ser utilizado por los niños a partir de los seis años si ya han sido
alfabetizados.
6
1.2.1. Devc++
https://www.embarcadero.com/es/free-tools/dev-cpp
Embarcadero Dev-C++ es una nueva y mejorada versión (patrocinada por Embarcadero) de
Bloodshed Dev-C++ y Orwell Dev-C++. Es un completo entorno de desarrollo integrado
(IDE) y editor de código para el lenguaje de programación C/C++. Utiliza el puerto Mingw
de GCC (Colección de Compiladores GNU) como su compilador. Embarcadero Dev-C++
7
también puede ser usado junto con Cygwin o cualquier otro compilador basado en GCC.
Embarcadero Dev-C++ está construido con la última versión de Embarcadero Delphi.
Embarcadero Dev-C++ ocupa poco espacio de memoria porque es una aplicación nativa de
Windows y no usa Electrón.
no exigen grandes prestaciones. Es por eso que una aplicación pequeña y que forme parte de
los software de plataforma de código abierto constituye una buena opción, siendo el software
tratado en este artículo (Dev-C++) una herramienta a tener en cuenta en estas circunstancias.
1.2.2. Diagrams.net
Diagrams.net es una aplicación web gratuita y de código abierto que te permite crear una gran
variedad de diagramas desde cualquier navegador web. La herramienta también posee una
versión de escritorio disponible para Windows, Linux y macOS.
Con esta herramienta puedes crear y editar una gran variedad de diagramas como: diagramas
de flujo, diagramas entidad-relación, diagramas UML, organigramas, diagramas de procesos,
mapas mentales, modelos de procesos de negocios, entre otros. Permite agregar imágenes,
configurar los textos, elegir el tipo de fuente, cambiar el idioma y además puedes guardar tu
archivo para configurarlo después. Asimismo, incorpora notaciones matemáticas y capas que
facilitan la edición
1.2.3 NetBeans
https://sites.google.com/site/portafolionetbeans/que-es-netbeans
NetBeans es un programa que sirve como IDE (un entorno de desarrollo integrado) que nos
permite programar en diversos lenguajes.
9
NetBeans es ideal para trabajar con el lenguaje de desarrollo JAVA (y todos sus derivados),
así como también nos ofrece un excelente entorno para programar en PHP. También se puede
descargar una vez instalado NetBeans, los complementos para programar en C++. La IDE de
NetBeans es perfecta. Tiene un excelente balance entre una interfaz con múltiples opciones y
el editor puede autocompletar nuestro código.
NetBeans es un proyecto exitoso de código abierto con una gran base de usuarios, una
comunidad en constante crecimiento, y con cerca de 100 socios (¡y creciendo!) en todo el
mundo. Sun MicroSystems fundó el proyecto de código abierto NetBeans en junio 2000 y
continúa siendo el patrocinador principal de los proyectos.
Al día de hoy hay disponibles dos productos: el NetBeans IDE y NetBeans Platform.
NetBeans IDE es un entorno de desarrollo - una herramienta para que los programadores
puedan escribir, compilar, depurar y ejecutar programas. Está escrito en Java - pero puede
servir para cualquier otro lenguaje de programación. Existe además un número importante de
módulos para extender el NetBeans IDE. NetBeans IDE es un producto libre y gratuito sin
restricciones de uso.
También está disponible NetBeans Platform; una base modular y extensible usada como
estructura de integración para crear grandes aplicaciones de escritorio. Empresas
independientes asociadas, especializadas en desarrollo de software, proporcionan extensiones
adicionales que se integran fácilmente en la plataforma y que pueden también utilizarse para
desarrollar sus propias herramientas y soluciones.
Ambos productos son de código abierto y gratuitos para uso tanto comercial como no
comercial. El código fuente está disponible para su reutilización de acuerdo con la Common
Development and Distribution License ( CDDL) v1.0 and the GNU General Public License
(GPL) v2.
10
¿Qué es netbeans.org?
netbeans.org es el portal de la comunidad de código abierto de NetBeans dedicado a construir
un IDE de primera clase. netbeans.org permite a usuarios de más de 160 países de todo el
mundo estar en contacto con los recursos y los personas alrededor de NetBeans. Es posible
descargar desde aquí las últimas versiones de NetBeans, acceder a la documentación de
ayuda en línea, profundizar su conocimiento personal de Java, estar al corriente de las últimas
noticias, unirse a una lista de distribución, contribuir código, conocer las personas implicadas
en el proyecto, conocer gente, y mucho más.
1.2.4. JRE
JRE o Java Runtime Environment: un conjunto de herramientas que permite ejecutar código
compilado en Java. La noción de environment o ambiente donde viven los objetos está dado
por la JVM (Java Virtual Machine).
1.2.5 JDK
JDK o Java Development Kit: incluye al JRE y además le agrega herramientas propias para
desarrollar en Java: el compilador (javac), el generador de documentación html para las
clases (javadoc), el debugger (jdb), entre otros.
11
2. LENGUAJE C++
http://c.conclase.net/curso/?cap=901
2.2. Vectores
Los vectores son una forma de almacenar datos que permiten contener una serie de valores
del mismo tipo, cada uno de los valores contenidos tiene una posición asociada que se usará
para accederlos. Está posición o índice será siempre un número entero positivo.
Un array o arreglo (lista o tabla) es una secuencia de datos del mismo tipo. Los datos se
llaman elementos del array y se numeran consecutivamente 0, 1, 2, 3 ... El tipo de elementos
almacenados en el array puede ser cualquier dato simple de Java o de un tipo previamente
declarado como una clase. Normalmente, el array se utiliza para almacenar tipos tales como
char, int o float.
12
Un array puede contener, por ejemplo, la edad de los alumnos de una clase, las temperaturas
de cada día de un mes en una ciudad determinada o el número de personas que residen en
cada una de las diecisiete comunidades autónomas españolas. Cada ítem del array se
denomina elemento.
Si el nombre del array es a, entonces a[0] es el nombre del elemento que está en la posición 0,
a[1] es el nombre del elemento que está en la posición 1, etc. En general, el elemento i-ésimo
está en la posición i-1, de modo que si el array tiene n elementos, sus nombres son
a[0],a[1],...,a[n-1]. Gráficamente, se representa así el array a con seis elementos.
https://es.wikibooks.org/wiki/Programación_en_C/Vectores
Aunque la leyenda es interesante, usted no tiene que preocuparse de que el final del mundo
ocurra pronto en cualquier momento. El número de movimientos necesarios para mover
correctamente una torre de 64 discos
es 264−1=18,446,744,073,709,551,615264−1=18,446,744,073,709,551,615. A una velocidad
de un movimiento por segundo, ¡eso sería 584,942,417,355584,942,417,355 años!
Claramente hay algo más en este rompecabezas de lo que parece.
https://runestone.academy/runestone/static/pythoned/Recursion/LasTorresDeHanoi.html
14
2.4. Matrices
Las matrices o como algunos las llaman "arreglos multidimensionales" son una estructura de
datos bastante similar a los vectores o arreglos. De hecho, una matriz no es más que una serie
de vectores contenidos uno en el otro (u otros), es decir, una matriz es un vector cuyas
posiciones son otros vectores. Hablemos con más detalle de esto para quedar más claros.
Un array en Java puede tener más de una dimensión. El caso más general son los arrays
bidimensionales también llamados matrices o tablas.
La dimensión de un array la determina el número de índices necesarios para acceder a sus
elementos.
Los vectores que hemos visto en otra entrada anterior son arrays unidimensionales porque solo
utilizan un índice para acceder a cada elemento.
Una matriz necesita dos índices para acceder a sus elementos. Gráficamente podemos
representar una matriz como una tabla de n filas y m columnas cuyos elementos son todos del
mismo tipo
Se crean de forma similar a los arrays unidimensionales, añadiendo un índice.
Por ejemplo:
matriz de datos de tipo int llamado ventas de 4 filas y 6 columnas:
int [][] ventas = new int[4][6];
matriz de datos double llamado temperaturas de 3 filas y 4 columnas:
double [][] temperaturas = new double[3][4];
En Java se pueden crear arrays irregulares en los que el número de elementos de cada fila es
variable. Solo es obligatorio indicar el número de filas.
Por ejemplo:
int [][] m = new int[3][];
crea una matriz m de 3 filas.
A cada fila se le puede asignar un número distinto de columnas:
m[0] = new int[3];
m[1] = new int[5];
m[2] = new int[2];
Gráficamente podemos representar la disposición real en memoria del array anterior así:
15
http://puntocomnoesunlenguaje.blogspot.com/2012/12/matriz-en-java.html
3. LENGUAJE JAVA
http://www.manualweb.net/java/historiajava/#:~:text=El%20lenguaje%20Java%20fue%20de
sarrollado,Java%2C%20corría%20el%20año%201996.
El lenguaje Java fue desarrollado en sus inicios por James Gosling, en el año 1991.
Inicialmente Java era conocido como Oak o Green.
La primera versión del lenguaje Java es publicada por Sun Microsystems en 1995. Y es en la
versión del lenguaje JDK 1.0.2, cuando pasa a llamarse Java, corría el año 1996.
En las primeras versiones de Java 1.1, 1.2 y 1.3 es en la que el lenguaje va tomando forma,
con la inclusión de tecnologías como JavaBeans, JDBC para el acceso a base de
datos, RMI para las invocaciones en remoto, Collections para la gestión de múltiples
estructuras de datos o AWT para el desarrollo gráfico, entre otros.
16
La versión Java 1.4 pasa a ser la primera versión gestionada por la comunidad mediante
el Java Community Process (JCP).
Se trabaja con Java Specification Requests (JSRs) que son las nuevas funcionalidades que se
busca que tenga el lenguaje.
Java 1.4 se liberaba como JSR 59, corría el año 2002. ALgunas de las características que
contenía eran: librería NIO para IO no bloqueante, JAXP para el procesado
de XML y XSLT o el API para preferencias.
Java 5
En 2004 se estaba trabajando con la versión Java 1.5, pero con vistas a reflejar el nivel de
madurez de la plataforma Java se renombra a Java 5.
A partir de este momento se identifica el JDK con la versión 1.x, mientras que la
plataforma Java sigue con la nueva política de versionado.
Así JDK 1.5 corresponde con Java 5 , JDK 1.6 corresponde con Java 6 ,… y así
sucesivamente.
Java 6
En el año 2006 aparece la versión Java 6 en la que podíamos encontrar cosas como el soporte
de lenguajes de script, facilidades para la exposición y consumo de webservices
mediante JAX-WS, nuevos tipos de drivers con JDBC 4 y la versión 2 de JAXB.
Una de las cosas que sucede en noviembre 2006 es que Sun Microsystems lo convierte en
Open Source mediante una licencia GNU General Public License (GPL).
Dando lugar en mayo 2008 a lo que se conoce como OpenJDK, con OpenJDK 6.
17
Java 7
Llegado julio de 2011 ve la luz Java 7, la cual trae como novedades el soporte de lenguajes
dinámicos, dotando a la JVM de un soporte de mútiples lenguajes y una nueva librería I/O
para el manejo de ficheros.
También aparecen cosas menores, pero muy útiles como el manejo de String dentro de la
validación en una estructura switch o la capacidad de poner subrayados en los números para
que se puedan leer mejor.
Entre las características de Java 8 tenemos el soporte expresiones Lambda y uso de Streams,
que permiten un estilo más funcional para los programas Java. Dentro de este enfoque más
funcional también aparecen las transformaciones MapReduce.
Ve la luz el Proyecto Nashorn para disponer de un engine Javascript y así poder incluir este
lenguaje dentro de las aplicaciones Java.
Otras cosas son un nuevo API Date y Time y la inclusión de JavaFX 8 dentro de la JDK
de Java.
Java 9
Aunque en el roadmap se esperaba que Java 9 estuviera disponible para el 2016, los
problemas de seguridad encontrados dentro de la plataforma han causado que se vaya
demorando.
Dentro de esta versión podremos encontrar el Project Jigsaw que establece la modularización
de la JDK, el Java Shell con el que podremos trabajar e interactuar al estilo RELP (Read–
eval–print loop), soporte para http 2.0
18
Los lenguajes de programación de alto nivel como C, C++, Java o Python, por citar unos pocos,
sirven para comunicarse con una computadora mediante algo más fácil de entender para un
humano que el "lenguaje máquina" o el lenguaje ensamblador, que está muy cercano a la
máquina. Estos lenguajes se llaman "de alto nivel" porque están en un nivel de abstracción
mucho mayor que el que ofrece un ordenador: tienen bucles, condicionales, matrices, tipos de
datos...
Tradicionalmente, el compilador de un lenguaje de alto nivel se encargaba de traducir ese
lenguaje "sencillo" en lenguaje máquina, directamente utilizable por el computador a través del
sistema operativo. Es decir, cuando compilamos un programa en C++ lo que obtenemos es un
programa ejecutable, por ejemplo, para Windows, que este sistema operativo es capaz de
ejecutar directamente contra el procesador, en un lenguaje "entendible" por este.
Sin embargo, muchos lenguajes modernos como Java o C# (y otros lenguajes de la
plataforma .NET), lo que hacen es utilizar un paso intermedio entre estos dos estados: entre el
código de alto nivel en el que escribimos las aplicaciones y el de bajo nivel que sale del proceso
de compilación
3.3 API de java
El API de Java está formado por una amplísima jerarquía de clases que cubren una gran
cantidad de aspectos relacionados con el desarrollo de software en general. Esta organizado
en packages ordenados por temas. El J2SE (Java 2 Standard Edition) permite la utilización de
todos estos packages en el desarrollo de programas Java y el JRE (Java Runtime
Environment) permite la ejecución de programas que usan cualquiera de las clases del API.
La documentación que acompaña al J2SE contiene un manual de referencia completo
ordenado por packages y clases de todo el contenido del API. Su consulta resulta
imprescindible para cualquier desarrollo.
El API de Java es vastísimo. La versión actual (1.3) contiene 76 packages y
aproximadamente 2000 elementos entre clases, interfaces, excepciones, etc. Por tanto, el
conocimiento en profundidad del API no es tarea trivial, pero a la vez es imprescindible si se
quieren abordar desarrollos extensos. La aproximación debe realizarse de forma progresiva,
teniendo un conocimiento general de las capacidades globales del API, para ir adquiriendo
una mayor especialización en función de las necesidades. Antes de intentar resolver cada
problema de programación es conveniente reflexionar que packages del API pueden
ayudarnos a resolverlo (si es que no está resuelto completamente).
19
La API Java es una interfaz de programación de aplicaciones (API, por sus siglas
del inglés: Application Programming Interface) provista por los creadores del lenguaje de
programación Java, que da a los programadores los medios para desarrollar aplicaciones Java.
La API Java está organizada en paquetes lógicos, donde cada paquete contiene un conjunto
de clases relacionadas semánticamente.
int i; i entero
https://users.dcc.uchile.cl/~lmateu/Java/Apuntes/tiposprim.htm
20
https://users.dcc.uchile.cl/~lmateu/Java/Apuntes/tiposprim.htm
Las variables de tipos primitivos almacenan directamente un valor que siempre pertenece al
rango de ese tipo. Por ejemplo una variable int almacena un valor entero como 1, 2, 0, -1, etc.
Esto significa que al asignar una variable entera a otra variable entera, se copia el valor de la
primera en el espacio que ocupa la segunda variable.
Las variables de tipo referencia a objetos en cambio almacenan direcciones y no valores
directamente. Una referencia a un objeto es la dirección de un área en memoria destinada a
representar ese objeto. El área de memoria se solicita con el operador new.
Al asignar una variable de tipo referencia a objeto a otra variable se asigna la dirección y no
el objeto referenciado por esa dirección. Esto significa que ambas variables quedan
refenciando el mismo objeto.
La diferencia entre ambas asignaciones se observa en la siguiente figura:
https://users.dcc.uchile.cl/~lmateu/Java/Apuntes/tiposprim.htm
21
Esto tiene implicancias mayores ya que si se modifica el objeto referenciado por r, entonces
también se modifica el objeto referenciado por s, puesto que son el mismo objeto.
En Java una variable no puede almacenar directamente un objeto, como ocurre en C y C++.
Por lo tanto cuando se dice en Java que una variable es un string, lo que se quiere decir en
realidad es que la variable es una referencia a un string.
Tipos primitivos
En la siguiente tabla se indica para cada tipo primitivo el número de bits que se emplea en su
representación y el rango de valores que se puede almacenar en las variables de estos tipos.
https://users.dcc.uchile.cl/~lmateu/Java/Apuntes/tiposprim.htm
Las variables Java son un espacio de memoria en el que guardamos un determinado valor (o
dato). Para definir una variable seguiremos la estructura:
Java es un lenguaje de tipado estático. Por lo cual todas las variables tendrán un tipo de dato
(ya sea un tipo de dato primitivo o una clase) y un nombre de identificador.
El tipo de dato se asignará a la hora de definir la variable. Además, en el caso de que las
variables sean propiedades de objetos tendrán una privacidad.
En este capítulo tenéis un listado de las palabras reservadas de Java orientado a objetos.
Las palabras reservadas son identificadores, pero como su nombre indica, estas palabras están
reservadas, y no se pueden usar como identificadores de usuario.
https://www.ciberaula.com/cursos/java/palabras_reservadas_java.php
Un operador lleva a cabo operaciones sobre uno (operador unario), dos (operador binario) o
tres (operador ternario) datos u operandos de tipo primitivo devolviendo un valor
determinado también de un tipo primitivo. El tipo de valor devuelto tras la evaluación
depende del operador y del tipo de los operandos. Por ejemplo, los
operadores aritméticos trabajan con operandos numéricos, llevan a cabo operaciones
aritméticas básicas y devuelven el valor numérico correspondiente. Los operadores se pueden
clasificar en distintos grupos según se muestra en los siguientes apartados.
Se detalla con ejemplos todos los tipos de operadores que existen en Java. Como por
ejemplo: Operadores relacionales, aritméticos, lógicos, de asignación, entre otros.
Java proporciona muchos tipos de operadores que se pueden usar según la necesidad. Se
clasifican según la funcionalidad que brindan. Algunos de los tipos son los siguientes:
• Operadores aritméticos
• Operadores unarios
• Operador de asignación
• Operadores relacionales
• Operadores lógicos
• Operador ternario
24
https://www.arkaitzgarro.com/java/capitulo-4.html
3.7.2 Operadores aritméticos
https://www.arkaitzgarro.com/java/capitulo-4.html
25
https://sites.google.com/site/unidad1hebervanegasuribe/unidad-3/java---operadores-y-tipos-
de-datos
https://www.arkaitzgarro.com/java/capitulo-4.html
Calcular el mayor de dos números con Java es una cosa realmente sencilla con Java. Si
preguntas a cualquier programador te dirá que puedes utilizar un simple if-then-else.
Quedando un programa de pocas líneas.
Pero lo que, sorprendentemente, muchos programadores Java no saben, ¿es que existe un
operador condicional ternario ?: que nos ayuda a realizar estas operaciones con mucho menor
código.
Donde a la variable resultado recibirá el valor1 en el caso de que la condición sea true o bien
el valor2 en el caso de que la condición sea false.
27
http://www.manualweb.net/java/historia-
java/#:~:text=El%20lenguaje%20Java%20fue%20desarrollado,Java%2C%20corría%20el%2
0año%201996.
Uno de los problemas de inicio de los años setentas era que pocos sistemas lograban
terminarse, pocos se terminaban con los requisitos iniciales y no todos los que se terminaban
cumpliendo con los requerimientos se usaban según lo planificado. El problema consistía en
cómo adaptar el software a nuevos requerimientos imposibles de haber sido planificados
inicialmente.
28
En los 70’s científicos del centro de investigación en Palo Alto Xerox (Xerox park)
inventaron el lenguaje Small talk que dio respuesta al problema anterior (investigar no
planificar).
Small talk fue el primer lenguaje Orientado a Objetos puro de los lenguajes Orientados a
Objetos, es decir, únicamente utiliza clases y objetos (Java usa tipos de datos primitivos, o
bien los Wrappers que son clases que encapsulan tipos de datos primitivos).
Quien tuvo la idea fue D. Parnas cuando propuso la disciplina de ocultar la información. Su
idea era encapsular cada una de las variables globales de la aplicación en un solo módulo
junto con sus operaciones asociadas, sólo mediante las cuales se podía tener acceso a esas
variables.
El resto de los módulos (objetos) podían acceder a las variables sólo de forma indirecta
mediante las operaciones diseñadas para tal efecto.
En los años 80’s Bjarne Stroustrup de AT&T Labs., amplió el lenguaje C para crear C++ que
soporta la programación Orientada a Objetos.
En esta misma década se desarrollaron otros lenguajes Orientados a Objetos como Objective
C, Common Lisp Object System (CIOS), object Pascal, Ada y otros.
En el inicio de los 90’s se consolida la Orientación a Objetos como una de las mejores
maneras para resolver problemas. Aumenta la necesidad de generar prototipos más
rápidamente (concepto RAD Rapid Aplication Developments). Sin esperar a que los
requerimientos iniciales estén totalmente precisos.
Al programar orientado a objetos tenemos que aprender a pensar cómo resolver los
problemas de una manera distinta a como se realizaba anteriormente, en la programación
estructurada. Ahora tendremos que escribir nuestros programas en términos de clases,
objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos
y dar una pequeña base que permita soltarnos un poco con los conceptos de este tipo de
programación.
30
Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que
resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los
programadores puedan ser reutilizados se creó la posibilidad de utilizar módulos. El primer
módulo existente fue la función, que somos capaces de escribir una vez e invocar cualquier
número de veces.
Sin embargo, la función se centra mucho en aportar una funcionalidad dada, pero no tiene
tanto interés con los datos. Es cierto que la función puede recibir datos como parámetros,
pero los trata de una forma muy volatil. Simplemente hace su trabajo, procesando los
parámetros recibidos y devuelve una respuesta.
En las aplicaciones en realidad los datos están muy ligados a la funcionalidad. Por ejemplo
podemos imaginar un punto que se mueve por la pantalla. El punto tiene unas coordenadas y
podemos trasladarlo de una posición a otra, sumando o restando valores a sus coordenadas.
Antes de la programación orientada a objetos ocurría que cada coordenada del punto tenía
que guardarse en una variable diferente (dos variables para ser exacto: x, y) y las funciones
de traslación estaban almacenadas por otra parte. Esta situación no facilitaba la organización
del código ni tampoco su reutilización.
Con la Programación Orientada a Objetos se buscaba resolver estas situaciones, creando unas
mejores condiciones para poder desarrollar aplicaciones cada vez más complejas, sin que el
código se volviera un caos. Además, se pretendía dar una de pautas para realizar las cosas de
manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que
consigamos que el código se pueda reutilizar.
La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de quien la
programa, de manera que la forma de hacer las cosas puede ser diferente según el
programador. Aunque podamos hacer los programas de formas distintas, no todas ellas son
correctas, lo difícil no es programar orientado a objetos sino programar bien. Programar bien
es importante porque así nos podemos aprovechar de todas las ventajas de la POO.
Cómo se piensa en objetos
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 para tratar de modelizarlo en un esquema de POO.
Diríamos que el coche es el elemento principal que tiene una serie de características, como
podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades
asociadas, como pueden ser ponerse en marcha, parar o aparcar.
31
Pues en un esquema POO "el coche" sería lo que se conoce como "Clase". Sus características,
como el color o el modelo, serían propiedades y las funcionalidades asociadas, como ponerse
en marcha o parar, serían métodos.
La clase es como un libro, que describe como son todos los objetos de un mismo tipo. La
clase coche describe cómo son todos sus coches, qué propiedades tienen y qué
funcionalidades deben poder realizar. A partir de una clase podemos crear cualquier número
de objetos de esa clase. Un coche rojo que es de la marca Ford y modelo Fiesta, otro verde
que es de la marca Seat y modelo Ibiza.
Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción,
es decir, esa estructura matemática que tiene un numerador y un denominador que divide al
numerador, por ejemplo 3/2.
La fracción será la clase y tendrá dos propiedades, el numerador y el denominador. Luego
podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse
con otra fracción, etc.
A partir de la definición de una fracción (la clase) podremos construir un número
indeterminado de objetos de tipo fracción. Por ejemplo podemos tener el objeto fracción 2/5
o 3/9, 4/3, etc. Todos esos son objetos de la clase fracción de números enteros.
Estas clases se podrán utilizar en los programas, por ejemplo en un programa de matemáticas
harás uso de la clase fracción y construirás muchos objetos de tipo fracción para hacer
cuentas diversas. En un programa que gestione un taller de coches utilizarás la clase coche y
se instanciarán diversos objetos de tipo coche para hacer las operativas.
En los lenguajes puramente orientados a objetos, tendremos únicamente clases y objetos. Las
clases permitirán definir un número indeterminado de objetos, que colaboran entre ellos para
resolver los problemas. Con muchos objetos de diferentes clases conseguiremos realizar las
acciones que se desean implementar en la funcionalidad de la aplicación. Además, las propias
aplicaciones como un todo, también serán definidas por medio de clases. Es decir, el taller de
coches será una clase, de la que podremos crear el objeto taller de coches, que utilizará
objetos coche, objetos de clase herramienta, objetos de clase mecánico, objetos de clase
recambio, etc.
Clases en POO
Como habrás podido entender, 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
32
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.
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 (que viene de una mala traducción de la palabra instace que en
inglés significa ejemplar). 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.
Para crear un objeto se tiene que escribir una instrucción especial que puede ser distinta
dependiendo el lenguaje de programación que se emplee, pero será algo parecido a esto.
Con la palabra "new" especificamos que se tiene que crear una instancia de la clase que sigue
a continuación. Dentro de los paréntesis podríamos colocar parámetros con los que inicializar
el objeto de la clase coche.
Estados en objetos
Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando
tenemos un coche la propiedad color tomará un valor en concreto, como por ejemplo rojo o
gris metalizado. El valor concreto de una propiedad de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador
punto.
miCoche.color = "rojo"
33
miCoche.ponerseEnMarcha()
La programación orientada a objetos presenta también algunas desventajas como pueden ser:
*Abstracción
*Encapsulamiento.
*Polimorfismo.
El polimorfismo como sobrecarga en Java ocurre cuando una clase T tiene múltiples
métodos con el mismo nombre, cada uno de ellos con una signatura (combinación de su
nombre y el tipo y número de argumentos que pasan por los métodos) diferente
*Herencia.
Clase: Es un prototipo o modelo que define los atributos y métodos comunes a todos los
objetos de cierto tipo.
Mensaje: La interacción entre objetos se produce mediante mensajes. Los mensajes son
llamados a métodos de un objeto en particular.
36
4.4.1 Abstracción
4.4.2 Encapsulamiento.
4.4.3. Modularidad
4.4.4 Herencia
Esta particularidad permite crear una estructura jerárquica de clases cada vez más
especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea
37
especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases
que ofrecen una base que puede especializarse a voluntad
4.4.5 Poliformlismo
Trataremos de explicarlo en este artículo con palabras sencillas, pero para los valientes, aquí
va una primera definición que no es mía y que carece de la prometida sencillez. Pero no te
preocupes, pues la entiendas o no, luego lo explicaré todo de manera más llana.
4.4.6 Encapsulamiento
Conclusión
Este consiste en la ocultación de variables para una mejor rendición de la misma de forma
que al querer cambiar los valores de ellas solo se podrá atravesó de este termino
38
4.5. Ejemplos
Propia autoría
Pero observamos varios términos como Clases, Objetos, atributos y métodos, a continuación,
explicaremos cada uno de ellos y su relación
Objeto:
Se trata de un ente abstracto usado en programación que permite separar los diferentes
componentes de un programa, simplificando así su elaboración, depuración y posteriores
mejoras.
Los objetos integran, a diferencia de los métodos procedurales, tanto los procedimientos
como las variables y datos referentes al objeto.
A los objetos se les otorga ciertas características en la vida real. Cada parte del programa que
39
se desea realizar es tratado como objeto, siendo así estas partes independientes las unas de las
otras. Los objetos se componen de 3 partes fundamentales: metodos, eventos y atributos.
Métodos:
Son aquellas funciones que permite efectuar el objeto y que nos rinden algún tipo de servicio
durante el transcurso del programa.
Determinan a su vez como va a responder el objeto cuando recibe un mensaje.
Eventos:
Son aquellas acciones mediante las cuales el objeto reconoce que se está interactuando con él.
De esta forma el objeto se activa y responde al evento según lo programado en su código.
Atributos:
Características que aplican al objeto solo en el caso en que el sea visible en pantalla por el
usuario; entonces sus atributos son el aspecto que refleja, tanto en color, tamaño, posición, si
está o no habilitado.
Se considera un coche un objeto, totalmente diferenciado del alquitrán donde está aparcado.
Sus atributos son su color, marca, modelo, número de matrícula, número de puertas,...
Sus eventos todos aquellas acciones por las cuales si el coche tuviera vida propia reconocería
que le estamos dando un uso, como abrir la puerta, girar el volante, embragar, abrir el capot,
....
Los métodos son todo aquello que nos ofrece el coche como hacer sonar una bocina cuando
tocamos el claxon (evento), llevarnos por la carretera, reducir la velocidad al pisar el freno
(evento), ...
Mensajes:
Aunque los objetos se han de diferenciar claramente en una aplicación, estos se han de poder
comunicar para poder trabajar en conjunto y construir así aplicaciones.
Esto se hace posible a través de lo que se denomina paso de mensajes. Cuando un objeto
quiere comunicarse con otro lo que hace es enviarle un mensaje con los datos que desea
40
transmitir.
En el simil del coche, al apretar el claxon, el objeto claxon envía un mensaje a la bocina
indicándole que haga sonar cierto sonido.
La potencia de este sistema radica en que el objeto emisor no necesita saber la forma en que
el objeto receptor va a realizar la acción. Simplemente este la ejecuta y el emisor se
desentiende del como; de hecho ni le importa, solo tiene conocimiento de que se está
realizando.
Para que todo esto sea posible es necesario una buena programación de los eventos y de los
métodos de cada objeto.
El conjunto de mensajes a los que un objeto puede responder se denomina protocolo del
objeto.
Instancia:
Se llama instancia a todo objeto que derive de algún otro. De esta forma, todos los objetos
son instancias de algún otro, menos la clase Object que es la madre de todas.
Clases: Descripción de de objeto. Consta de una serie de métodos y datos que resumen las
características de este objeto. Definir clases permite trabajar con código reutilizable. Puesto
que desde una clase se puede crear una instancia y así reutilizar el código escrito para esta si
tener que volver a escribir el código para la instancia. La instancia toma el patrón de la clase
padre. Sin embargo, las variables son idependientes.
Herencia:
Encapsulación:
Define el comportamiento de una clase u objeto que tiene dentro de él todo tipo de métodos y
datos pero que solo es accesible mediante el paso de mensajes. y los datos a través de los
métodos del objeto/clase.
Polimorfismo:
Los objetos responden a los mensajes que se les envían. Un mismo mensaje puede ser
interpretado o dar paso a distintas acciones según que objeto es el destinatario.
Con este sistema el emisor se desentiende de los detalles de la ejecución (aunque el
programador ha de saber en todo momento cuales son las consecuencias de ese mensaje).
Los objetos se crean a medida que estos son requeridos (en vez de todos a la vez, con la
consiguiente pérdida de memoria) y se eliminan de la misma forma.
4.6.1 Objeto:
Se trata de un ente abstracto usado en programación que permite separar los diferentes
componentes de un programa, simplificando así su elaboración, depuración y posteriores
mejoras.
Los objetos integran, a diferencia de los métodos procedurales, tanto los procedimientos
como las variables y datos referentes al objeto.
A los objetos se les otorga ciertas características en la vida real. Cada parte del programa que
se desea realizar es tratado como objeto, siendo así estas partes independientes las unas de las
otras. Los objetos se componen de 3 partes fundamentales: métodos, eventos y atributos.
4.6.2, Métodos:
Son aquellas funciones que permite efectuar el objeto y que nos rinden algún tipo de servicio
durante el transcurso del programa.
Determinan a su vez como va a responder el objeto cuando recibe un mensaje
42
4.6.3. Eventos:
Son aquellas acciones mediante las cuales el objeto reconoce que se está interactuando con él.
De esta forma el objeto se activa y responde al evento según lo programado en su código.
4.6.4. Atributos:
Características que aplican al objeto solo en el caso en que él sea visible en pantalla por el
usuario; entonces sus atributos son el aspecto que refleja, tanto en color, tamaño, posición, si
está o no habilitado.
Se considera un coche un objeto, totalmente diferenciado del alquitrán donde está aparcado.
Sus atributos son su color, marca, modelo, número de matrícula, número de puertas,...
Sus eventos todos aquellas acciones por las cuales si el coche tuviera vida propia reconocería
que le estamos dando un uso, como abrir la puerta, girar el volante, embragar, abrir el capot,
....
Los métodos son todo aquello que nos ofrece el coche como hacer sonar una bocina cuando
tocamos el claxon (evento), llevarnos por la carretera, reducir la velocidad al pisar el freno
(evento), ...
4.6.5 Mensajes:
Aunque los objetos se han de diferenciar claramente en una aplicación, estos se han de poder
comunicar para poder trabajar en conjunto y construir así aplicaciones.
Esto se hace posible a través de lo que se denomina paso de mensajes. Cuando un objeto
quiere comunicarse con otro lo que hace es enviarle un mensaje con los datos que desea
transmitir.
En el símil del coche, al apretar el claxon, el objeto claxon envía un mensaje a la bocina
indicándole que haga sonar cierto sonido.
La potencia de este sistema radica en que el objeto emisor no necesita saber la forma en que
el objeto receptor va a realizar la acción. Simplemente este la ejecuta y el emisor se
desentiende del cómo; de hecho, ni le importa, solo tiene conocimiento de que se está
realizando.
Para que todo esto sea posible es necesario una buena programación de los eventos y de los
43
4.6.6. Instancia:
Se llama instancia a todo objeto que derive de algún otro. De esta forma, todos los objetos
son instancias de algún otro, menos la clase Object que es la madre de todas.
Clases: Descripción de objeto. Consta de una serie de métodos y datos que resumen las
características de este objeto. Definir clases permite trabajar con código reutilizable. Puesto
que desde una clase se puede crear una instancia y así reutilizar el código escrito para esta si
tener que volver a escribir el código para la instancia. La instancia toma el patrón de la clase
padre. Sin embargo, las variables son independientes.
Los métodos get y set, son simples métodos que usamos en las clases para mostrar (get) o
modificar (set) el valor de un atributo. El nombre del método siempre será get o set y a
continuación el nombre del atributo, su modificador siempre es public ya que queremos
mostrar o modificar desde fuera la clase.
El nivel de accesibilidad controla si se pueden usar desde otro código del ensamblado u otros
ensamblados.
public: Puede obtener acceso al tipo o miembro cualquier otro código del mismo ensamblado
o de otro ensamblado que haga referencia a éste.
private: solamente el código de la misma class o struct puede acceder al tipo o miembro.
44
protected: solamente el código de la misma class, o bien de una class derivada de esa class,
puede acceder al tipo o miembro.
internal: Puede obtener acceso al tipo o miembro cualquier código del mismo ensamblado,
pero no de un ensamblado distinto.
protected internal: cualquier código del ensamblado en el que se ha declarado, o desde una
class derivada de otro ensamblado, puede acceder al tipo o miembro.
private protected: el código de la misma class, o de un tipo derivado de esa class, puede
acceder al tipo o miembro solo dentro de su ensamblado de declaración.
Es el mecanismo en el cual una clase se construye a partir de otros objetos de igual o distinto
tipo, pudiéndolos combinar para obtener la funcionalidad deseada. En la composición la
nueva clase, mantiene una relación “Usa/Tiene un” (Uses/Has a), con los objetos que son
parte de la clase.
Por ejemplo, si tomamos la computadora como una clase, veremos que está compuesta por
otros objetos, por lo que diríamos la clase computadora tiene un procesador, tiene un disco
duro, etc.
Java proporciona un grupo de clases que almacenan secuencias de objetos de cualquier tipo,
son las colecciones. Se diferencian en la forma de organizar los objetos y, en consecuencia, la
manera de recuperarlos. La clase Vector (paquete java.util) es una de estas colecciones, tiene
un comportamiento similar a un array unidimensional. Un Vector guarda objetos (referencias)
de cualquier tipo y crece dinámicamente, sin necesidad de tener que programar operaciones
adicionales. El array donde almacena los elementos es de tipo Object. Su declaración:
protected Object elementData[]
45
El objetivo de ambos era unificar dos métodos que habían desarrollado: el método Booch y el
OMT (Object Modelling Tool ). El primer borrador apareció en octubre de 1995. En esa
misma época otro reputado investigador, Jacobson, se unió a Rational y se incluyeron ideas
suyas.
Estas tres personas son conocidas como los “tres amigos”. Además, este lenguaje se abrió a la
colaboración de otras empresas para que aportaran sus ideas. Todas estas colaboraciones
condujeron a la definición de la primera versión de UML.
De las tres metodologías de partida, las de Bco. y Rumbaugh pueden ser descritas como
centradas en objetos, ya que sus aproximaciones se enfocan hacia el modelado de los objetos
que componen el sistema, su relación y colaboración.
Por otro lado, la metodología de Jacobson es más centrada a usuario, ya que todo en su
método se deriva de los escenarios de uso. UML se ha ido fomentando y aceptando como
estándar desde el OMG, que es también el origen de CORBA, el estándar líder en la industria
para la programación de objetos distribuidos.
En 1997 UML 1.1 fue aprobada por la OMG convirtiéndose en la notación estándar de facto
para el análisis y el diseño orientado a objetos.
UML es el primer método en publicar un meta-modelo en su propia notación, incluyendo la
notación para la mayoría de la información de requisitos, análisis y diseño. Se trata pues de
un meta-modelo auto-referencial (cualquier lenguaje de modelado de propósito general
debería ser capaz de modelarse a sí mismo)
46
El Lenguaje Unificado de Modelado (UML) fue creado para forjar un lenguaje de modelado
visual común y semántica y sintácticamente rico para la arquitectura, el diseño y la
implementación de sistemas de software complejos, tanto en estructura como en
comportamiento. UML tiene aplicaciones más allá del desarrollo de software, p. ej., en el
flujo de procesos en la fabricación.
UML no es un lenguaje de programación, pero existen herramientas que se pueden usar para
generar código en diversos lenguajes usando los diagramas UML. UML guarda una relación
directa con el análisis y el diseño orientados a objetos
UML usa las fortalezas de estos tres enfoques para presentar una metodología más uniforme
que sea más sencilla de usar. UML representa buenas prácticas para la construcción y
documentación de diferentes aspectos del modelado de sistemas de software y de negocios.
47
"The Three Amigos" (los tres amigos) de la ingeniería de software, como se los conocía,
habían desarrollado otras metodologías. Se asociaron para brindar claridad a los
programadores creando nuevos estándares. La colaboración entre Grady, Booch y Rumbaugh
fortaleció los tres métodos y mejoró el producto final.
Los esfuerzos de estos pensadores derivaron en la publicación de los documentos UML 0.9 y
0.91 en 1996. Pronto se hizo evidente que varias organizaciones, incluidas Microsoft, Oracle
e IBM, consideraron que UML era esencial para su propio desarrollo de negocios. Ellos,
junto con muchas otras personas y compañías, establecieron los recursos necesarios para
desarrollar un lenguaje de modelado hecho y derecho. "Los tres amigos" publicaron la Guía
del usuario para el Lenguaje Unificado de Modelado en 1999, y una actualización que
incluye información sobre UML 2.0 en la segunda edición de 2005.
muchos propósitos durante todas las etapas del ciclo de vida del software en sistemas de
cualquier tamaño.
Especificar los elementos de notación de lectura humana para representar los conceptos
individuales de modelado UML, así como las reglas para combinarlos en una variedad de
diferentes tipos de diagramas que corresponden a diferentes aspectos de los sistemas
modelados.
49
Definir formas que permitan hacer que las herramientas UML cumplan con esta
especificación. Esto se apoya (en una especificación independiente) con una especificación
basada en XML de formatos de intercambio de modelos correspondientes (XMI) que deben
ser concretados por herramientas compatibles.
El UML es popular entre programadores, pero no suele ser usado por desarrolladores de
bases de datos. Una razón es sencillamente que los creadores de UML no se enfocaron en las
bases de datos. A pesar de ello, el UML es efectivo para el modelado de alto nivel de datos
conceptuales y se puede usar en diferentes tipos de diagramas UML. Puedes encontrar
información sobre la multidimensionalidad de un modelo de clases orientado a objetos en una
base de datos relacional en este artículo sobre Modelado de bases de datos en UML.
El lenguaje de modelado es la notación (principalmente gráfica) que usan los métodos para
expresar un diseño. El proceso indica los pasos que se deben seguir para llegar a un
diseño.
Características de un UML :
visualizar.
Especificar
.Construir
Documentación
50
Construcción
Implantación de sistema
El UML está compuesto por diversos elementos gráficos que se combinan para conformar
diagramas. Debido a que el UML es un lenguaje, cuenta con reglas para combinar tales
elementos. La finalidad de los diagramas es presentar diversas perspectivas de un sistema, a
las cuales se les conoce como modelo. Recordemos que un modelo es una representación
simplificada de la realidad; el modelo UML describe lo que supuestamente hará un sistema,
pero no dice cómo implementar dicho sistema. A continuación, se describirán los diagramas
más comunes del UML y los conceptos que representan:
El Lenguaje Unificado de Modelado (UML, por sus siglas en inglés) puede ayudarte a
modelar sistemas de diversas formas. Uno de los tipos más populares en el UML es el
diagrama de clases. Popular entre los ingenieros de software para documentar arquitectura de
software, los diagramas de clases son un tipo de diagrama de estructura porque describen lo
que debe estar presente en el sistema que se está modelando. Sin importar tu nivel de
familiaridad con diagramas UML o diagramas de clases, nuestro software UML está diseñado
para ser simple y fácil de usar.
El UML se estableció como un modelo estandarizado para describir un enfoque de
programación orientada a objetos (POO). Como las clases son los componentes básicos de los
objetos, los diagramas de clases son los componentes básicos del UML. Los diversos
componentes en un diagrama de clases pueden representar las clases que se programarán en
realidad, los objetos principales o la interacción entre clases y objetos.
https://www.lucidchart.com/pages/es/tutorial-de-diagrama-de-clases-uml
Los diagramas de clases ofrecen una serie de beneficios para toda organización. Usa los
diagramas de clases UML para:
• Ilustrar modelos de datos para sistemas de información, sin importar qué tan simples o
complejos sean.
• Crear diagramas detallados que resalten cualquier código específico que será
necesario programar e implementar en la estructura descrita.
Crear diagramas es rápido y sencillo con Lucidchart. Inicia una prueba gratuita hoy mismo
para empezar a crear y colaborar.
https://www.lucidchart.com/pages/es/tutorial-de-diagrama-de-clases-uml
Componentes básicos de un diagrama de clases
Todas las clases poseen diferentes niveles de acceso en función del modificador de acceso
(visibilidad). A continuación te mostramos los niveles de acceso con sus símbolos
correspondientes:
• Público (+)
• Privado (-)
53
• Protegido (#)
• Paquete (~)
• Derivado (/)
• Estático (subrayado)
Los clasificadores son miembros estáticos, mientras que las instancias son las instancias
específicas de la clase. Si estás familiarizado con POO, esto no es nada nuevo.
En función del contexto, las clases de un diagrama de clases pueden representar los objetos
principales, las interacciones en la aplicación o las clases que se programarán. Para responder
la pregunta "¿Qué es un diagrama de clases en UML?" , primero deberías comprender su
composición básica.
• Tipos de datosClasificadores que definen valores de datos. Los tipos de datos pueden
modelar tanto enumeraciones como tipos primitivos.
• Paquetes: Figuras diseñadas para organizar clasificadores relacionados en un
diagrama. Se simbolizan con una figura de un gran rectángulo con pestañas.
• Interfaces: Una recopilación de firmas de operaciones o de definiciones de atributo
que define un conjunto uniforme de comportamientos. Las interfaces son similares
a una clase, excepto por que una clase puede tener una instancia de su tipo, y una
interfaz debe poseer, como mínimo, una clase para implementarla.
• Enumeraciones: Representaciones de tipos de datos definidos por el usuario. Una
enumeración incluye grupos de identificadores que representan valores de la
enumeración.
• Objetos: Instancias de una clase o clases. Los objetos se pueden agregar a un
diagrama de clases para representar instancias prototípicas o concretas.
• Artefactos: Elementos modelo que representan las entidades concretas de un sistema
de software, como documentos, bases de datos, archivos ejecutables, componentes
de software y más.
Interacciones
https://www.lucidchart.com/pages/es/tutorial-de-diagrama-de-clases-uml
En este ejemplo, el objeto "Auto" heredaría todos los atributos (velocidad, números de
pasajeros, combustible) y los métodos (arrancar(), frenar(), cambiarDirección()) de la clase
principal ("Vehículo"), además de los atributos específicos (tipo de modelo, número de
puertas, fabricante del auto) y métodos de su propia clase (Radio(), limpiaparabrisas(),
aireacondicionado/calefacción()). La herencia se muestra en un diagrama de clases por medio
de una línea continua con una flecha cerrada y vacía.
https://www.lucidchart.com/pages/es/tutorial-de-diagrama-de-clases-uml
En el ejemplo anterior, la clase Auto y la clase Viaje están interrelacionadas. En un extremo
de la línea, el Auto recibe la asociación de "autoAsignado" con el valor de multiplicidad de
0..1, de modo que cuando la instancia de Viaje existe, puede tener una instancia de Auto
asociada a ella o no tener instancias de Autos asociadas a ella. En este caso, una clase
CasaRodante separada con un valor de multiplicidad de 0..* es necesaria para demostrar que
56
un Viaje puede tener múltiples instancias de Autos asociadas a ella. Dado que una instancia
de Auto podría tener múltiples asociaciones "iniciarViaje", en otras palabras, un auto podría
realizar múltiples viajes, el valor de multiplicidad se establece en 0..*
https://www.lucidchart.com/pages/es/tutorial-de-diagrama-de-clases-uml
Como ejemplo, en tu viaje por Arizona, podrías encontrarte con una trampa de velocidad
donde un radar de tráfico registra la velocidad a la que conducías, pero no lo sabrás hasta que
recibas la notificación por correo. Esto no está dibujado en la imagen, pero en este caso, el
valor de multiplicidad sería 0..* en función de cuántas veces hayas conducido frente al radar
de tráfico.
Crear un diagrama de clases para trazar flujos de procesos es sencillo. Considera los dos
ejemplos siguientes al crear tus propios diagramas de clases en UML.
Un diagrama de clases puede mostrar las relaciones entre cada objeto en un sistema
administrativo hotelero, incluidas la información de huéspedes, las responsabilidades del
personal y la ocupación por habitación. El siguiente ejemplo proporciona un panorama útil
del sistema administrativo hotelero. Inicia un diagrama de clases haciendo clic en la plantilla
siguiente.
57
https://www.lucidchart.com/pages/es/tutorial-de-diagrama-de-clases-uml
Los ATM son aparentemente simples. Aunque los clientes solo necesitan oprimir algunos
botones para recibir efectivo, hay muchas capas de seguridad que un ATM seguro y efectivo
debe pasar para evitar fraude y brindar valor a los clientes bancarios. Las diversas partes
humanas e inanimadas de un sistema de ATM son ilustradas por este diagrama sencillo de
leer. Cada clase tiene su título y los atributos se detallan debajo. Puedes editar, guardar y
compartir este diagrama abriendo el documento y registrándote a una cuenta gratuita de
Lucidchart.
58
https://www.lucidchart.com/pages/es/tutorial-de-diagrama-de-clases-uml
3. Desde las bibliotecas que recién agregaste, selecciona la figura que quieras y
arrástrala de la caja de herramientas al lienzo.
4. Modela el flujo de procesos trazando líneas entre las figuras mientras agregas
texto.
Analiza en detalle esta guía sobre cómo dibujar un diagrama de clases en UML para obtener
una perspectiva adicional. En Lucidchart, es sencillo modificar el tamaño y el estilo de
cualquier elemento. Puedes incluso importar figuras SVG y archivos Visio para tener una
solución personalizada. Si quieres saber más sobre UML, echa un vistazo a nuestro tutorial,
"¿Qué es UML?"
Los diagramas de clases describen la estructura estática de un sistema. Las cosas que existen
y que nos rodean se agrupan naturalmente en categorías. Una clase es una categoría o grupo
de cosas que tienen atributos (propiedades) y acciones similares. Un ejemplo puede ser la
clase “Aviones” que tiene atributos como el “modelo de avión”, “la cantidad de motores”, “la
velocidad de crucero” y “la capacidad de carga útil”. Entre las acciones de las cosas de esta
clase se encuentran: “acelerar”, “elevarse”, “girar”, “descender”, “desacelerar”. Un
rectángulo es el símbolo que representa a la clase, y se divide en tres áreas. Un diagrama de
clases está formado por varios rectángulos de este tipo conectados por líneas que representan
las asociaciones o maneras en que las clases se relacionan entre sí.
https://www.docirs.cl/uml.htm
60
https://www.docirs.cl/uml.htm
https://www.docirs.cl/uml.htm
Un caso de uso es una descripción de las acciones de un sistema desde el punto de vista del
usuario. Es una herramienta valiosa dado que es una técnica de aciertos y errores para obtener
los requerimientos del sistema, justamente desde el punto de vista del usuario. Los diagramas
de caso de uso modelan la funcionalidad del sistema usando actores y casos de uso. Los casos
de uso son servicios o funciones provistas por el sistema para sus usuarios.
61
https://www.docirs.cl/uml.htm
5.6.1. Actor
• Un caso de uso es una técnica de modelado usada para describir lo que debería hacer
un sistema nuevo o lo que hace un sistema que ya existe. – Los casos de uso describen bajo la
forma de acciones y reacciones el comportamiento de un sistema desde el punto de vista de
un usuario, permiten definir los límites del sistema y las relaciones entre el sistema y el
entorno. • Los componentes primarios de un modelo de casos de uso (case-use model) son los
casos de uso (use cases), los actores y el sistema modelado. • Los casos de uso son
descripciones funcionales del sistema; describen cómo los actores pueden usar un sistema. –
Los límites del sistema se definen por
62
Lightbot
https://www.fundacionluminis.org.ar/recurso-didactico-online/lightbot-videojuego-
habilidades-logica-programacion
https://edukativos.com/apuntes/archives/10555
Devc++
https://www.embarcadero.com/es/free-tools/dev-cpp
Diagrams.net
https://conocimientolibre.mx/que-es-diagrams-net/
Netbeans
https://sites.google.com/site/portafolionetbeans/que-es-netbeans
JRE
http://wiki.uqbar.org/wiki/articles/jdkVsJre.html
JRD
http://wiki.uqbar.org/wiki/articles/jdkVsJre.html
http://c.conclase.net/curso/?cap=901
Vectores
https://es.wikibooks.org/wiki/Programación_en_C/Vectores
Torres de hanoi
https://runestone.academy/runestone/static/pythoned/Recursion/LasTorresDeHanoi.html
Matrices
https://www.programarya.com/Cursos/C++/Estructuras-de-Datos/Matrices
63
http://www.manualweb.net/java/historia-
java/#:~:text=El%20lenguaje%20Java%20fue%20desarrollado,Java%2C%20corría%20el%2
0año%201996.
Máquina virtual
https://www.campusmvp.es/recursos/post/que-es-la-maquina-virtual-de-java-o-java-virtual-
machine.aspx
API de java
http://www.abelp.net/apuntesjava/22.api.html
https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=41
9:tipos-de-datos-java-tipos-primitivos-int-boolean-y-objeto-string-array-o-arreglo-variables-
cu00621b&catid=68&Itemid=188
http://www.manualweb.net/java/variables-java/
Estructuras de Control
https://aprendiendoarduino.wordpress.com/2017/10/14/estructuras-de-control-4/
Palabreas Reservadas
https://www.ciberaula.com/cursos/java/palabras_reservadas_java.php
Operadores en java
https://www.arkaitzgarro.com/java/capitulo-4.html
Operadores relacionados
https://www.arkaitzgarro.com/java/capitulo-4.html
Operadores aritméticos
https://www.arkaitzgarro.com/java/capitulo-4.html
64
Operadores Lógicos
https://sites.google.com/site/unidad1hebervanegasuribe/unidad-3/java---operadores-y-tipos-
de-datos
Operadores de asignación
https://www.arkaitzgarro.com/java/capitulo-4.html
http://lineadecodigo.com/java/el-operador-ternario-en-java/
http://sis324loo.blogspot.com/2008/09/historia-de-los-lenguajes-
de_29.html#:~:text=La%20Programación%20Orientación%20a%20Objetos,el%20centro%20
de%20cálculo%20noruego.&text=El%20nacimiento%20de%20la%20Programación,gran%2
0parte%20de%20los%20programadores.
Que es la poo
https://desarrolloweb.com/articulos/499.php
Ventajas de poo
https://www.ciberaula.com/cursos/java/ventajas_poo.php
https://sites.google.com/site/javaprogramacion1/contenidos/unidad-1-
introduccion/caractersticas-de-poo
Abstracción
https://sites.google.com/site/javaprogramacion1/contenidos/unidad-1-
introduccion/caractersticas-de-poo
Encapsulamiento
https://sites.google.com/site/javaprogramacion1/contenidos/unidad-1-
introduccion/caractersticas-de-poo
65
Modularidad
https://styde.net/modularidad-en-la-programacion-orientada-a-objetos/
Herencia
https://es.ccm.net/contents/411-poo-herencia
Poliformlismo
https://desarrolloweb.com/articulos/polimorfismo-programacion-orientada-objetos-
concepto.html
Ejemplos
Propia autoría
Elementos de POO
https://www.evirtualcisneros.xyz/mooc/17-programacion/27-elementos-basicos-de-la-
programacion-orientada-a-objetos
Clase
http://www.upv.es/amiga/43.htm
Objeto
http://www.upv.es/amiga/43.htm
Atributos
http://www.upv.es/amiga/43.htm
Métodos
http://www.upv.es/amiga/43.htm
Constructor
http://www.upv.es/amiga/43.htm
Sobrecarga de constructores
http://www.upv.es/amiga/43.htm
http://www.upv.es/amiga/43.htm
https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/classes-and-
structs/access-modifiers
Composición de poo
https://www.javanicaragua.org/2019/11/24/composicion-sobre-la-
herencia/#:~:text=Composición%20en%20POO.,son%20parte%20de%20la%20clase.
Vector de objetos
https://sites.google.com/a/espe.edu.ec/programacion-ii/home/a1-arreglos/declaracion-
manipulacion-y-asignacion-de-vectores/la-clase-vector
http://sistemasiii3.blogspot.com/2011/03/breve-resumen-de-la-historia-del-
uml.html#:~:text=El%20lenguaje%20UML%20comenzó%20a,OMT%20(Object%20Modelli
ng%20Tool%20).
Que es UML
https://www.lucidchart.com/pages/es/que-es-el-lenguaje-unificado-de-modelado-uml
Características de uml
https://sites.google.com/site/disenodesistemasdmlf/home/-que-es-uml-y-sus-caracteristicas
https://www.teatroabadia.com/es/uploads/documentos/iagramas_del_uml.pdf
Diagramas de clase
https://www.teatroabadia.com/es/uploads/documentos/iagramas_del_uml.pdf
https://www.teatroabadia.com/es/uploads/documentos/iagramas_del_uml.pdf
Actor
https://www.ctr.unican.es/asignaturas/MC_OO/Doc/Casos_de_uso.pdf
67
Conclusiones
1. INTRODUCCIÓN A LA PROGRAMACIÓN
1.2.1. Devc++
1.2.2. Diagrams.net
Es una página web que nos ayuda en la creación de diagramas ya sean tipo UML,
organigramas o demás diagramas web.
1.2.3. NetBeans
68
Es básicamente una librería que nos permite implementar una variedad de herramientas para
la facilitación del usuario en cuestión
Se basa en ser casi como JRE una biblioteca que ayuda al usuario a crear programación de
una manera más fácil y dinámica
2. LENGUAJE C++
Las palabras reservadas son básicamente el código de programación en si ya que cada una de
estas diseñan el código lo completan y hace que tenga un óptimo funcionamiento
2.2. Vectores
Se basa en un puzle de alta de dificultad en el que empezaras a utilizar tu agilidad mental para
poder terminarlo ya que debido a su nivel de complejidad tendrás que llevar a cabo tus arduos
conocimientos de programación para lograr de un origen cambiar todas sus fichas al destino
final en el orden requerido sin ningún fallo
2.4. Matrices
Son básicamente vectores unidireccionales al tener como base dos vectores que sean su forma
vertical y horizontal dando como resultado una matriz del tamaño que el usuario diseñe
pidiendo implementar cualquier tipo de dato dependiendo del modelo que sea haya usado
3. LENGUAJE JAVA
Podemos darnos de cuenta como el lenguaje javo ha pasado por tantas modificaciones para
que cada vez se un compilador que cumpla con las necesidades del usuario tomado como
base diferentes modelos de compiladores de todo el mundo ya sea lanzando actualizaciones
que arreglen fallo que podrían arruinar al compilador como a mejorar de este mismo
La API actual de Java goza con una amplia variedad teniendo más de 2000 elementos entre
clases, interfaces, excepciones, etc. Lo que hace que el funcionamiento de esta no sea nada
fácil y solo se pueda recrear por expertos programadores, al ser un paquete tan abierto logra
70
que el programador goza muchas herramientas a la mano para disfrutar de una amplia
facilidad
Una variable se asigna el tipo de variable que se le asigne ya sea de tipo entero flotante etc.
En estos se pueden utilizar para distintos modelos ya sean programas matemáticos problemas
de listos de palabras o demás usos de este
Al declarar una variable en java no es necesario inicializarla en 0 ya que java tiene la función
de que si no es declarada por el usuario el compilador automáticamente la inicializa en 0
Las estructuras permiten manejar el flujo de control del programa ya sea a través del uso de
while, do while o for que permite el buen uso de programas matemáticos simples
Las palabras reservadas cumplen su fusión como base del dato a crear o programa en si ya
que estas otorgan la información para que el programa tenga un óptimo funcionamiento ya
que sin estas no se podría prácticamente crear ningún programa por muy simple que sea
Los operadores básicos de java se subdividen en diferentes categorías que estas a su vez
tienen bastante herramienta estas logran que el programa tenga lógica y pueda funcionar
correctamente
71
Esta categoría se base sola mente en operadores matemáticos un poco avanzados para que
el trabajo no sea tan largo y se pueda reducir el código del programa
Estos se basan la lógica programadora en el tener un ideal de cómo hacer que algo ósea igual
a una variable o distinta a esta el tener el y en una operación o el o y por último el no
Otorgan una igual a una variable gracias a esta puedes igualar variables diferentes
dependiendo de lo que se requiera hacer
Pocos conocen del uso de este raro operador especial que logra reducir el código en gran
manera de cual que numero es menor si tener que utilizar un if con else
4.1. Historia.
72
La programación orientada a objetos o también conocida por sus siglas Poo se basa en un
modelo de creación de ejercicios como base el objeto como tal y a partir de este crear al
objeto como tal el cual tendrá todo lo que tendría un objeto real y tangible
4.3. Ventajas
El principio como tal es el basarse en un objeto como tal que a la vez interactúa con demás
aspectos y se organiza entre si
4.4.1. Abstracción
En este aspecto tomamos en cuenta el cómo es el objeto como interactúa con el entorno su
funcionamiento y modelo a seguir
73
4.4.2. Encapsulación
Este aspecto ayuda al programador a tomar los detalles que necesita el código y dejar de lado
aquellas funciones que solo llenarían el código y dificultarían su funcionamiento
4.4.3. Ocultación
Esta función permite dividir al programa en módulos para que el código se pueda compilar
por partes y así poder mirar en que parte este el fallo y no dañar todo el código como tal
4.4.4. Modularidad
Con esta función podemos crear distintas variables heredadas de una principal con lo seria
dos variables perro y gato que a su vez serian heredadas de una función animal
4.4.5. Herencia
Esta función es únicamente de la Poo ya que utilizamos variables ya creadas para así
retomarlas y no hacer que el código se vuelta muy repetitivo, sino que solo tendrás que acudir
a esta función
4.4.6. Polimorfismo
Esta función le da su forma al objeto como tal en el que se crea toda su estructura su
movilidad su esqueleto interno como ejemplo un carro el cual tiene 4 ruedas, muchos espejos
como laterales como frontales, su caja de cambio su volante etc.
4.5. Ejemplos
74
4.6.1. Clase
Esta función permite separar los componentes el ejercicio y ayudando en su depuración como
en futuras mejoras el programa
4.6.2. Objeto
4.6.3. Atributos
Esta herramienta se acciona cuando reconoce que se está interactuando con el objeto del
programa
75
4.6.4. Métodos
Esta función es mas de soporte al usuario para dejar comentarios internos en el código para
que así pueda tener una guía interna del funcionamiento del objeto a recrear y así no tenga
fallo alguno
4.6.5. Constructor
Esta función deriva de otro objeto como tal mejorando el desarrollo del programa a ejecutar y
a desarrollar esto a través de métodos y datos para el resumen de características de código
Con esta función podremos tener datos públicos como privados que ayudaran a la hora de
mostrar el programa mostrando solo los datos públicos y restringiendo la visualización de los
privados
Para que sirve esta imprenta acciones y herramientas que benefician la visualización ya sea
de variables clases o demás implementaciones del código de una mera tangible y sencilla de
entender
76
4.8. Composición
5-1 El lenguaje UML empezó a desarrollarse en octubre del 1994, cuando Rumbaugh se
unió a la compañía Rational de Booch. Su objetivo era unificar el método de Booch y el
OMT. En octubre de 1995 apareció el primer borrador y en ese tiempo Jacobson otro
investigador, se unió a Rational y unieron ideas. Ellos son conocidos como los “tres
amigos”. También este lenguaje se abrió a la colaboración de otras empresas para dar sus
ideas y estas condujeron a la definición de la UML
5-2 El UML se creó para forjar un lenguaje de modelado visual común, semántico y
sintáctico para la arquitectura, el diseño y la implementación de sistemas de software
complejos. Sus diagramas describen los límites, estructura y comportamiento del sistema y
objetos. UML no es un lenguaje de programación y si guarda una relación con el análisis y
diseño orientados a objetos.
5-3 El lenguaje de modelado es la notación que usan los métodos para expresar un diseño.
Se caracteriza por visualizar, especificar, construir, documentar y ser base de
documentación. Es fundamental la capacidad de diagramación y los diferentes tipos de
diagramas, documentación, construcción, implantación de sistema y flexibilidad.
77
5-4 El UML está compuesto por diversos elementos gráficos que se combinan para
conformar diagramas por es un lenguaje y tiene reglas. Los diagramas pretenden presentar
diferentes perspectivas de un sistema, conocidas como modelo que describe lo que hará un
sistema.
5-5 Los diagramas de clases describen la estructura estática de un sistema. Las cosas
existentes y que nos rodean se agrupan en categorías. Una clase es una categoría que tiene
propiedades y acciones similares.
5-6 Un uso de caso es una descripción de las acciones de un sistema desde el p unto de
vista del usuario; es una gran herramienta ya que es una técnica de aciertos y errores para
obtener los requerimientos del sistema por el usuario. Los diagramas de caso de uso
modelan la funcionalidad del sistema usando actores y casos de uso donde estos casos son
servicios del sistema para sus usuarios.
5.6.1. Actor
Es una técnica de modelado para que un sistema nuevo se pueda adaptar a un sistema viejo o
antiguo