Está en la página 1de 63

U.D.1.

Desarrollo de software
Modelo del computador desde el
punto de vista del programado

Componentes básicos del ordenador

Informática: “tratamiento automático de la información”


3 tareas básicas :
• Entrada de datos
• Tratamiento o proceso de los mismos
• salida de resultados

Datos Proceso Resultados


Memoria Central
Unidad Unidad
Unidad Control
de de
entrada Unidad salida
Aritmético Lógica 2
Un Sistema Operativo (S.O.) es un software básico que ejerce de intermediario entre el
Hardware y los usuarios.
El S.O. nos permite manejar los elementos Hardware (teclado, CPU, CD-ROM, Discos…) de
forma sencilla y óptima. Sin un Sistema Operativo, no podríamos utilizar el ordenador, su
uso sería demasiado complejo

*En esta Entornos de desarrollo


Programas Programas Programas
y en programación vamos a
del usuario del usuario del usuario
trabajar aquí.

Sistema operativo

Máquina
(Hardware)
Algoritmos
Para la especificación del problema podemos usar formas de lenguaje natural
o lenguajes formales

• Basado en el lenguaje humano


Lenguaje • Impreciso, ambiguo,
natural interpretable
• Fácil de implementar

• Basado en la lógica, y las


matemáticas

Lenguajes • Preciso y no ambiguo


formales • Muy costoso de entender e
implementar
ALGORITMOS
ALGORITMO: Una lista o secuencia finita de pasos u operaciones a
realizar necesarios para resolver un problema en tiempo finito.
La construcción de cualquier programa requiere como paso previo el diseño del
algoritmo que resuelve el problema propuesto

• Dado un determinado problema, pueden existir varios algoritmos


que lo resuelvan
Ejemplo: multiplicación de dos números enteros , Torre de Hanói.

• No todos los problemas tienen solución algorítmica


Ejemplo: problema de los generales bizantinos.
Lenguajes algorítmicos
• Sirven para describir algoritmos
• Son más precisos que el lenguaje
natural pero menos rígidos que un
Lenguajes lenguaje de programación
algorítmicos • Son un paso intermedio en la
descripción de algoritmos
• Ejemplos: pseudocódigo,
diagramas de flujo
Ejemplo de
pseudocódigo
y diagrama de
flujo

7
PROGRAMAS

PROGRAMA: Secuencia de instrucciones que siguen las reglas de un


lenguaje de programación y que indica las acciones a llevar a cabo
para que la máquina resuelva un problema.
• El programa es la traducción de un algoritmo a un lenguaje de
programación dado. A este proceso de traducción se le llama
IMPLEMENTACIÓN, y lo realiza el programador

LENGUAJE DE PROGRAMACIÓN: Lenguaje artificial, diseñado para


representar algoritmos de forma inteligible por el computador
• Incluye un conjunto de reglas sintácticas y semánticas, símbolos y
palabras especiales para construir un programa
• Los lenguajes de programación son más rigurosos que el lenguaje
natural y además tienen una sintaxis y semántica más sencilla
CLASIFICACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN

− LENGUAJES DE BAJO NIVEL: Orientados


+ Nivel de abstracción -

al Hardware
• Código máquina
• Ensamblador

− LENGUAJES DE ALTO NIVEL (LAN): Orientados al


programador

9
CLASIFICACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN

LENGUAJE MÁQUINA o CÓDIGO MÁQUINA

El único que reconoce y puede ejecutar directamente el ordenador.

− Ventaja: No es necesario una traducción previa para ejecutarlo


− Instrucciones y datos codificados en binario por lo que programar
en este lenguaje resulta extraordinariamente difícil
• Programación costosa difícil y lenta
• Imposibilidad de verificar los programas, son demasiado
crípticos
• Dependencia del programa construido de la CPU para la que
ha sido diseñado. Cada CPU tiene su propio JUEGO DE
INSTRUCCIONES en código máquina. El mismo programa tiene
que ser rediseñado para ser usado en otro modelo de CPU
Ejemplo de
Código máquina
• Ejemplo de código máquina
(bytecode) de firmware privativo
presente en un núcleo Linux normal

• Cada dos caracteres representan un


byte (8 bits)
CLASIFICACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN

