Instituto universitario
panamericano
campus Tuxtla
8° cuatrimestre
licenciatura en informática
ingeniero miguel ángel pinto
Lic. Iván aricel Pérez Penagos
16 de octubre de 2016
Tuxtla Gutiérrez Chiapas
Un sistema experto o sistema basado en el conocimiento es un sistema
informático capaz de emular las prestaciones de un experto humano en un área
concreta de conocimiento especializado.
Los Sistemas expertos sirven para resolver cuestiones complejas, en las cuales
hay muchos factores involucrados, se necesita tener en cuenta una amplia base
de datos históricos, y donde se puede definir alguna regla que permita la toma
de decisiones rápida. Actualmente son aplicados con éxito en: medicina,
química, biología, administración, industria, etc.
Los Sistemas Expertos están basados en
conocimientos porque se desarrollan para asignarles
tareas específicas que requieren una gran cantidad
de conocimiento de un dominio de experiencia
particular, proporcionan experiencia en forma de
diagnósticos, instrucciones, predicciones o consejos
ante situaciones reales que se planteen y pueden
servir también como herramientas de
entrenamiento.
Son aplicables a numerosos campos de experiencia, como medicina, actividades
militares, económicas financieras e industriales, ciencia, ingeniería, y derecho. Más
concretamente, el sistema experto debe ser capaz de llevar a cabo las siguientes tareas:
Aceptar las consultas que el usuario realice acerca de una situación dada del mundo real.
•Aceptar los datos proporcionados por el usuario acerca de esta situación, y solicitar otros datos
que el sistema estime relevantes.
•Procesar esta información, en busca de una respuesta a la consulta planteada.
•Emitir la respuesta hallada, que debe ser análoga en la mayor parte de los casos a la respuesta
que daría un experto humano.
•Justificar la respuesta finalmente emitida, siempre que el usuario así lo solicite.
INTRODUCION
Resulta difícil cambiar el pensamiento de la sociedad al establecer las nuevas tecnologías que
sirven de apoyo hoy día para el hombre en la realización de diversas actividades que en tiempos
pasados requerían de mucha entrega y dedicación. Más aun con la aparición de diversas
metodologías que hacen de estos aportes un instrumento indispensable para
muchasorganizaciones e instituciones que se basan en estas herramientas inteligentes para crear,
diseñar, establecer, y estructurar diferentes posturas que le ayudan en la toma de decisiones.
Durante años la actividad de la Inteligencia Artificial estuvo
dedicada a las investigaciones teóricas y al desarrollo de
experimentos a través de programas que demostraran
actitudes inteligentes. Quizás al principio este tipo de
herramientas estaban destinadas para actuar por si solos, pero
en el camino el hombre le encontró una utilidad que las
caracteriza comosistemas que ayudan a mejorar la eficacia de
las organizaciones en el desempeño de sus actividades.
Lenguajes funcionales
En ciencias de la computación, la programación funcional es un paradigma de programación
declarativa basado en el uso de funciones matemáticas, en contraste con la programación
imperativa, que enfatiza los cambios de estado mediante la mutación de variables. La
programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en
los años 1930 para investigar la definición de función, la aplicación de las funciones y la
recursión. Muchos lenguajes de programación funcionales pueden ser vistos como
elaboraciones del cálculo lambda.
En la práctica, la diferencia entre una función matemática y la noción de una "función"
utilizada en la programación imperativa, es que las funciones imperativas pueden tener
efectos secundarios, como cambiar el valor de cálculos realizados previamente. Por esta
razón carecen de transparencia referencial, es decir, la misma expresión sintáctica puede
resultar en valores diferentes en varios momentos de la ejecución del programa. Con
código funcional, en contraste, el valor generado por una función depende exclusivamente
de los argumentos alimentados a la función. Al eliminar los efectos secundarios se puede
entender y predecir el comportamiento de un programa mucho más fácilmente. Ésta es
una de las principales motivaciones para utilizar la programación funcional.
LENGUAJES IMPERATIVOS
La programación imperativa, en contraposición a la programación declarativa, es un paradigma
de programación que describe la programación en términos del estado del programa y
sentencias que cambian dicho estado. Los programas imperativos son un conjunto de
instrucciones que le indican al computador cómo realizar una tarea.
La implementación de hardware de la mayoría de computadores es imperativa; prácticamente
todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es
nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los
computadores implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de
bajo nivel, el estilo del programa está definido por los contenidos de la memoria, y las
sentencias son instrucciones en el lenguaje de máquina nativo del computador (por ejemplo el
lenguaje ensamblador).
Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún
siguen el mismo paradigma. Las recetas y las listas de revisión de procesos, a pesar de no ser
programas de computadora, son también conceptos familiares similares en estilo a la
programación imperativa; donde cada paso es una instrucción
Algunos lenguajes imperativos
BASIC
C
D1
Fortran
Pascal
Pauscal en español
Perl
PHP
Lua
Java
Python
Go
simple basic
LENGUAJES ORIENTADOS A OBJETOS
Se le llama así a cualquier lenguaje de programación que implemente los conceptos definidos
por la programación orientada a objetos.
Cabe notar que los conceptos definidos en la programación orientada a objetos no son una
condición sino que son para definir que un lenguaje es orientado a objetos. Existen conceptos
que pueden estar ausentes en un lenguaje dado y sin embargo, no invalidar su definición como
lenguaje orientado a objetos.
Quizás las condiciones mínimas necesarias las
provee el formalismo que modeliza mejor las
propiedades de un sistema orientado a
objetos: los tipos de datos abstractos.
Siguiendo esa idea, cualquier lenguaje que
permita la definición de tipos de datos, de
operaciones nuevas sobre esos tipos de datos,
y de instanciar el tipo de datos podría ser
considerado orientado a objetos
LENGUAJE DECLARATIVOS
La programación declarativa, en contraposición a la programación imperativa, es un paradigma
de programación que está basado en el desarrollo de programas especificando o "declarando" un
conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o
transformaciones que describen el problema y detallan su solución. La solución es obtenida
mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan
sólo se le indica a la computadora qué es lo que se desea obtener o qué es lo que se está
buscando). No existen asignaciones destructivas, y las variables son utilizadas con transparencia
referencial.
Diferencia entre imperativo y declarativo
En la programación imperativa se describe paso a paso un conjunto de instrucciones que
deben ejecutarse para variar el estado del programa y hallar la solución, es decir, un
algoritmo en el que se describen los pasos necesarios para solucionar el problema.
En la programación declarativa las sentencias que se utilizan lo que hacen es describir el
problema que se quiere solucionar; se programa diciendo lo que se quiere resolver a nivel
de usuario, pero no las instrucciones necesarias para solucionarlo. Esto último se realizará
mediante mecanismos internos de inferencia de información a partir de la descripción
realizada.
UNION DE LENGUAJES
En programación, una unión es un valor que puede poseer varias representaciones o
formatos; o una Estructura de datos que consiste en una variable que puede almacenar
dicho valor. Algunos lenguajes de programación admiten tipos de datos especiales, llamados
union types, para describir dichos valores y variables.
Dependiendo del lenguaje y del tipo, un valor unión puede ser usado en operaciones como,
por ejemplo, asignación o comparación de igualdad, sin necesidad de saber su tipo
específico. Por el contrario, otras operaciones si que requieren saber el tipo de dato — ya
sea por medio de información externa, o por el uso de un tagged union.
A causa de sus limitaciones de uso, las uniones son normalmente proveídas en lenguajes sin
tipado o en modo inseguro (como en C). Tienen la ventaja sobre las uniones etiquetadas por
no necesitar espacio para guardar el tag.
En C y C++, las uniones son expresados casi igual que los struct excepto que cada miembro
empieza en la misma dirección de memoria. Los elementos, al igual que en los structs, no
necesitan ser valores simples, de hecho, pueden ser structs e incluso uniones. Por otra parte,
C++ no permite a un elemento ser de cualquier tipo que tenga un full fledged
constructor/destructor y/o copy constructor, o una copia no-trivial del operador de asignación.
En particular, es imposible tener cadenas de caracteres estandar de C++ como miembro de una
unión. El objeto unión ocupa tanto espacio como el elemento más grande que lo compone,
mientras que los structs necesitan al menos el mismo espacio que la suma de los tamaños de
todos sus elementos. Esta ganancia en espacio, muy útil en algunos casos, implica un gran coste
en seguridad: la lógica del programa debe asegurarse de que solo se lee el último elemento en
ser escrito por todos los posibles caminos que lleve el programa al ejecutarse.
La principal ventaja de la unión es el ahorro de espacio, ya que proporciona una manera de
guardar varios tipos de datos en el mismo espacio. Las uniones proporcionan también
polimorfismo. Pero, no se comprueba el tipo de los datos, así que es tarea del programador
asegurarse que se accede correctamente en todos los posibles contextos. El elemento más
relevante de la variable unión es normalmente determinado por el estado de otra variable,
probablemente dentro de un struct.
Un uso común de las uniones en C es lo que en C++ se llama reinterpret_cast, asignando los
datos a un elemento de la unión y leyendo de otro, para códigos que dependen de la
representación cruda de los valores. Aunque esta no es una forma segura de usar las uniones.
El lenguaje de programación Pascal permite crear uniones de manera muy similar a la manera
en que sea crean las estructuras (cambiando "Estruc" por "Unión"). El principal uso de las
uniones es para interpretar un valor de un tipo de dato en otro tipo de dato, por ejemplo
interpretar los bytes de un valor flotante como un entero. En este ejemplo el valor flotante no
es convertido a un entero, sino que los bytes que lo componen se interpretan como un entero.
A diferencia de C/C++ las uniones en Pauscal pueden contener cadenas de caracteres, al igual
que estructuras y otras uniones.
ENTORNOS DE PROGRAMACION
Las actividades mejor soportadas por herramientas de desarrollo son normalmente la centrales:
codificación y pruebas de unidades. El conjunto de herramientas que soportan estas actividades
constituyen lo que se llama un entorno de programación. A veces se utilizan las siglas IDE
(Integrated Development Environment) para designar estos entornos, aunque no son un
entorno de desarrollo completo, sino sólo una parte de él.
Siguiendo la terminología anterior, de niveles funcionales, es el banco de trabajo del
programador
Da soporte a las actividades de la fase de codificación (preparación del código y prueba de
unidades)
Los mismos productos sirven también para el diseño detallado y para las pruebas de integración.
Se sitúa, por tanto, en la parte central del ciclo de desarrollo
Funciones de un Entorno de Programación
Como se ha dicho, la misión de un Entorno de Programación es dar soporte a la preparación de
programas, es decir, a las actividades de codificación y pruebas.
Las tareas esenciales de la fase de codificación son:
Edición (creación y modificación) del código fuente
Proceso/ejecución del programa
Interpretación directa (código fuente)
Compilación (código máquina) - montaje - ejecución
Compilación (código intermedio) - interpretación
Otras funciones:
Examinar (hojear) el código fuente
Analizar consistencia, calidad, etc.
Ejecutar en modo depuración
Ejecución automática de pruebas
Control de versiones
Generar documentación, reformar código
... y otras muchas más ...
Tipos de Entornos de Programación
Un entorno de programación puede estar concebido y organizado de maneras muy diferentes. A
continuación se mencionan algunas de ellas.
En las primeras etapas de la informática la preparación de programas se realizaba mediante una
cadena de operaciones tales como la que se muestra en la figura para un lenguaje procesado
mediante compilador. Cada una de las herramientas debía invocarse manualmente por
separado. En estas condiciones no puede hablarse propiamente de un entorno de programación
El editor es un editor de texto simple
El compilador traduce cada fichero de código fuente a código objeto
El montador (linker / builder / loader) combina varios ficheros objeto para generar un fichero
ejecutable
El depurador maneja información en términos de lenguaje de máquina
Un entorno de programación propiamente dicho combina herramientas como éstas, mejoradas
y mejor integradas. A veces se nombra con las siglas IDE (Integrated Development Environment)
Los componentes cuya evolución ha sido más aparente son los que realizan la interacción con el
usuario:
El editor ya no es un simple editor de texto, sino que tiene una clara orientación al lenguaje de
programación usado (reconoce y maneja determinados elementos sintácticos)
El depurador no presenta información en términos del lenguaje de máquina, sino del lenguaje
fuente
El editor está bien integrado con las demás herramientas (se posiciona directamente en los
puntos del código fuente en los que hay errores de compilación, o que se están ejecutando con
el depurador en un momento dado.
No es fácil establecer una clasificación dentro de la variedad de entornos de programación
existentes
No es fácil establecer una clasificación dentro de la variedad de entornos de programación
existentes. En algún momento se describieron las siguientes clases de entornos, no excluyentes,
usando un criterio esencialmente pragmático:
Entornos centrados en un lenguaje
Entornos orientados a estructura
Entornos colección de herramientas
ENTORNOS CENTRADOS EN UN LENGUAJE
Presentan las siguientes características generales:
Son específicos para un lenguaje de programación en particular
Están fuertemente integrados. Aparecen como un todo homogéneo
Se presentan como una herramienta única
El editor tiene una fuerte orientación al lenguaje
Son relativamente cómodos o fáciles de usar
A veces son poco flexibles en lo referente a la interoperación con otros productos o a la
ampliación de sus funciones
Se basan en representar el código fuente como texto
PODEMOS ENCONTRAR EJEMPLOS DE ESTOS ENTORNOS PARA TODO TIPO DE LENGUAJES
Lenguajes funcionales con interpretación directa
(Inter)Lisp, Haskell, etc.
Lenguajes compilados a código de máquina nativo
Delphi, Visual C++, AdaGide/GNAT, GPS, etc.
Lenguaje ejecutados sobre máquina virtual
Java (Visual Age, Eclipse), C# (Visual Studio .NET)
Ejemplos especiales:
Entornos Ada (Stoneman, Cais, Asis)
Entornos Smalltalk
Entornos Oberon, Component Pasca
ENTORNOS ORIENTADOS A ESTRUCTURA
Podrían considerarse incluidos en la clase anterior, ya que suelen ser específicos para un
lenguaje de programación, pero están concebidos de manera diferente:
El editor de código fuente no es un editor de texto, sino un editor de estructura (editor
sintáctico)
Se basan en representar internamente el código fuente como una estructura:
Árbol de sintaxis abstracta: AST
La presentación externa del código es en forma de texto
Plantillas (elementos sintácticos no terminales)
Texto simple (elementos terminales - a veces "frases" para expresiones)
Compilación incremental (en algunos casos)
Para desarrollo personal, no en equipo
Ejemplos:
The Cornell Program Synthesizer (subconjunto de PL/I)
Mentor (Pascal)
Alice Pascal
Gandalf (intenta ser un entorno de desarrollo completo, para todo el ciclo de vida)
Estos entornos estuvieron de moda en los años 80. Los desarrollos fueron fundamentalmente
académicos, y quedaron en desuso. En la actualidad los lenguajes de marcado (XML) pueden ser
una buena forma de representar la estructura del código fuente con vistas a su manipulación.
Existen editores y procesadores XML que podrían ser la base de nuevos entornos de
programación orientados a estructura
Entornos basados en combinación de
herramientas
Consisten en una combinación de diversas herramientas capaces de interoperar entre ellas de
alguna manera. Se denominan entornos toolkit. Presentan las siguientes características:
Presentan integración débil
Son un conjunto de elementos relativamente heterogéneos
Son fáciles de ampliar o adaptar mediante nuevas herramientas
Pueden ser construidos en parte por el propio usuario (programador): éste es más o menos el
estilo UNIX original
Ofrecen poco control de uso de cada herramienta
El elemento frontal (front-end) para interacción con el usuario suele ser un editor configurable,
con llamadas a herramientas externas. A veces estos editores configurables se designan también
con las siglas IDE (que debería reservarse para el entorno completo)
Ejemplos de editores configurables
Emacs, Vim, Gvim
Med, SciTE, jEdit
Eclipse (algo más que un editor)
ENTORNOS MULTILENGUAJE
Hay aplicaciones que combinan piezas de código fuente escritas en diferentes lenguajes de
programación. Algunas posibilidades de combinación son las siguientes:
Entornos genéricos
No se combinan lenguajes en un mismo programa. Hay varios programas, cada uno en su propio
lenguaje
Bastaría combinar las herramientas correspondientes a cada lenguaje (compiladores, etc.)
Se podría usar un frontal común: editor personalizable que soporte los lenguajes concretos
Ejemplos:
Emacs (con diferentes "modos")
Eclipse (con diferentes "plug-ins")
Entornos específicos
Para una combinación concreta de lenguajes
Vienen a ser como los entornos centrados en un lenguaje, sólo que admiten más de uno
Usan un formato binario compatible que permite combinar en un mismo programa partes
escritas en los diferentes lenguajes
Ejemplo: GPS permite combinar módulos en Ada y C++
Lenguajes ejecutados sobre máquina virtual
La máquina virtual establece el formato del código binario
Pueden combinarse módulos escritos en diferentes lenguajes para los que exista el compilador
apropiado
Cada lenguaje puede tener su entorno de programación separado, o bien existir un entorno de
programación único
Ejemplos:
JVM (Java Virtual Machine). El lenguaje original es Java. El intérprete es el JRE (Java Runtime
Environment). Hay compiladores a JVM para otros lenguajes además de Java: Ada, Fortran,
Component Pascal (Oberon), etc. (incluso C#)
.Net (Microsoft). El lenguaje original es C#. El intérprete es el CLR (Common Language Runtime).
Hay compiladores a .Net para otros lenguajes además de C#: Ada, Fortran, Component Pascal
(Oberon), etc. (incluso Java)
ENTORNOS PARA INGENIERÍA DE
SOFTWARE
Un entorno de programación, tal como se ha definido anteriormente, serviría para dar soporte a
las tareas de desarrollo de software realizadas por una persona. Para desarrollar proyectos de
software no triviales se necesita trabajar en equipo usando las recomendaciones de la ingeniería
de software.
Cada miembro del equipo de desarrollo puede disponer de una estación de trabajo con un
entorno de programación adecuado para realizar su trabajo individual, y se necesita además
algún medio de combinar los trabajos individuales en una labor de conjunto, debidamente
organizada.
HERRAMIENTAS INTERNAS DE DESAARROLLO
DE SISTEMAS
La comunicación interna es la comunicación dirigida al cliente interno, es decir, al trabajador.
Nace como respuesta a las nuevas necesidades de las compañías de motivar a su equipo
humano y retener a los mejores en un entorno empresarial donde el cambio es cada vez más
rápido. No olvidemos que las empresas son lo que son sus equipos humanos, por ello, motivar
es mejorar resultados.
Muchas empresas ignoran que para ser competitivas y enfrentarse con éxito al cambio al que
nos empuja inexorablemente el mercado, han de saber motivar a su equipo humano, retener a
los mejores, inculcarles una verdadera cultura corporativa para que se sientan identificados y
sean fieles a la organiza- ción. Y es precisamente aquí donde la comunicación interna se
convierte en una herramienta estratégica clave para dar respuesta a esas necesidades y
potenciar el sentimiento de pertenencia de los empleados a la compañía para conseguir retener
el talento.
Para aumentar la eficacia del equipo humano, verdadero artífice de los resultados, ha de sentirse
a gusto e integrado dentro de su organización, y esto solo es posible si los trabajadores están
informados, conocen los diferentes entramados de la compañía, su misión, su filosofía, sus
valores, su estrategia, se sienten parte de ella y, por consiguiente, están dispuestos a dar todo de
sí mismos. Además, no debemos olvidar que la comunicación interna ayuda a reducir la
incertidumbre y a prevenir el temido rumor, un elemento muy peligroso para las compañías.
Por ello, transmitir mensajes corporativos, informar sobre lo que ocurre dentro de la empresa,
motivar y establecer una línea de comunicación eficaz entre los empleados, la dirección y los
diferentes departamentos de la empresa son algunos de los objetivos que persigue la
comunicación interna.
En cuanto a los tipos de comunicación interna, podemos hablar de dos: ascendente, que se
realiza desde abajo hacia arriba en el organigrama de la empresa; y descendente, que tiene
lugar desde arriba hacia abajo. A menudo, muchas empresas caen en el error de convertir su
comunicación en algo unidi- reccional, donde los trabajadores son meros sujetos pasivos.
ORDENADORES PARA SISTEMAS
EXPERTOS (HARWARE)
Los miniordenadores, son computadores reducidos a bajo coste, ideados para potenciar
la informática a sectores que no tuvieran acceso, como por ejemplo escuelas de
enseñanza. Pero el bajo precio, unido a la versatilidad que ofrece su hardware, han
cautivado la mirada de muchos aficionados al sector. ¿Qué hay detrás de estos
“pequeños”?
Poderoso y chiquitín
De reducidas dimensiones, que van desde el tamaño de una memoria USB, hasta un tablet, los
miniordenadores disponen de un abanico de conexiones de salida que abren un mundo de
posibilidades. La interfaz de red Ethernet, puertos USB y el HDMI, entre otros, proporcionan
armas suficientes como para dar batalla en muchos propósitos.
Ventajas de los Miniordenadores
Calidad / Precio. La potencia del hardware que podemos obtener es realmente
provechosa para un sinfín de aplicaciones.
Espacio: Las dimensiones de los miniordenadores dejan en ridículo a los “gigantes” PC
de sobremesa
Bajo Consumo: El gasto de electricidad oscila entre 1 y 3 Watios. Algo increíble teniendo en
cuenta que el uso normal de un PC de escritorio conlleva un consumo de 100 Watios.
Calentamiento. ¿De verdad crees que los miniordenadores tienen pinta de sobrecalentarse
mucho con un consumo tan bajo?
Contaminación acústica: Apenas se calientan, por lo que no entienden de ventiladores ni
sistemas de refrigeración. Adios ruido
Inconvenientes de los Miniordenadores
Ampliación de Hardware. Al estar todos los componentes integrados en la placa base, las
posibilidades de ampliación son prácticamente nulas.
Reparación en caso de avería. La miniaturización del hardware es un obstáculo para las
reparaciones de andar por casa.
Dificultad en el uso. A pesar de que el software que puede instalarse es muy variado, todos los
sistemas operativos suelen estar basados en Linux. Esto puede echar atrás a más de uno…por
miedo a lo nuevo. Ya que en realidad hay distribuciones compatibles realmente buenas, como
por ejemplo: Android, Raspbmc (centro Multimedia, Media Center), Firefox OS, Google Chrome
OS, Debian Squeeze, Open webOS, etc…
Usos de Miniordenadores
Thinclient o Internet PC. Pequeño ordenador portátil debido a su peso (gramos) y dimensiones,
que conectado a un televisor nos permita navegar por internet, comprobar el correo
electrónico.
NAS. Almacenamiento en red de ficheros, para acceder desde otros equipos conectados en
LAN
Media Center. Reproductor multimedia de vídeos en HD, audio e imágenes, con reproducción
en streaming de emisiones por internet.
SmarTVs. Podemos convertir nuestro televisor en un SmartTV, con conexión a internet,
reproductor de videos H264, DivX, Xvid, navegador de internet, etc.
Emulador videjuegos Mame. Para jugar a las antiguas vídeoconsolas.
Tablet TV. Tener una tablet Android con sus aplicaciones, juegos y utilidades en un televisor
controlado por teclado y ratón.
Radio por internet. Escuchar música en streaming.
Servidor web. Alojamiento de una página web.
Robótica. Integración en proyectos de ingeniería y/o electrónica.
Servidor SSH. Túnel SSH, VPN
OwnCloud. Nube para guardar ficheros personales. Ej.: Dropbox
Servidor de descargas. Gestión de descargas de programas P2P o Torrent
Estaciones de trabajos
En informática una estación de trabajo (en inglés workstation) es un computador de altas
prestaciones destinado para trabajo técnico o científico. En una red de computadoras, es
una computadora que facilita a los usuarios el acceso a los servidores y periféricos de la red. A
diferencia de una computadora aislada, tiene una tarjeta de red y está físicamente conectada
por medio de cables u otros medios no guiados con los servidores. Los componentes para
servidores y estaciones de trabajo alcanzan nuevos niveles de rendimiento informático, al
tiempo que ofrecen fiabilidad, compatibilidad, escalabilidad y arquitectura avanzada ideales
para entornos multiproceso.
Las estaciones de trabajo también corrían el mismo sistema operativo multi-usuario/multi-tarea
que las microcomputadoras usaban, comúnmente Unix. También usaban redes para conectarse
a computadoras más potentes para análisis de ingeniería y visualización de diseños. El bajo
costo relativo a minicomputadoras y mainframes permitió una productividad total mayor a
muchas compañías que usaban computadoras poderosas para el trabajo de cómputo técnico, ya
que ahora cada usuario individual contaba con una máquina para tareas pequeñas y medianas,
liberando así a las computadoras más grandes para los tratamientos por lotes.
Las Computadoras personales, en contraste
con las estaciones de trabajo, no fueron
diseñadas para traer el rendimiento de la
minicomputadora al escritorio de un ingeniero,
sino que fueron previstas originalmente para el
uso en casa o la productividad de oficina, la
sensibilidad al precio fue un aspecto de
consideración primaria
MAQUINAS SIMBOLICAS
Inteligencia artificial simbólica es el nombre colectivo para todos los métodos de investigación
de la inteligencia artificialque se basan en representaciones de alto nivel "simbólico" de los
problemas, la lógica matemática y la búsqueda. IA simbólica fue el paradigma dominante de la
investigación en IA desde mediados de los cincuenta hasta finales de los años ochenta.
Después, se introdujeron enfoques sub-simbólicos más recientes a la IA, basado en redes
neuronales,estadística, optimización numérica y otras técnicas. La IA simbólica se sigue
aplicando en algunos dominios más pequeños (como la representación del conocimiento),
pero la mayoría de las aplicaciones de IA en el siglo XXI no emplean símbolos legibles como sus
objetos primarios.
John Haugeland dio el nombre GOFAI (por sus siglas en inglés, Good Old-Fashioned Artificial
Intelligence) a la IA simbólica en su libro de 1985 Inteligencia Artificial: La Idea Pura, que
exploró las implicaciones filosóficas de la investigación de la inteligencia artificial. En robótica el
término análogo es GOFAIR (por sus siglas en inglés, "Good Old-Fashioned Robotics").
Este enfoque se basa en la suposición de que muchos aspectos
de la inteligencia se pueden lograr mediante la manipulación de
símbolos, un supuesto definido como la "hipótesis de sistemas de
símbolos físicos" por Allen Newell yHerbert A. Simon a mediados
de los años 60’s
La forma más exitosa de la IA simbólica son los sistemas expertos, los cuáles utilizan una red de
reglas de producción. Las normas de producción conectan símbolos en una relación similar a
una instrucción “Si-Entonces” (If-Then). El sistema experto procesa las reglas para hacer
deducciones y determinar qué información adicional se necesita, por ejemplo, qué preguntas
hacer, usando simbología legible para el ser humano.
ORDENADORES PARALELOS
La computación paralela es una forma de cómputo en la que muchas instrucciones se ejecutan
simultáneamente, operando sobre el principio de que problemas grandes, a menudo se pueden
dividir en unos más pequeños, que luego son resueltos simultáneamente (en paralelo). Hay
varias formas diferentes de computación paralela: paralelismo a nivel de bit, paralelismo a nivel
de instrucción,para lelismo de datos y paralelismo de tareas
Las computadoras paralelas pueden clasificarse según el nivel de paralelismo que admite su
hardware: equipos con procesadores multinúcleo y multi-procesador que tienen múltiples
elementos de procesamiento dentro de una sola máquina y los clústeres, MPPS ygrids que
utilizan varios equipos para trabajar en la misma tarea. Muchas veces, para acelerar tareas
específicas, se utilizan arquitecturas especializadas de computación en paralelo junto a
procesadores tradicionales
Los programas informáticos paralelos son más difíciles de escribir que los secuenciales,
porque la concurrencia introduce nuevos tipos deerrores de software, siendo las condiciones
de carrera los más comunes. La comunicación y sincronización entre diferentes subtareas son
algunos de los mayores obstáculos para obtener un buen rendimiento del programa paralelo.
La máxima aceleración posible de un programa como resultado de la
paralelización se conoce como la ley de Amdahl.
PORTABILIDAD
CLIPS es una herramienta que provee un entorno de desarrollo para la producción y ejecución
de sistemas expertos. Fue creado a partir de 1984, en el Lyndon B. Johnson Space Center de la
NASA. Los fondos cesaron a principios de los años 1990, y hubo un mandato de la NASA para
comprar software comercial.
CLIPS es un acrónimo de C Language Integrated Production System (Sistema de Producción
Integrado en Lenguaje C). En la actualidad, entre los paradigmas de programación que soporta
CLIPS se encuentran la Programación lógica, laProgramación imperativa y la Programación
Orientada a Objetos.
CLIPS probablemente es el sistema experto más ampliamente usado debido a que es rápido,
eficiente y gratuito. Aunque ahora es de dominio público, aún es actualizado y mantenido por su
autor original, Gary Riley
CONSTRUCCION DE SISTEMAS
EXPERTOS
La adquisición del conocimiento y su transferencia son los principales cuellos de botella en el
desarrollo y aplicación de sistemas expertos. Los adelantos en la ingeniería del conocimiento han
mejorado los cimientos teóricos y su aplicación al desarrollo de mejores metodologías y
herramientas de transferencia del conocimiento. Este trabajo presenta una nueva forma para
abordar este proceso en el campo de la construcción de un sistema experto para el diagnóstico
de la situación de las Pequeñas y Medianas Empresas. Con una adecuada apreciación global del
conocimiento disponible se presenta los conceptos y fundamentos en que se apoyan los sistemas
como herramientas interactivas de la ingeniería del conocimiento, estableciendo criterios de
diseño para tales sistemas; se utilizan algunas de estas metodologías aplicadas en la industria,
que incluyen herramientas para la extracción de la estructura conceptual y análisis de vinculación
que se han usado extensamente en el diseño rápido de sistemas de expertos industriales.
También incluye herramientas para el análisis dinámico mediante la simulación continua, que
ofrecen aproximaciones complementarias y alternas para la adquisición del conocimiento.
METODOLOGIA
DE
CONSTRUCION
Esta fase corresponde a la adquisición del conocimiento del sistema denominado PyMe, tal y
como lo afirman Giarratano y Riley, este puede ser adquirido por medios indirectos como libros,
estudios realizados por sectores oficiales, tesis, diagnósticos sectoriales, etc., incluye
a) Determinar las áreas críticas para el diagnóstico de las PyMes; para ello, se recaba
información bibliográfica concentrándose principalmente en los estudios oficiales nacionales e
internacionales que al respecto existen en la actualidad. El diseño, ejecución y análisis de la
información de la investigación exploratoria se dan en tres ámbitos: el contexto donde ocurre el
diagnóstico, es decir la condición exógena al sistema donde se ha analizado el estudio para
ponderar cada caso
particular; la segunda, referida a los conocimientos y actitudes previas de los expertos
consultados como soporte directo que se haga sobre el tema, estos son profesionales dentro y
fuera del mismo Centro Universitario y desde luego empresarios que han sufrido de manera
directa estas dificultades; y la tercera, las posibilidades de combinación de factores de los
diagnósticos anteriores, es decir de las fuentes indirectas y de las directas.
b) La metodología de adquisición de conocimiento: Esta fase consiste en determinar las pautas
para recolectar, procesar y sintetizar el proceso de recabo de información, se construyen
matrices de causalidad donde los distintos expertos (directos e indirectos) tengan cabida con
sus opiniones, también se da espacio a índices cuantitativos que avalen los conocimientos y se
recurre a la convalidación de textos técnicos en cada área del conocimiento. Esta parte como se
presenta en el diagrama, es el corazón de la primera etapa y posteriormente se explicará en
detalle.
Para el desarrollo de esta metodología se siguió un proceso para cada una de las áreas críticas
seleccionadas y que se presentan resumidas en la figura 5.
a) Consulta de Bibliografía: ya se ha mencionado que el conocimiento de expertos queda
plasmado en sus obras, en algunos casos de mejor manera que a través de sus opiniones
verbales; ha sido probada esta técnica como una primera fuente de información para construir
la base del conocimiento. Para ello se revisaron más de 420 referencias bibliográficas entre
nacionales y extranjeras, de las cuales 38% corresponden al primer tipo y el 62% restante son
extranjeras, principalmente de México y España, corroborando su pertinencia al caso
Colombiano
b) Pareto de Causalidad: e l diagrama de Pareto es un gráfico de barras que muestra la
frecuencia relativa de hechos en orden descendente. Se conectan con una línea para mostrar la
adición incremental. Una vez compilada la información proveniente de los expertos nacionales e
internacionales, se homologan causas mediante la afinidad de variables. Ver figura 6 . Para ello
se utiliza el diagrama de afinidad, este permite entender sistemáticamente la estructura de un
problema global. Utiliza la afinidad entre partes o fragmentos de partes de datos verbales.
BIOGRAFIA
https://es.wikipedia.org/wiki/Programaci%C3%B3n_imperativa
https://es.wikipedia.org/wiki/Lenguaje_orientado_a_objetos
https://es.wikipedia.org/wiki/Programaci%C3%B3n_declarativa
https://es.wikipedia.org/wiki/Uni%C3%B3n_de_datos
http://lml.ls.fi.upm.es/ep/entornos.html
http://www.marketing-xxi.com/la-comunicacion-interna-119.htm
https://bcninfoservices.wordpress.com/2013/04/25/miniordenadores-que-son-y-para-
que-sirven/
https://es.wikipedia.org/wiki/Estaci%C3%B3n_de_trabajo
https://es.wikipedia.org/wiki/Inteligencia_artificial_simb%C3%B3lica
https://es.wikipedia.org/wiki/Computaci%C3%
B3n_paralela
https://es.wikipedia.org/wiki/CLIPS
http://revistas.udistrital.edu.co/ojs/index.php/
reving/article/view/2686/3865
https://www.uclm.es/profesorado/raulmmarti
n/FundamentosMatematicosII/SistemasExpert
os.pdf

