Está en la página 1de 13

UNIVERSIDAD AUTONOMA DE GUADALAJARA

ALUMNO: JOSÉ PEDRO OBRADOR GARCÍA


CARRERA: ING. MECATRONICA
SEMESTRRE: PRIMERO
MATERIA: FUNDAMENTOS DE LA PROGRAMACIÓN
MAESTRO: JUAN CARLOS ALCUDIA UICAB

05 DE OCTUBRE DE 2022
MANEJO DINÁMICO DE DATOS.
4.1 Descripción de la memoria y espacio para datos:

Una memoria es como un cerebro humano. Se utiliza para almacenar datos e


instrucciones. Memoria de la computadora es el espacio de almacenamiento en la
computadora donde datos va a ser procesada y se almacenan las instrucciones necesarias
para procesamiento. La memoria se divide en gran número de piezas pequeñas llamadas
células (Para almacenar información la memoria está formada por un conjunto de casillas
o células, en las que coloca instrucciones y datos). Cada ubicación o celda tiene una
dirección única que varía desde cero hasta el tamaño de la memoria menos uno.

La memoria es principalmente de tres tipos, los cuales son los siguientes.

 Memoria caché: Es una memoria de semiconductor de muy alta velocidad que


puede acelerar el CPU. Actúa como un amortiguador entre la CPU y la memoria
principal. Se utiliza para sostener las partes del programa y datos que se utilizan
con mayor frecuencia por la CPU. Las partes de datos y programas se transfieren
desde el disco a memoria caché por sistema operativo, desde donde CPU puede
acceder a ellas.

 Memoria principal: Contiene sólo los datos y las instrucciones sobre qué equipo
está trabajando actualmente. Tiene una capacidad limitada y datos se pierde
cuando se apaga el suministro eléctrico. Generalmente se compone del dispositivo
semiconductor. Estos recuerdos no son tan rápidos como los registros. Instrucción
necesaria para procesar los datos residen en la memoria principal. Se divide en dos
subcategorías RAM y ROM.

 Memoria secundaria: Este tipo de memoria también se conoce como memoria


externa o no volátil. Es más lenta que la memoria principal. Estos se utilizan para
almacenar información permanentemente. CPU no accede directamente estos
recuerdos en cambio son accesibles mediante rutinas de entrada / salida.
Contenido de memorias secundarias primero se transfiere a la memoria principal, y
luego CPU puede acceder a él. Por ejemplo: disco, CD-ROM, DVD etc.

05 DE OCTUBRE DE 2022
Las ventajas de la memoria caché son los siguientes:

 Memoria caché es más rápido que la memoria principal.


 Que consume menos tiempo de acceso en comparación con la memoria principal.
 Almacena el programa que puede ejecutarse en un plazo corto de tiempo.
 Almacena datos para uso temporal.

Las desventajas de la memoria caché son como sigue:

 Memoria caché tiene una limitada capacidad de.


 Es muy caro.

Características de la memoria principal:

 Son memorias de los semiconductores


 Es conocida como memoria principal.
 Memoria generalmente volátil.
 Datos se pierden en caso de alimentación conmutada libres
 Es la memoria de trabajo de la computadora.
 Más rápido que la memoria secundaria.
 Una computadora no puede funcionar sin memoria primaria.

Característica de memoria secundaria:

 Estos son recuerdos magnéticos y ópticos


 Es conocida como memoria de respaldo.
 Es una memoria no volátil.
 Los datos se almacenan permanentemente, aunque el poder es conmutada libres
 Se utiliza para el almacenamiento de datos en una computadora.
 Computadora puede funcionar sin memoria secundaria.
 Más lenta que recuerdos primarios.

https://cutt.ly/IV8tc4O

05 DE OCTUBRE DE 2022
En programación, una variable es un espacio de memoria reservado para almacenar un
valor determinado que corresponde a un tipo de dato soportado por el lenguaje de
programación en el cual se trabaja.