LENGUAJE de BAJO NIVEL o ENSAMBLADOR – Muy similar al código máquina. Sustituye las
cadenas de bits por mnemotécnicos, etiquetas, direccionamientos. Proporciona conversión
automática de datos (decimal>binario) haciendo que sean más fáciles de usar que el código
máquina.
− Programación menos costosa.

− Es factible revisar el código de un programa para ver que hace, aunque es sigue siendo muy
costoso

− Es necesario un PROGRAMA ENSAMBLADOR que traduzca el programa en ensamblador a


código máquina, y también un programa enlazador (linker) para unir los diversos componentes
CLASIFICACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN

LENGUAJE de BAJO NIVEL o ENSAMBLADOR

− El problema con el código máquina es que la mente humana está bien equipada para trabajar
con textos y palabras, pero no con patrones numéricos

− El lenguaje ensamblador reemplaza las instrucciones en binario, por códigos de texto mucho
más amigables para el programador

− Programación demasiado costosa para la mayor parte de las aplicaciones. Sólo se usa
excepcionalmente para programas cortos en los que se pretende explotar alguna característica
muy específica de esa máquina en concreto, o bien se necesita un código especialmente
optimizado

− Dependiente del juego de instrucciones de la CPU. El programa sólo funciona en la máquina


para la que ha sido creado
Ejemplo
ensamblador
Un programa en
ensamblador
Instrucción Descripción ciclos

⚫ LD LOAD R1<-- 9
• Total 34 ciclos R1,@4500 M(4500)

⚫ LD LOAD R2<-- 9
R2,@6700 M(6700)

⚫ ADD ADD R3←R1+R2 7


R3,R1,R2

⚫ ST STORE R2-- 9
R3,@8000 >M(8000)

15
Proceso de ensamblado
Código fuente: Programa
codificado en ensamblador

Se le llama ensamblador no sólo al


lenguaje; sino también al programa
que traduce el código fuente escrito
en ensamblador, a código objeto, En
el caso de 8086, el ensamblador,
como TASM se encarga de generar
los archivos .OBJ que representan el
código de máquina asociado al
programa fuente en ensamblador.

Código objeto: programa


ensamblador traducido a
código máquina.

TLINK: Linker
Un archivo .OBJ, si bien contiene ya todo el código de máquina, no puede ser ejecutado, pues no
contiene información necesaria, por otro lado, cuando hacemos un programa en varios módulos, no
solamente existe un código objeto sino varios, que debemos combinar o relacionar entre sí.
Estos procesos son llevados a cabo por el linker o enlazador TLINK; el cual toma como entrada uno o
varios archivos .OBJ y genera los archivos ya ejecutables por el sistema, con extensión .COM o .EXE.
16
CLASIFICACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN
LENGUAJE de BAJO NIVEL
Ejemplo: Instrucción que suma el contenido de los registros 1 y 2 y
deposita el resultado en el registro 3

ADD R1, R2, R3


El programa
ensamblador
convertirá esta Programa
instrucción en ensamblador
su equivalente
en código
máquina 1111000 00001 00010 00011

17
CLASIFICACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN

LENGUAJES DE ALTO NIVEL (LAN)


Los lenguajes de bajo nivel se centran en optimizar la comunicación con el Hardware. En
cambio, los lenguajes de alto nivel se centran en optimizar la comunicación con el
programador.
Los LAN tratan de asemejarse a las formas de comunicación humana facilitando que el
programa sea escrito y entendido por el programador mediante:
− Instrucciones similares a las del vocabulario humano (READ, WRITE, PRINT, OPEN..)
− Las instrucciones se agrupan componiendo sentencias más complejas cuya sintaxis
se basa en reglas similares a la del lenguaje humano.
− Se reducen drásticamente los costes de programación
− Lenguaje independiente de la CPU. Programas PORTABLES. Un programa en C
puede ser compilado para cualquier CPU.

18
CLASIFICACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN

LENGUAJES DE ALTO NIVEL


− Necesidad de programa traductor: es necesario un proceso de
traducción complejo que transforme el programa de alto nivel a
código máquina:
• COMPILADORES
• INTERPRETES

− Debido a la complejidad del proceso de traducción,


normalmente no se aprovechan totalmente los recursos
internos de la máquina. El programa ocupa más espacio y tiene
peores tiempos de ejecución que su equivalente en lenguaje
ensamblador