lenguaje y herramientas

  • 2.
    Instituto universitario panamericano campus Tuxtla 8°cuatrimestre licenciatura en informática ingeniero miguel ángel pinto Lic. Iván aricel Pérez Penagos 16 de octubre de 2016 Tuxtla Gutiérrez Chiapas
  • 3.
    Un sistema expertoo sistema basado en el conocimiento es un sistema informático capaz de emular las prestaciones de un experto humano en un área concreta de conocimiento especializado. Los Sistemas expertos sirven para resolver cuestiones complejas, en las cuales hay muchos factores involucrados, se necesita tener en cuenta una amplia base de datos históricos, y donde se puede definir alguna regla que permita la toma de decisiones rápida. Actualmente son aplicados con éxito en: medicina, química, biología, administración, industria, etc. Los Sistemas Expertos están basados en conocimientos porque se desarrollan para asignarles tareas específicas que requieren una gran cantidad de conocimiento de un dominio de experiencia particular, proporcionan experiencia en forma de diagnósticos, instrucciones, predicciones o consejos ante situaciones reales que se planteen y pueden servir también como herramientas de entrenamiento.
  • 4.
    Son aplicables anumerosos campos de experiencia, como medicina, actividades militares, económicas financieras e industriales, ciencia, ingeniería, y derecho. Más concretamente, el sistema experto debe ser capaz de llevar a cabo las siguientes tareas: Aceptar las consultas que el usuario realice acerca de una situación dada del mundo real. •Aceptar los datos proporcionados por el usuario acerca de esta situación, y solicitar otros datos que el sistema estime relevantes. •Procesar esta información, en busca de una respuesta a la consulta planteada. •Emitir la respuesta hallada, que debe ser análoga en la mayor parte de los casos a la respuesta que daría un experto humano. •Justificar la respuesta finalmente emitida, siempre que el usuario así lo solicite.
  • 5.
    INTRODUCION Resulta difícil cambiarel pensamiento de la sociedad al establecer las nuevas tecnologías que sirven de apoyo hoy día para el hombre en la realización de diversas actividades que en tiempos pasados requerían de mucha entrega y dedicación. Más aun con la aparición de diversas metodologías que hacen de estos aportes un instrumento indispensable para muchasorganizaciones e instituciones que se basan en estas herramientas inteligentes para crear, diseñar, establecer, y estructurar diferentes posturas que le ayudan en la toma de decisiones. Durante años la actividad de la Inteligencia Artificial estuvo dedicada a las investigaciones teóricas y al desarrollo de experimentos a través de programas que demostraran actitudes inteligentes. Quizás al principio este tipo de herramientas estaban destinadas para actuar por si solos, pero en el camino el hombre le encontró una utilidad que las caracteriza comosistemas que ayudan a mejorar la eficacia de las organizaciones en el desempeño de sus actividades.
  • 6.
  • 7.
    En ciencias dela computación, la programación funcional es un paradigma de programación declarativa basado en el uso de funciones matemáticas, en contraste con la programación imperativa, que enfatiza los cambios de estado mediante la mutación de variables. La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en los años 1930 para investigar la definición de función, la aplicación de las funciones y la recursión. Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda.
  • 8.
    En la práctica,la diferencia entre una función matemática y la noción de una "función" utilizada en la programación imperativa, es que las funciones imperativas pueden tener efectos secundarios, como cambiar el valor de cálculos realizados previamente. Por esta razón carecen de transparencia referencial, es decir, la misma expresión sintáctica puede resultar en valores diferentes en varios momentos de la ejecución del programa. Con código funcional, en contraste, el valor generado por una función depende exclusivamente de los argumentos alimentados a la función. Al eliminar los efectos secundarios se puede entender y predecir el comportamiento de un programa mucho más fácilmente. Ésta es una de las principales motivaciones para utilizar la programación funcional.
  • 9.
  • 10.
    La programación imperativa,en contraposición a la programación declarativa, es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea. La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del programa está definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina nativo del computador (por ejemplo el lenguaje ensamblador).
  • 11.
    Los lenguajes imperativosde alto nivel usan variables y sentencias más complejas, pero aún siguen el mismo paradigma. Las recetas y las listas de revisión de procesos, a pesar de no ser programas de computadora, son también conceptos familiares similares en estilo a la programación imperativa; donde cada paso es una instrucción Algunos lenguajes imperativos BASIC C D1 Fortran Pascal Pauscal en español Perl PHP Lua Java Python Go simple basic
  • 12.
  • 13.
    Se le llamaasí a cualquier lenguaje de programación que implemente los conceptos definidos por la programación orientada a objetos. Cabe notar que los conceptos definidos en la programación orientada a objetos no son una condición sino que son para definir que un lenguaje es orientado a objetos. Existen conceptos que pueden estar ausentes en un lenguaje dado y sin embargo, no invalidar su definición como lenguaje orientado a objetos. Quizás las condiciones mínimas necesarias las provee el formalismo que modeliza mejor las propiedades de un sistema orientado a objetos: los tipos de datos abstractos. Siguiendo esa idea, cualquier lenguaje que permita la definición de tipos de datos, de operaciones nuevas sobre esos tipos de datos, y de instanciar el tipo de datos podría ser considerado orientado a objetos
  • 14.
  • 15.
    La programación declarativa,en contraposición a la programación imperativa, es un paradigma de programación que está basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a la computadora qué es lo que se desea obtener o qué es lo que se está buscando). No existen asignaciones destructivas, y las variables son utilizadas con transparencia referencial. Diferencia entre imperativo y declarativo En la programación imperativa se describe paso a paso un conjunto de instrucciones que deben ejecutarse para variar el estado del programa y hallar la solución, es decir, un algoritmo en el que se describen los pasos necesarios para solucionar el problema. En la programación declarativa las sentencias que se utilizan lo que hacen es describir el problema que se quiere solucionar; se programa diciendo lo que se quiere resolver a nivel de usuario, pero no las instrucciones necesarias para solucionarlo. Esto último se realizará mediante mecanismos internos de inferencia de información a partir de la descripción realizada.
  • 17.
  • 18.
    En programación, unaunión es un valor que puede poseer varias representaciones o formatos; o una Estructura de datos que consiste en una variable que puede almacenar dicho valor. Algunos lenguajes de programación admiten tipos de datos especiales, llamados union types, para describir dichos valores y variables. Dependiendo del lenguaje y del tipo, un valor unión puede ser usado en operaciones como, por ejemplo, asignación o comparación de igualdad, sin necesidad de saber su tipo específico. Por el contrario, otras operaciones si que requieren saber el tipo de dato — ya sea por medio de información externa, o por el uso de un tagged union. A causa de sus limitaciones de uso, las uniones son normalmente proveídas en lenguajes sin tipado o en modo inseguro (como en C). Tienen la ventaja sobre las uniones etiquetadas por no necesitar espacio para guardar el tag.
  • 19.
    En C yC++, las uniones son expresados casi igual que los struct excepto que cada miembro empieza en la misma dirección de memoria. Los elementos, al igual que en los structs, no necesitan ser valores simples, de hecho, pueden ser structs e incluso uniones. Por otra parte, C++ no permite a un elemento ser de cualquier tipo que tenga un full fledged constructor/destructor y/o copy constructor, o una copia no-trivial del operador de asignación. En particular, es imposible tener cadenas de caracteres estandar de C++ como miembro de una unión. El objeto unión ocupa tanto espacio como el elemento más grande que lo compone, mientras que los structs necesitan al menos el mismo espacio que la suma de los tamaños de todos sus elementos. Esta ganancia en espacio, muy útil en algunos casos, implica un gran coste en seguridad: la lógica del programa debe asegurarse de que solo se lee el último elemento en ser escrito por todos los posibles caminos que lleve el programa al ejecutarse. La principal ventaja de la unión es el ahorro de espacio, ya que proporciona una manera de guardar varios tipos de datos en el mismo espacio. Las uniones proporcionan también polimorfismo. Pero, no se comprueba el tipo de los datos, así que es tarea del programador asegurarse que se accede correctamente en todos los posibles contextos. El elemento más relevante de la variable unión es normalmente determinado por el estado de otra variable, probablemente dentro de un struct.
  • 20.
    Un uso comúnde las uniones en C es lo que en C++ se llama reinterpret_cast, asignando los datos a un elemento de la unión y leyendo de otro, para códigos que dependen de la representación cruda de los valores. Aunque esta no es una forma segura de usar las uniones. El lenguaje de programación Pascal permite crear uniones de manera muy similar a la manera en que sea crean las estructuras (cambiando "Estruc" por "Unión"). El principal uso de las uniones es para interpretar un valor de un tipo de dato en otro tipo de dato, por ejemplo interpretar los bytes de un valor flotante como un entero. En este ejemplo el valor flotante no es convertido a un entero, sino que los bytes que lo componen se interpretan como un entero. A diferencia de C/C++ las uniones en Pauscal pueden contener cadenas de caracteres, al igual que estructuras y otras uniones.
  • 21.
  • 22.
    Las actividades mejorsoportadas por herramientas de desarrollo son normalmente la centrales: codificación y pruebas de unidades. El conjunto de herramientas que soportan estas actividades constituyen lo que se llama un entorno de programación. A veces se utilizan las siglas IDE (Integrated Development Environment) para designar estos entornos, aunque no son un entorno de desarrollo completo, sino sólo una parte de él. Siguiendo la terminología anterior, de niveles funcionales, es el banco de trabajo del programador Da soporte a las actividades de la fase de codificación (preparación del código y prueba de unidades) Los mismos productos sirven también para el diseño detallado y para las pruebas de integración. Se sitúa, por tanto, en la parte central del ciclo de desarrollo
  • 23.
    Funciones de unEntorno de Programación Como se ha dicho, la misión de un Entorno de Programación es dar soporte a la preparación de programas, es decir, a las actividades de codificación y pruebas. Las tareas esenciales de la fase de codificación son: Edición (creación y modificación) del código fuente Proceso/ejecución del programa Interpretación directa (código fuente) Compilación (código máquina) - montaje - ejecución Compilación (código intermedio) - interpretación Otras funciones: Examinar (hojear) el código fuente Analizar consistencia, calidad, etc. Ejecutar en modo depuración Ejecución automática de pruebas Control de versiones Generar documentación, reformar código ... y otras muchas más ...
  • 24.
    Tipos de Entornosde Programación
  • 25.
    Un entorno deprogramación puede estar concebido y organizado de maneras muy diferentes. A continuación se mencionan algunas de ellas. En las primeras etapas de la informática la preparación de programas se realizaba mediante una cadena de operaciones tales como la que se muestra en la figura para un lenguaje procesado mediante compilador. Cada una de las herramientas debía invocarse manualmente por separado. En estas condiciones no puede hablarse propiamente de un entorno de programación
  • 26.
    El editor esun editor de texto simple El compilador traduce cada fichero de código fuente a código objeto El montador (linker / builder / loader) combina varios ficheros objeto para generar un fichero ejecutable El depurador maneja información en términos de lenguaje de máquina Un entorno de programación propiamente dicho combina herramientas como éstas, mejoradas y mejor integradas. A veces se nombra con las siglas IDE (Integrated Development Environment)
  • 27.
    Los componentes cuyaevolución ha sido más aparente son los que realizan la interacción con el usuario: El editor ya no es un simple editor de texto, sino que tiene una clara orientación al lenguaje de programación usado (reconoce y maneja determinados elementos sintácticos) El depurador no presenta información en términos del lenguaje de máquina, sino del lenguaje fuente El editor está bien integrado con las demás herramientas (se posiciona directamente en los puntos del código fuente en los que hay errores de compilación, o que se están ejecutando con el depurador en un momento dado. No es fácil establecer una clasificación dentro de la variedad de entornos de programación existentes No es fácil establecer una clasificación dentro de la variedad de entornos de programación existentes. En algún momento se describieron las siguientes clases de entornos, no excluyentes, usando un criterio esencialmente pragmático: Entornos centrados en un lenguaje Entornos orientados a estructura Entornos colección de herramientas
  • 28.
  • 29.
    Presentan las siguientescaracterísticas generales: Son específicos para un lenguaje de programación en particular Están fuertemente integrados. Aparecen como un todo homogéneo Se presentan como una herramienta única El editor tiene una fuerte orientación al lenguaje Son relativamente cómodos o fáciles de usar A veces son poco flexibles en lo referente a la interoperación con otros productos o a la ampliación de sus funciones Se basan en representar el código fuente como texto PODEMOS ENCONTRAR EJEMPLOS DE ESTOS ENTORNOS PARA TODO TIPO DE LENGUAJES Lenguajes funcionales con interpretación directa (Inter)Lisp, Haskell, etc. Lenguajes compilados a código de máquina nativo Delphi, Visual C++, AdaGide/GNAT, GPS, etc. Lenguaje ejecutados sobre máquina virtual Java (Visual Age, Eclipse), C# (Visual Studio .NET) Ejemplos especiales: Entornos Ada (Stoneman, Cais, Asis) Entornos Smalltalk Entornos Oberon, Component Pasca
  • 30.
  • 31.
    Podrían considerarse incluidosen la clase anterior, ya que suelen ser específicos para un lenguaje de programación, pero están concebidos de manera diferente: El editor de código fuente no es un editor de texto, sino un editor de estructura (editor sintáctico) Se basan en representar internamente el código fuente como una estructura: Árbol de sintaxis abstracta: AST La presentación externa del código es en forma de texto Plantillas (elementos sintácticos no terminales) Texto simple (elementos terminales - a veces "frases" para expresiones) Compilación incremental (en algunos casos) Para desarrollo personal, no en equipo Ejemplos: The Cornell Program Synthesizer (subconjunto de PL/I) Mentor (Pascal) Alice Pascal Gandalf (intenta ser un entorno de desarrollo completo, para todo el ciclo de vida)
  • 32.
    Estos entornos estuvieronde moda en los años 80. Los desarrollos fueron fundamentalmente académicos, y quedaron en desuso. En la actualidad los lenguajes de marcado (XML) pueden ser una buena forma de representar la estructura del código fuente con vistas a su manipulación. Existen editores y procesadores XML que podrían ser la base de nuevos entornos de programación orientados a estructura
  • 33.
    Entornos basados encombinación de herramientas
  • 34.
    Consisten en unacombinación de diversas herramientas capaces de interoperar entre ellas de alguna manera. Se denominan entornos toolkit. Presentan las siguientes características: Presentan integración débil Son un conjunto de elementos relativamente heterogéneos Son fáciles de ampliar o adaptar mediante nuevas herramientas Pueden ser construidos en parte por el propio usuario (programador): éste es más o menos el estilo UNIX original Ofrecen poco control de uso de cada herramienta El elemento frontal (front-end) para interacción con el usuario suele ser un editor configurable, con llamadas a herramientas externas. A veces estos editores configurables se designan también con las siglas IDE (que debería reservarse para el entorno completo) Ejemplos de editores configurables Emacs, Vim, Gvim Med, SciTE, jEdit Eclipse (algo más que un editor)
  • 35.
  • 36.
    Hay aplicaciones quecombinan piezas de código fuente escritas en diferentes lenguajes de programación. Algunas posibilidades de combinación son las siguientes: Entornos genéricos No se combinan lenguajes en un mismo programa. Hay varios programas, cada uno en su propio lenguaje Bastaría combinar las herramientas correspondientes a cada lenguaje (compiladores, etc.) Se podría usar un frontal común: editor personalizable que soporte los lenguajes concretos Ejemplos: Emacs (con diferentes "modos") Eclipse (con diferentes "plug-ins") Entornos específicos Para una combinación concreta de lenguajes Vienen a ser como los entornos centrados en un lenguaje, sólo que admiten más de uno Usan un formato binario compatible que permite combinar en un mismo programa partes escritas en los diferentes lenguajes
  • 37.
    Ejemplo: GPS permitecombinar módulos en Ada y C++ Lenguajes ejecutados sobre máquina virtual La máquina virtual establece el formato del código binario Pueden combinarse módulos escritos en diferentes lenguajes para los que exista el compilador apropiado Cada lenguaje puede tener su entorno de programación separado, o bien existir un entorno de programación único Ejemplos: JVM (Java Virtual Machine). El lenguaje original es Java. El intérprete es el JRE (Java Runtime Environment). Hay compiladores a JVM para otros lenguajes además de Java: Ada, Fortran, Component Pascal (Oberon), etc. (incluso C#) .Net (Microsoft). El lenguaje original es C#. El intérprete es el CLR (Common Language Runtime). Hay compiladores a .Net para otros lenguajes además de C#: Ada, Fortran, Component Pascal (Oberon), etc. (incluso Java)
  • 38.
  • 39.
    Un entorno deprogramación, tal como se ha definido anteriormente, serviría para dar soporte a las tareas de desarrollo de software realizadas por una persona. Para desarrollar proyectos de software no triviales se necesita trabajar en equipo usando las recomendaciones de la ingeniería de software. Cada miembro del equipo de desarrollo puede disponer de una estación de trabajo con un entorno de programación adecuado para realizar su trabajo individual, y se necesita además algún medio de combinar los trabajos individuales en una labor de conjunto, debidamente organizada.
  • 40.
    HERRAMIENTAS INTERNAS DEDESAARROLLO DE SISTEMAS
  • 41.
    La comunicación internaes la comunicación dirigida al cliente interno, es decir, al trabajador. Nace como respuesta a las nuevas necesidades de las compañías de motivar a su equipo humano y retener a los mejores en un entorno empresarial donde el cambio es cada vez más rápido. No olvidemos que las empresas son lo que son sus equipos humanos, por ello, motivar es mejorar resultados. Muchas empresas ignoran que para ser competitivas y enfrentarse con éxito al cambio al que nos empuja inexorablemente el mercado, han de saber motivar a su equipo humano, retener a los mejores, inculcarles una verdadera cultura corporativa para que se sientan identificados y sean fieles a la organiza- ción. Y es precisamente aquí donde la comunicación interna se convierte en una herramienta estratégica clave para dar respuesta a esas necesidades y potenciar el sentimiento de pertenencia de los empleados a la compañía para conseguir retener el talento.
  • 42.
    Para aumentar laeficacia del equipo humano, verdadero artífice de los resultados, ha de sentirse a gusto e integrado dentro de su organización, y esto solo es posible si los trabajadores están informados, conocen los diferentes entramados de la compañía, su misión, su filosofía, sus valores, su estrategia, se sienten parte de ella y, por consiguiente, están dispuestos a dar todo de sí mismos. Además, no debemos olvidar que la comunicación interna ayuda a reducir la incertidumbre y a prevenir el temido rumor, un elemento muy peligroso para las compañías. Por ello, transmitir mensajes corporativos, informar sobre lo que ocurre dentro de la empresa, motivar y establecer una línea de comunicación eficaz entre los empleados, la dirección y los diferentes departamentos de la empresa son algunos de los objetivos que persigue la comunicación interna. En cuanto a los tipos de comunicación interna, podemos hablar de dos: ascendente, que se realiza desde abajo hacia arriba en el organigrama de la empresa; y descendente, que tiene lugar desde arriba hacia abajo. A menudo, muchas empresas caen en el error de convertir su comunicación en algo unidi- reccional, donde los trabajadores son meros sujetos pasivos.
  • 43.
  • 45.
    Los miniordenadores, soncomputadores reducidos a bajo coste, ideados para potenciar la informática a sectores que no tuvieran acceso, como por ejemplo escuelas de enseñanza. Pero el bajo precio, unido a la versatilidad que ofrece su hardware, han cautivado la mirada de muchos aficionados al sector. ¿Qué hay detrás de estos “pequeños”?
  • 46.
    Poderoso y chiquitín Dereducidas dimensiones, que van desde el tamaño de una memoria USB, hasta un tablet, los miniordenadores disponen de un abanico de conexiones de salida que abren un mundo de posibilidades. La interfaz de red Ethernet, puertos USB y el HDMI, entre otros, proporcionan armas suficientes como para dar batalla en muchos propósitos. Ventajas de los Miniordenadores Calidad / Precio. La potencia del hardware que podemos obtener es realmente provechosa para un sinfín de aplicaciones. Espacio: Las dimensiones de los miniordenadores dejan en ridículo a los “gigantes” PC de sobremesa
  • 47.
    Bajo Consumo: Elgasto de electricidad oscila entre 1 y 3 Watios. Algo increíble teniendo en cuenta que el uso normal de un PC de escritorio conlleva un consumo de 100 Watios. Calentamiento. ¿De verdad crees que los miniordenadores tienen pinta de sobrecalentarse mucho con un consumo tan bajo? Contaminación acústica: Apenas se calientan, por lo que no entienden de ventiladores ni sistemas de refrigeración. Adios ruido
  • 48.
    Inconvenientes de losMiniordenadores Ampliación de Hardware. Al estar todos los componentes integrados en la placa base, las posibilidades de ampliación son prácticamente nulas. Reparación en caso de avería. La miniaturización del hardware es un obstáculo para las reparaciones de andar por casa. Dificultad en el uso. A pesar de que el software que puede instalarse es muy variado, todos los sistemas operativos suelen estar basados en Linux. Esto puede echar atrás a más de uno…por miedo a lo nuevo. Ya que en realidad hay distribuciones compatibles realmente buenas, como por ejemplo: Android, Raspbmc (centro Multimedia, Media Center), Firefox OS, Google Chrome OS, Debian Squeeze, Open webOS, etc…
  • 49.
    Usos de Miniordenadores Thincliento Internet PC. Pequeño ordenador portátil debido a su peso (gramos) y dimensiones, que conectado a un televisor nos permita navegar por internet, comprobar el correo electrónico. NAS. Almacenamiento en red de ficheros, para acceder desde otros equipos conectados en LAN Media Center. Reproductor multimedia de vídeos en HD, audio e imágenes, con reproducción en streaming de emisiones por internet.
  • 50.
    SmarTVs. Podemos convertirnuestro televisor en un SmartTV, con conexión a internet, reproductor de videos H264, DivX, Xvid, navegador de internet, etc. Emulador videjuegos Mame. Para jugar a las antiguas vídeoconsolas. Tablet TV. Tener una tablet Android con sus aplicaciones, juegos y utilidades en un televisor controlado por teclado y ratón. Radio por internet. Escuchar música en streaming. Servidor web. Alojamiento de una página web. Robótica. Integración en proyectos de ingeniería y/o electrónica. Servidor SSH. Túnel SSH, VPN OwnCloud. Nube para guardar ficheros personales. Ej.: Dropbox Servidor de descargas. Gestión de descargas de programas P2P o Torrent
  • 51.
  • 52.
    En informática unaestación de trabajo (en inglés workstation) es un computador de altas prestaciones destinado para trabajo técnico o científico. En una red de computadoras, es una computadora que facilita a los usuarios el acceso a los servidores y periféricos de la red. A diferencia de una computadora aislada, tiene una tarjeta de red y está físicamente conectada por medio de cables u otros medios no guiados con los servidores. Los componentes para servidores y estaciones de trabajo alcanzan nuevos niveles de rendimiento informático, al tiempo que ofrecen fiabilidad, compatibilidad, escalabilidad y arquitectura avanzada ideales para entornos multiproceso.
  • 53.
    Las estaciones detrabajo también corrían el mismo sistema operativo multi-usuario/multi-tarea que las microcomputadoras usaban, comúnmente Unix. También usaban redes para conectarse a computadoras más potentes para análisis de ingeniería y visualización de diseños. El bajo costo relativo a minicomputadoras y mainframes permitió una productividad total mayor a muchas compañías que usaban computadoras poderosas para el trabajo de cómputo técnico, ya que ahora cada usuario individual contaba con una máquina para tareas pequeñas y medianas, liberando así a las computadoras más grandes para los tratamientos por lotes. Las Computadoras personales, en contraste con las estaciones de trabajo, no fueron diseñadas para traer el rendimiento de la minicomputadora al escritorio de un ingeniero, sino que fueron previstas originalmente para el uso en casa o la productividad de oficina, la sensibilidad al precio fue un aspecto de consideración primaria
  • 54.
  • 55.
    Inteligencia artificial simbólicaes el nombre colectivo para todos los métodos de investigación de la inteligencia artificialque se basan en representaciones de alto nivel "simbólico" de los problemas, la lógica matemática y la búsqueda. IA simbólica fue el paradigma dominante de la investigación en IA desde mediados de los cincuenta hasta finales de los años ochenta. Después, se introdujeron enfoques sub-simbólicos más recientes a la IA, basado en redes neuronales,estadística, optimización numérica y otras técnicas. La IA simbólica se sigue aplicando en algunos dominios más pequeños (como la representación del conocimiento), pero la mayoría de las aplicaciones de IA en el siglo XXI no emplean símbolos legibles como sus objetos primarios.
  • 56.
    John Haugeland dioel nombre GOFAI (por sus siglas en inglés, Good Old-Fashioned Artificial Intelligence) a la IA simbólica en su libro de 1985 Inteligencia Artificial: La Idea Pura, que exploró las implicaciones filosóficas de la investigación de la inteligencia artificial. En robótica el término análogo es GOFAIR (por sus siglas en inglés, "Good Old-Fashioned Robotics"). Este enfoque se basa en la suposición de que muchos aspectos de la inteligencia se pueden lograr mediante la manipulación de símbolos, un supuesto definido como la "hipótesis de sistemas de símbolos físicos" por Allen Newell yHerbert A. Simon a mediados de los años 60’s La forma más exitosa de la IA simbólica son los sistemas expertos, los cuáles utilizan una red de reglas de producción. Las normas de producción conectan símbolos en una relación similar a una instrucción “Si-Entonces” (If-Then). El sistema experto procesa las reglas para hacer deducciones y determinar qué información adicional se necesita, por ejemplo, qué preguntas hacer, usando simbología legible para el ser humano.
  • 57.
  • 58.
    La computación paralelaes una forma de cómputo en la que muchas instrucciones se ejecutan simultáneamente, operando sobre el principio de que problemas grandes, a menudo se pueden dividir en unos más pequeños, que luego son resueltos simultáneamente (en paralelo). Hay varias formas diferentes de computación paralela: paralelismo a nivel de bit, paralelismo a nivel de instrucción,para lelismo de datos y paralelismo de tareas Las computadoras paralelas pueden clasificarse según el nivel de paralelismo que admite su hardware: equipos con procesadores multinúcleo y multi-procesador que tienen múltiples elementos de procesamiento dentro de una sola máquina y los clústeres, MPPS ygrids que utilizan varios equipos para trabajar en la misma tarea. Muchas veces, para acelerar tareas específicas, se utilizan arquitecturas especializadas de computación en paralelo junto a procesadores tradicionales
  • 59.
    Los programas informáticosparalelos son más difíciles de escribir que los secuenciales, porque la concurrencia introduce nuevos tipos deerrores de software, siendo las condiciones de carrera los más comunes. La comunicación y sincronización entre diferentes subtareas son algunos de los mayores obstáculos para obtener un buen rendimiento del programa paralelo. La máxima aceleración posible de un programa como resultado de la paralelización se conoce como la ley de Amdahl.
  • 60.
  • 61.
    CLIPS es unaherramienta que provee un entorno de desarrollo para la producción y ejecución de sistemas expertos. Fue creado a partir de 1984, en el Lyndon B. Johnson Space Center de la NASA. Los fondos cesaron a principios de los años 1990, y hubo un mandato de la NASA para comprar software comercial. CLIPS es un acrónimo de C Language Integrated Production System (Sistema de Producción Integrado en Lenguaje C). En la actualidad, entre los paradigmas de programación que soporta CLIPS se encuentran la Programación lógica, laProgramación imperativa y la Programación Orientada a Objetos. CLIPS probablemente es el sistema experto más ampliamente usado debido a que es rápido, eficiente y gratuito. Aunque ahora es de dominio público, aún es actualizado y mantenido por su autor original, Gary Riley
  • 62.
  • 63.
    La adquisición delconocimiento y su transferencia son los principales cuellos de botella en el desarrollo y aplicación de sistemas expertos. Los adelantos en la ingeniería del conocimiento han mejorado los cimientos teóricos y su aplicación al desarrollo de mejores metodologías y herramientas de transferencia del conocimiento. Este trabajo presenta una nueva forma para abordar este proceso en el campo de la construcción de un sistema experto para el diagnóstico de la situación de las Pequeñas y Medianas Empresas. Con una adecuada apreciación global del conocimiento disponible se presenta los conceptos y fundamentos en que se apoyan los sistemas como herramientas interactivas de la ingeniería del conocimiento, estableciendo criterios de diseño para tales sistemas; se utilizan algunas de estas metodologías aplicadas en la industria, que incluyen herramientas para la extracción de la estructura conceptual y análisis de vinculación que se han usado extensamente en el diseño rápido de sistemas de expertos industriales. También incluye herramientas para el análisis dinámico mediante la simulación continua, que ofrecen aproximaciones complementarias y alternas para la adquisición del conocimiento.
  • 64.
  • 65.
    Esta fase correspondea la adquisición del conocimiento del sistema denominado PyMe, tal y como lo afirman Giarratano y Riley, este puede ser adquirido por medios indirectos como libros, estudios realizados por sectores oficiales, tesis, diagnósticos sectoriales, etc., incluye a) Determinar las áreas críticas para el diagnóstico de las PyMes; para ello, se recaba información bibliográfica concentrándose principalmente en los estudios oficiales nacionales e internacionales que al respecto existen en la actualidad. El diseño, ejecución y análisis de la información de la investigación exploratoria se dan en tres ámbitos: el contexto donde ocurre el diagnóstico, es decir la condición exógena al sistema donde se ha analizado el estudio para ponderar cada caso
  • 66.
    particular; la segunda,referida a los conocimientos y actitudes previas de los expertos consultados como soporte directo que se haga sobre el tema, estos son profesionales dentro y fuera del mismo Centro Universitario y desde luego empresarios que han sufrido de manera directa estas dificultades; y la tercera, las posibilidades de combinación de factores de los diagnósticos anteriores, es decir de las fuentes indirectas y de las directas. b) La metodología de adquisición de conocimiento: Esta fase consiste en determinar las pautas para recolectar, procesar y sintetizar el proceso de recabo de información, se construyen matrices de causalidad donde los distintos expertos (directos e indirectos) tengan cabida con sus opiniones, también se da espacio a índices cuantitativos que avalen los conocimientos y se recurre a la convalidación de textos técnicos en cada área del conocimiento. Esta parte como se presenta en el diagrama, es el corazón de la primera etapa y posteriormente se explicará en detalle.
  • 67.
    Para el desarrollode esta metodología se siguió un proceso para cada una de las áreas críticas seleccionadas y que se presentan resumidas en la figura 5. a) Consulta de Bibliografía: ya se ha mencionado que el conocimiento de expertos queda plasmado en sus obras, en algunos casos de mejor manera que a través de sus opiniones verbales; ha sido probada esta técnica como una primera fuente de información para construir la base del conocimiento. Para ello se revisaron más de 420 referencias bibliográficas entre nacionales y extranjeras, de las cuales 38% corresponden al primer tipo y el 62% restante son extranjeras, principalmente de México y España, corroborando su pertinencia al caso Colombiano
  • 68.
    b) Pareto deCausalidad: e l diagrama de Pareto es un gráfico de barras que muestra la frecuencia relativa de hechos en orden descendente. Se conectan con una línea para mostrar la adición incremental. Una vez compilada la información proveniente de los expertos nacionales e internacionales, se homologan causas mediante la afinidad de variables. Ver figura 6 . Para ello se utiliza el diagrama de afinidad, este permite entender sistemáticamente la estructura de un problema global. Utiliza la afinidad entre partes o fragmentos de partes de datos verbales.
  • 69.
  • 70.