Una variable es representada y usada a través de una etiqueta (un nombre simbólico) que
le asigna un programador o que ya viene predefinida en el lenguaje.

El programador emplea ese nombre de variable para poder usar la información que está
contenida en ella. Durante el tiempo de ejecución del programa la variable puede adquirir
un valor determinado y puede cambiar durante el curso de ejecución de este.

Por ejemplo, en la variable de nombre "num", almacenamos el número 8 (que es del del
tipo número entero).

De forma genérica, para utilizarla y sumarle un uno se debería escribir el siguiente


pseudocódigo:

 num = num + 1

Tipos de datos de variables.

En lenguajes de programación de tipado estático (como Java o ML), una variable también
tiene un tipo de dato, lo que significa que sólo puede almacenar un cierto tipo de valores.
Por ejemplo, una variable del tipo "entero" tiene prohibido almacenar valores de texto.

En tanto en los lenguajes de programación de tipado dinámico (como Python o PHP), son
los valores y no las variables los que tienen tipo. Esto significa que una variable puede
contener diferentes tipos de datos durante su ejecución, a elección del programador.

Una variable puede ser del tipo booleano, entero, decimal de coma flotante, carácter,
cadena de texto, arreglo, matriz, tipo definido por el usuario, etc. Son todos tipos de dato
y están determinados por el lenguaje de programación que se emplea.

https://cutt.ly/UV8uhWo

05 DE OCTUBRE DE 2022
4.2 Modificación segura e indirecta de datos:

PHP (es un lenguaje de programación de uso general que se adapta especialmente al


desarrollo web) nos facilita la programación segura para no comprometer la seguridad del
servidor con distintas funciones para el tratamiento de datos. A partir de este apartado
veremos cómo podemos filtrar los datos enviados por los usuarios a través de variables
super globales como $_GET, $_POST, $_COOKIE, etc.

En esta sesión nos centraremos en el filtrado de datos suponiendo que todos los datos
enviados a través de variables como $_GET, $_POST, ... es inseguro.

Vulnerabilidades web más conocidas:

1. XSS (Cross Site Scripting): vulnerabilidad como consecuencia de errores de filtrado


de las entradas del usuario con el fin de conseguir vulnerar al cliente o al servidor
de la aplicación web.
 Código de marcas (html)
 Código ejecutable en la máquina cliente (Javascript)
 Código ejecutable en el servidor (PHP) en las entradas de aplicaciones web

2. SQL Injection: Consulta que no ha sido correctamente tratada no escapando los


caracteres especiales pudiendo lograr resultados no previstos.
 Autorizar un acceso inválido.
 Acceso no autorizado a una base de datos.
 Ejecutar código no permitido en el servidor.

3. RFI - LFI (Remote/Local File Inclusion): incluir archivos remotos dentro de nuestros
scripts PHP. La función "include()" de PHP nos permite incluir archivos dentro de
nuestro documento como si fueran parte del texto.
 <?php
 $pagina = $_GET['pag'];
 include($pagina);

Esta vulnerabilidad no afecta solamente a la seguridad de los usuarios sino también a la


del servidor, ya que nos permite modificar archivos de la página.

https://cutt.ly/oV8oGH7

05 DE OCTUBRE DE 2022
Herramientas para minimizar el riesgo asociado:

Analizadores Estáticos.

Para evitar este tipo de “bugs” en primer lugar existen analizadores estáticos de código
que son capaces de detectar las vulnerabilidades más extendidas. Entre ellos destacamos:

 PMD que funciona para lenguajes como Java, JavaScript, XML, XSL.
 FlawFinder para C.
 LAPSE (OWASP) que funciona como un plugin de Eclipse, y obviamente es para
Java.
 Algunas herramientas comerciales son CodeSecure (Armorize), AppScan (IBM),