19
Programa que suma dos números
Algoritmo:
1. Leer dato1 por dispositivo de entrada y dejarlo en un registro del microprocesador
2. Leer dato2 por dispositivo de entrada y dejarlo en un registro del microprocesador
3. Sumar dato1 y dato2 en la ALU y depositar el resultado en otro registro
4. Mover el resultado a memoria principal para su posterior uso
5. Sacar el resultado por un dispositivo de salida

Código Máquina:
1. 1101011101001001000110
2. 1101111111001111000110 1111000 Código operación OUT
0011 operando registro 3
3. 0001011100000000000110 01001110110 dirección/es destino
4. 0111011100000001110110
5. 1111000 0011 01001110110

Ensamblador:
1. IN @puerto_teclado, reg1 Lenguaje de alto nivel:
int dato1,dato2,resultado;
2. IN @puerto_teclado, reg2
main(){
3. SUM reg1,reg2,reg3 dato1=getch();
4. MOV reg3, @dir_memoria_destino dato2=getch();
5. OUT reg3 @puerto_pantalla resultado=dato1+dato2;
printf("el resultado es %d \n",resultado);
}
Compiladores e Intérpretes
Encargados de traducir los programas escritos en lenguaje de alto nivel a
código máquina

COMPILADOR : analiza el programa completo y genera un programa en


lenguaje máquina ( llamado programa OBJETO ).

• Son LAN compilados C, PASCAL, FORTRAN, ADA…)


• Mediante el proceso de LINKADO se enlazan con LIBRERIAS
predeterminadas y otros programas objeto, generando el
programa EJECUTABLE

CÓDIGO CÓDIGO CÓDIGO


LINKADO
FUENTE COMPILADOR OBJETO EJECUTABLE
⚫ Código fuente: el programa escrito en un lenguaje de alto nivel.
⚫ Código objeto: el código fuente tras ser compilado. El resultado es
código máquina con algunas referencias a otros ficheros de código no
resueltas, que sólo se solucionan mediante el proceso de linkado

Código ejecutable:
Código que puede
ejecutarse en la máquina,
resultado de linkar el
código objeto
Compiladores e Intérpretes
INTÉRPRETE

Analiza y ejecuta un programa sentencia a sentencia.


− Traduce una sentencia y la ejecuta

− No genera programa ejecutable, ni código objeto. Sólo hay


código fuente

− A priori menos eficientes que los compiladores, ya que efectúan


la traducción en cada ejecución del programa, mientras que el
compilador sólo traduce una vez. Dicho de otro modo, al tiempo
de ejecución del programa hay que sumar el tiempo de
traducción.

− Son LAN interpretados BASIC, LISP, JAVA, HTML


• Errores de compilación

• Surgen durante la traducción


(compilación o interpretación)
del código fuente
• Son errores sintácticos o
semánticos, (el programa no
respeta las reglas del lenguaje,

Errores hace asignaciones de tipo


incorrectas, etc.)

• Errores de ejecución

• Surgen al ejecutar el código


• Son operaciones ilegales
(división por cero), de tipo lógico,
etc.

24
• Conjunto de programas necesarios para que el programador
desarrolle software. Generalmente todos estos programas se
ENTORNO DE integran en un único producto llamado
PROGRAMACIÓN • IDE (o EDI) Entorno Integrado de Desarrollo
• COMPILADORES: Traducen un fichero de texto
ENTORNO DE que contiene un programa en un LAN en código
objeto
PROGRAMACIÓN
ENTORNO DE
PROGRAMACIÓN

• EDITORES: Son
programas de
edición de texto que
permiten introducir
en un fichero el
código fuente del
programa en un
LAN. Los editores de
programas suelen
incluir ayudas como
colorear de distinto
modo los elementos
del programa

27
ENTORNO DE
PROGRAMACIÓN

• ARCHIVOS DE CABECERA: es código


fuente (NO COMPILADO y portable
a otras máquinas)de uso frecuente
que se distribuyen con el entorno
de programación y que pueden ser
llamadas desde el programa
ahorrando trabajo al programador.
• Cuando se compila el
programa también se
compilan los archivos de
cabecera usados, por ello el
conjunto sigue siendo
portable

28
ENTORNO DE
PROGRAMACIÓN

• ARCHIVOS DE BIBLIOTECA o
LIBRERÍAS: Similar al anterior,
salvo que en este caso el código
es código objeto, (o sea
previamente compilado), y por
tanto no portable a otras
máquinas

29
ENTORNO DE PROGRAMACIÓN

• LINKERS o ENLAZADORES: Enlazan el programa objeto (ya compilado)


con los programas de biblioteca que éste llame
• DEPURADORES: Ayudan al programador a identificar errores en el
programa permitiendo:
• Ejecutar el programa instrucción por instrucción (Trace)
• Insertar puntos de ruptura (Breakpoints)
• Evaluar variables y expresiones (Watch)
Fases en el
desarrollo de
un programa
Paradigmas de
programación
• Se define como una colección de patrones
conceptuales que determinan la forma de
razonar sobre problemas, de formular
algoritmos y de estructurar programas

• Paradigmas:
Paradigmas • Programación imperativa

de • Programación estructurada
• Programación modular o procedural
programación • Programación orientada a objetos
• Programación reactiva
• Programación distribuida
• Programación declarativa
• Programación funcional
• Programación lógica
• El programador indica por medio de
programa cual es el procedimiento
correcto para resolver el problema.

• Los datos se almacenan en variables del


programa

Programación • La solución se expresa en secuencias de


instrucciones que modifican las variables
imperativa hasta obtener el resultado deseado

• Para programar:
• declarar las variables necesarias
• Diseñar una secuencia (algoritmo)
adecuada de instrucciones que
transforme las entradas en las salidas
pretendidas
Programación imperativa

Ejemplo: Mayor de dos números en Pascal.

PROGRAM mayorDeDosNumeros;
VAR x,y, mayor;
BEGIN
Read (x,y);
if x > y then
mayor := x
else
mayor := y;
Write (mayor);
END.
Programación declarativa
Ejemplo: Parentescos No necesita definir algoritmos puesto
HECHOS que describe el problema en lugar
[parentesco].
padre(josé,ana).
de tratar de encontrar una solución
padre(antonio,luis). para el mismo.
padre(juan,rosa).
padre(pedro,antonio).
madre(ana,luis). Este paradigma utiliza el principio del
madre(eva,antonio).
razonamiento lógico para responder
REGLAS
abuelo(X,Z):-padre(X,Y),padre(Y,Z) a las preguntas o cuestiones
abuelo(X,Z):-padre(X,Y),madre(Y,Z) consultadas.

Consultas:
?- abuelo(josé,luis). Un motor de inferencia encuentra la
SI solución a las consultas a partir de
?- abuelo(josé,ana). los datos iniciales (hechos), y las
NO reglas
?- abuelo(X,luis).
X=josé, pedro
https://swish.swi-prolog.org/

37
• Programación imperativa
• Programación estructurada
Paradigmas • Programación modular o
procedural
de • Programación orientada a objetos
• Programación reactiva
programación • Programación distribuida
• Programación declarativa
• Programación funcional
• Programación lógica
Programación modular
La programación estructurada clásica funciona bien para programas cortos. Un
programa con más de 1000 líneas es imposible de leer ( y 1000 líneas no es
nada)

La programación modular consiste en dividir un programa en módulos o


subprogramas con el fin de hacerlo más legible y manejable
Programación estructurada

Los primeros lenguajes de


Podemos ver ejemplos de goto
programación heredaban del
en lenguajes como Basic. Este
lenguaje ensamblador una
tipo de estructuras deterioran
instrucción de control de flujo
la calidad del software al hacer
(GOTO) que permitía saltar de
más difícil la legibilidad del
forma arbitraria a cualquier
programa
parte del programa.
La programación estructurada prohíbe el uso de
instrucciones de salto a etiqueta (GOTO). El flujo del
programa se controla mediante estructuras selectivas o
iterativas

40
• Programación imperativa
• Programación estructurada
Paradigmas • Programación modular o
procedural
de • Programación orientada a objetos
• Programación reactiva
programación • Programación distribuida
• Programación declarativa
• Programación funcional
• Programación lógica
TEMA 1. INTRODUCCIÓN A LA PROGRAMACIÓN

Programación clasica vs
Programación OO

• Programación Clásica
• Se especifican por separado los tipos de datos y las funciones y procedimientos
del programa que los modifican. Los datos se guardan en variables
• Hay una estructura de control central (programa principal) en la que los valores
fluyen a través de varios procedimientos definidos en el programa.

• Programación Orientada a Objetos (POO)


https://www.youtube.com/watch?v=SI7O81GMG2A

• Los objetos son agrupaciones inseparables de estructuras de datos (atributos)