Fortify (HP). Estas suelen funcionar para diferentes lenguajes (ASP.NET, VB.NET,
C#, Java/J2EE, JSP, EJB, PHP, Classic ASP and VBScript)

Guías

Por otro lado, también existen diferentes guías que recopilan mejores prácticas para el
desarrollo de aplicaciones seguras en diferentes lenguajes de programación:

 ISO Programming languages – Guide for the Use of the Ada Programming Language
in High Integrity Systems.
 MISRA: Guidelines for the use of the C language in critical systems.
 CERT: C Secure Coding Standard, Secure Coding in C and C++ y Oracle Secure
Coding Standard for Java.
 OWASP: * Secure Coding Practices Quick Reference Guide.

Metodologías completas de programación segura

Por último, cuando se habla de metodologías completas de programación segura,


debemos destacar las siguientes tres:

 The Software Security Framework (SSF).


 OWASP Software Assurance Maturity Model (SAMM).
 Microsoft Security Development Lifecycle (SDL).

05 DE OCTUBRE DE 2022
https://cutt.ly/0V8pFv6

4.3 Errores comunes y prevención:

Hay tres tipos de errores que nos friegan la vida cuando programamos y más aún cuando
estamos empezando este mundo tan fascinante como es el de la programación, que en
muchas ocasiones por más sencillos que estos sean, en algunos casos pasamos horas e
incluso días buscando la solución.

Errores en tiempo de compilación. Los errores de compilación ocurren porque la sintaxis


del lenguaje no es correcta, de cajón este tipo de errores no permiten que la aplicación se
ejecute, por ejemplo:

 Olvidarnos de un punto y coma al final de una sentencia.

 No cerrar llaves en algún bloque de código, método, clase o en alguna estructura


de control.

 Repetir variables con el mismo nombre, aunque sean de diferente tipo.

 Asignar en una variable otra variable con tipo de dato diferente: es decir si tengo
una variable String y su valor lo asigno en una variable de tipo int, en este caso el
compilador me va a dar un error de conversión de tipos y esto no va a dejar que la
aplicación compile, incluso un error parecido se puede dar en variables de grupos
del mismo tipo, por ejemplo, asignar el valor de un tipo int en un tipo short.

De forma general este tipo de errores son de sintaxis. Afortunadamente los IDE como
Eclipse, Netbeans ayudan mucho a reconocerlos y nos dan una idea de lo que puede estar
pasando para de esta manera corregirlos incluso en algunos casos los resuelven.

Para entender mejor los errores en tiempo de compilación crea un proyecto, luego una
clase (debe tener habilitado el método principal main) y dentro del método principal main
copia el siguiente código desde la línea 8 hasta la 22.

05 DE OCTUBRE DE 2022
package com.ecodeup.errores;

public class TestErrores {

public static void main(String[] args) {

// TODO Auto-generated method stub

// errores en tiempo de copilación

int suma=0;

String nombre;

suma=nombre; //error 1

int valor=0;

short numero=0;

numero=valor; //error 2

String valor=""; //error 3

int mayor;

int menor;

if (true){

mayor=menor;//error 4

05 DE OCTUBRE DE 2022
}

En el código anterior existen 4 errores en tiempo de compilación, el primero en la línea 10,


ya que estoy intentando guardar un valor de una variable de tipo String en una variable de
tipo entero (int), el segundo error se da en la línea 14 dado que estoy intentando
almacenar una variable de tipo int en una variable de tipo short (int tiene un mayor rango
que short no soporta), el tercer error está en la línea 16 puesto que estoy repitiendo el
nombre de la variable valor y aunque es de diferente tipo el compilador me dice que está
duplicada, el último error se da en la línea 21, para esto debes comentar todo el código
anterior desde la línea 8 hasta la línea 16, pese a que ambas variables son de tipo int este
error se da porque intento asignar en la variable mayor el valor de la variable menor si
haberla inicializado.

Errores en tiempo de ejecución. Estos errores ocurren cuando la aplicación se está


ejecutando, imagínate que cuando estás haciendo la presentación o probando tu
aplicación en público o frente a tu profesor y de repente la aplicación explota (se cuelga)
por lo general a este tipo de errores se los conoce como errores de compilación, ahora,
¿por qué ocurren estos errores?, bueno, hay muchos factores desde los más básicos
como, por ejemplo:

 El usuario ingresa valores diferentes a los que la aplicación recibe

 Acceder a una posición en un arreglo la cual no existe.

 Almacenar cadenas donde se debe almacenar números

 Divisiones por cero.

 Digamos que en una aplicación móvil consuma datos de un servicio web y que al
momento de consumir esos datos no haya conexión a internet, esto hace que la
aplicación se cuelgue.

Esos algunos ejemplos, pero me imagino que hay muchos más, a continuación, describo
los más básicos.

05 DE OCTUBRE DE 2022
package com.ecodeup.errores;

public class TestErrores {

public static void main(String[] args) {

// TODO Auto-generated method stub

//errores en tiempo de ejecución

int miArreglo[] = new int [5];

miArreglo[5]=0;

int sumaNotasExamenes=60;

int numeroExamenes=0;

int promedio=sumaNotasExamenes/numeroExamenes;

05 DE OCTUBRE DE 2022
De los muchos que pueden darse en una aplicación, en el código existen 2 errores en
tiempo de compilación , y bueno el primero error se da en la línea 9 y aunque
aparentemente el programa a simple vista se ve bien, el error se da en la ejecución del
programa puesto que estoy intentando almacenar en una posición del arreglo que no
existe, recordemos que el tamaño de un arreglo se define como n-1, en el caso del
ejemplo para el arreglo miArreglo sólo podríamos acceder o almacenar valores hasta la
posición 4.>

El segundo error se da en la línea 13, para ver este error debes comentar las líneas 8 y 9,
este error se da porque estoy dividiendo el valor de la variable sumaNotasExamenes para
la variable numeroExamenes que tiene un valor de cero y esta es una operación no
permitida para la Máquina Virtual de Java.

Errores lógicos. Estos son los más difíciles de detectar y corregir y pues bueno porque digo
que son difíciles, es que con este tipo de errores la aplicación compila y se ejecuta de
forma normal, pero ¿y entonces dónde está el error?

 El error se da porque la aplicación no muestra los resultados esperados digamos


que ya hice el algoritmo y el resultado que debo obtener es 10, pero en la
aplicación obtengo 5 o lo peor de todo que de seguro te a pasado, que escribes el
código haces pruebas y los resultados son correctos subes a producción y resulta
que para un caso particular no se obtuvo el resultado esperado.

Pues en estos casos el problema son errores lógicos que a fin de cuentas estos ocurren por
el mal diseño del algoritmo de la aplicación

Para terminar, también mencionar que otro error de tipo lógico también ocurre cuando
colocamos punto y coma después de una sentencia if o for y aunque parezcan errores tan
obvios, se dan cuando estamos empezando a programar, como se puede ver a
continuación lo que debería imprimir la variable i que son los números del 0 hasta el 4,
imprime sólo el número 5.

05 DE OCTUBRE DE 2022
package com.ecodeup.errores;

public class TestErrores {

public static void main(String[] args) {

// TODO Auto-generated method stub

//errores lógicos

int i;

for(i=0; i<5;i++);{

System.out.println(i);

05 DE OCTUBRE DE 2022
Consejos:

 Tener muy cuenta las divisiones por cero, en cuanto a los arreglos no acceder a
posiciones que no existen.

 Hacer uso de excepciones y validaciones cuando se tenga en cuenta que el usuario


puede ingresar valores diferentes a los que se puede recibir la aplicación.

 Cuando diseñemos un algoritmo tener en cuenta todos los escenarios posibles que
pueda tomar la aplicación durante su ejecución.

 Finalmente, como dice el dicho divide y vencerás: una buena forma de


contrarrestar los errores de tipo lógico es dividir algoritmos grandes y complejos
en tareas pequeñas de forma que el código se más legible y cualquier error de tipo
lógico se lo pueda depurar fácilmente.

https://cutt.ly/jV8fWY9

05 DE OCTUBRE DE 2022

También podría gustarte