y funciones y procedimientos elaborados para manejarlos (métodos).
• Sólo es posible acceder a los datos a través de los métodos
TEMA 1. INTRODUCCIÓN A LA PROGRAMACIÓN

Programación clasica vs
Programación OO

• Los programas se diseñan en el contexto de los objetos que modelan el


sistema. No existe un flujo de control global sino muchos flujos locales a los
objetos.

• La POO aporta una programación conducida por sucesos (eventos). Según


el tipo de evento se evoca la respuesta adecuada.

• Hay técnicas de programación específicas como la herencia, el polimorfismo


y el paso de mensajes que facilitan la programación de los fragmentos.

• Ventajas:
• Mejor adaptada al entorno que se pretende informatizar: El mundo real
es un mundo de objetos no de datos independientes
• Mejor reutilización del software, gracias a la herencia.

43
TEMA 1. INTRODUCCIÓN A LA PROGRAMACIÓN

Estructurado Orientado a objetos


Paradigmas de programación

• Programación imperativa
• Programación estructurada
• Programación modular o procedural
• Programación orientada a objetos
• Programación reactiva
• Programación distribuida
• Programación declarativa
• Programación funcional
• Programación lógica

45
Programación
reactiva

• En la programación reactiva el flujo del programa es controlado por eventos.


• Un evento es un cambio de estado en un subconjunto de los datos que cumple una determinada
condición.
• Dicho de otra forma cuando se produce un evento , se dispara un módulo del programa que lo
trata.
• La programación Orientada a Objetos es reactiva.

• También es programación reactiva la asociada a sistemas operativos con interface gráfica como
Windows.

• En estos casos no hay una estructura de control central. El programa se construye asociando
código a los diversos eventos, que el usuario puede provocar. Por ejemplo pasando el ratón o
haciendo clic sobre parte de la pantalla.
46
Programación reactiva

• La programación Orientada o
Objetos es por definición reactiva

• Ejemplo 1: triggers en bases de


datos
• Ejemplo 2: eventos en power
builder
• Programación imperativa
• Programación estructurada
Paradigmas • Programación modular o
procedural
de • Programación orientada a objetos
• Programación reactiva
programación • Programación distribuida
• Programación declarativa
• Programación funcional
• Programación lógica

49
Programación
distribuida
• En la programación distribuida se rompe la
presunción de que el software se va a
ejecutar en una sóla máquina. De esta
forma el sw distribuido puede estar
repartido en múltiples ordenadores, cada
uno ejecutando en paralelo porciones de
este.

• Hay varias arquitecturas distribuidas :


cliente-servidor, 3-tier, n-tier, objetos
distribuidos. Pero el que a nosotros nos
interesa en DAW va a ser el modelo cliente-
servidor a dos y tres capas

50
Programación distribuida

• Actualmente, cuando hablamos de programación distribuida, hablamos


mayormente de Desarrollo de Aplicaciones Web.

• Son aplicaciones que normalmente NO se ejecutan como programas


independientes en el PC cliente, sino a través del navegador.
• El interface con el usuario, en muchos casos (no siempre) es html que se
muestra a través del navegador.
• Todo lo cual tiene serias implicaciones de seguridad tanto para el cliente
como para el servidor, que impone restricciones a los recursos a los que se
puede acceder en uno y otro
• Al basarse en el navegador, no es necesario hacer un despliegue o instalación
de la aplicación. Cualquier ordenador con un navegador puede correr la
aplicación tan sólo con acceder al sitio web

51
Programación distribuida
FRONT-END Y BACK END

• En una aplicación web podemos distinguir dos elementos

• Front-end: Interface de usuario. Todo el código que se usa para


interactuar con el usuario y para crear lo que ve el usuario. Se utiliza
HTML, HTML5, CSS y Javascript. En ocasiones, ni siquiera está a
cargo de un programador, sino de un creativo gráfico

• Back-end: Arquitectura interna. Todo lo que no ve el usuario pero


que hace que la aplicación web web funcione, Se utilizan lenguajes
como Javascript, Java, Pyton, PHP, ASP, .NET
• Las acciones de lógica.
• Las conexiones con las bases de datos.
• El acceso a las librerías del servidor web, ya sea para comprimir
las imágenes de la web, para implementar temas de caché u
otras.
• La seguridad de los sitios web.
• Optimización de recursos 52
Lenguajes del lado del cliente

OPCIÓN 1: El programa se descarga desde el servidor, y se


ejecuta en el cliente a través del navegador, con un acceso
limitado a los recursos de este

Estaríamos hablando
de Lenguajes del lado
del cliente como
Javascript y Java

53
Lenguajes del lado del servidor
Actualmente, cuando hablamos de programación distribuida, hablamos
mayormente de Desarrollo de Aplicaciones Web.

OPCIÓN 1: El programa se ejecuta en el servidor web a petición del


cliente. El cliente recibe el resultado de la ejecución en forma de
páginas html.

Son lenguajes del lado del


servidor ASP.NET, PERL, y PHP

54
• Programación imperativa
• Programación estructurada
Paradigmas • Programación modular o
procedural
de • Programación orientada a objetos
• Programación reactiva
programación • Programación distribuida
• Programación declarativa
• Programación funcional
• Programación lógica

55
Programación
declarativa
• No necesita definir algoritmos
puesto que describe el problema
en lugar de encontrar una
solución al mismo. Este paradigma
utiliza el principio del
razonamiento lógico para
responder a las preguntas o
cuestiones consultadas.

56
Programación funcional

Tiene su base en el concepto de función


matemática:
f: dominio rango

Para programar:
− Se construyen funciones sencillas
− Se construyen funciones más complejas a
partir de las sencillas
− Se evalúan las funciones sobre los datos de
entrada

El concepto es muy antiguo, (principios de los años 80), y es un paradigma de programación muy
nicho, usado por poca gente.

Sin embargo en los últimos años se ha vuelto a poner de moda, usando P.O.O. bajo las reglas del
paradigma funcional.

57
Programación
funcional

• Ejemplo: Mayor de tres números en


funcional

• Definición de funciones max2 y
max3:

• max2(x,y) := if x > y then x else


y

• max3(x,y,z) :=
max2(max2(x,y),z)
• NOTA: “:=“ en este caso significa “se
define como”

58
• Existen LAN como Haskell específicamente diseñados para el paradigma funcional, aunque…
• Otros LAN, especialmente los OO (orientados a Objetos) pueden ser usados funcionalmente.
• La programación funcional es un estilo de programación, no un tipo específico de LAN

• El ejemplo muestra código javascript siguiendo el paradigma de la programación funcional

59
• Programación imperativa
• Programación estructurada
Paradigmas • Programación modular o
procedural
de • Programación orientada a objetos
• Programación reactiva
programación • Programación distribuida
• Programación declarativa
• Programación funcional
• Programación lógica
• Tiene su base en cálculo de predicados de primer
orden.
Programación • Para programar:
lógica • A partir de los datos se definen hechos (o
predicados básicos)
• Se diseñan las reglas lógicas que definen el
problema
• Se diseña una consulta para obtener del
sistema la solución deseada
• Ventaja: El compilador dispone de un motor de
inferencia. Dados unos hechos, y unas reglas bien
formadas, es capaz por sí mismo de determinar la
solución a las consultas, sin que el programador
tenga que indicarle la secuencia de operaciones a
llevar a cabo.

• Inconveniente: El programador debe extrapolar el


conjunto de reglas de la lógica de predicados que
mejor defina la naturaleza del problema. No es un
trabajo fácil.
Ejemplo: Parentescos
Programación lógica HECHOS
madre(ana,luis)
padre(josé,ana)
madre(Eva,antonio)
padre(antonio,luis)
padre(pedro,antonio)
padre(Juan,Rosa)

, operador and REGLAS


abuelo(X,Z):-padre(X,Y),padre(Y,Z)
; operador or abuelo(X,Z):-padre(X,Y),madre(Y,Z)

Consultas:
?- abuelo(josé,luis).
SI
?- abuelo(josé,ana).
NO
?- abuelo(X,luis)
X=josé, pedro

https://www.youtube.com/watch?v=zjDoVTb7cyU
Prog. Prog. orientada
Concurrente a objetos
Prog. LISP
CLOS
Funcional Hope
Haskel
Paradigmas (P.Declarativa)
Prog.
y lenguajes Lógica Prolog Ciao-Prolog Prolog++

(P.Declarativa)

C Ada Smalltalk
Ada-95 Dephi
Prog. PASCAL Pascal FC C++
Imperativa Fortran Java Eiffel
COBOL

También podría gustarte