paradigma de linguagens de programação - clos/lisp

28
1 A Linguagem CLOS e seus Paradigmas Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Curso de Bacharelado em Ciência da Computação Integrantes: Carlos Diego Nascimento Damasceno Teófilo Augusto Bordalo de Souza Vieira

Upload: diego-damasceno

Post on 18-Dec-2014

1.515 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: paradigma de linguagens de programação - clos/lisp

1

A Linguagem CLOS e seus Paradigmas

Universidade Federal do ParáInstituto de Ciências Exatas e Naturais

Curso de Bacharelado em Ciência da Computação

Integrantes:

• Carlos Diego Nascimento Damasceno

• Teófilo Augusto Bordalo de Souza Vieira

Page 2: paradigma de linguagens de programação - clos/lisp

2

Antes de começar...

“Pascal is for building pyramids—imposing, breathtaking, static structures built by armies pushing

heavy blocks into place. Lisp is for building organisms. . . .”

Alan Perlis

“If you think a programming problem is ’impossible’, get a second opinion from a Common

Lisp programmer!”

Kent M Pitman

Page 3: paradigma de linguagens de programação - clos/lisp

3

Histórico da Linguagem

• Década de 1980

• Common Lisp: The Language (CLtL)

• Metas do Common Lisp

- Portabilidade;

- Coerência;

- Compatibilidade;

- Eficiência.

• Revisão e Ampliação do Common Lisp (8 de dezembro de 1994 - American National Standards Institute)

Page 4: paradigma de linguagens de programação - clos/lisp

4

Classes de problemas indicados para o uso

1. Inteligência Artificial (IA)

“A inteligência é o que você usa quando não sabe o que fazer.”Jean Piaget

Sabe-se, de forma genérica, que um sistema inteligente é aquele que apresenta capacidade mental para: • raciocinar;

• resolver problemas;

• armazenar conhecimento;

Page 5: paradigma de linguagens de programação - clos/lisp

5

“O ato de forçar definições para as coisas que nós não entendemos geralmente causa mais danos do que benefícios. As coisas com as quais lidamos na vida

prática são frequentemente muito complicadas para permitirem uma representação clara baseada em

expressões compactas. Em todo caso, não podemos nos privar de buscar uma definição para as coisas, no

sentido de entender o que elas são.

Marvin Minsky, The Society of Mind, 1985• Definição formal:

Inteligência Artificial (IA) é a área de pesquisa dedicada a buscar métodos ou dispositivos computacionais que possuam ou simulem a capacidade humana de resolver problemas, pensar ou, de forma ampla, ser inteligente.

1. Inteligência Artificial (IA)

Classes de problemas indicados para o uso

Page 6: paradigma de linguagens de programação - clos/lisp

6

De algum modo a criptografia contribui para resolver os problemas de:

• confidencialidade;

• integridade;

• privacidade;

• autenticação.

• Definição formal: Criptografia é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário. As técnicas mais conhecidas envolvem o conceito de chaves, as chamadas "chaves criptográficas“ (conjunto de bits baseados em um algoritmo).

2. Criptografia

Classes de problemas indicados para o uso

Page 7: paradigma de linguagens de programação - clos/lisp

7

• Crash – Desenvolvido por Naughty Dog

3. Desenvolvimento de Jogos

Classes de problemas indicados para o uso

Page 8: paradigma de linguagens de programação - clos/lisp

8

Sintaxe e semântica dos comandos principais

• CLOS - Common Lisp Object System

• Extensão do Lisp

• POO

- DEFCLASS

- MAKE-INSTANCE

- DEFMETHOD

- SLOTS

Page 9: paradigma de linguagens de programação - clos/lisp

9

Definição de uma classe

(defclass nome_da_classe* (nome_da_superclasse*)(descrição_dos_slots*)opções_da_classe*

)

nome_da_classe* -> nome referente a classe descrição_dos_slots* -> (nome_do_slot opções_do_slot*)

:initform :accessor:initarg:allocation :class:allocation :instance

opções_da_classe* -> Outras opções que podem ser passadas para a classe

Page 10: paradigma de linguagens de programação - clos/lisp

10

(defclass pessoa ()((nome :accessor pessoa-name

:initform nil :initarg :nome)

(idade :accessor pessoa-idade :initform nil :initarg :idade)

(total-equipe :accessor quant-p:initform 0:initarg :tot-equipe:allocation :class)))

Definição de uma classe

Page 11: paradigma de linguagens de programação - clos/lisp

11

Herança

(defclass webdesigner (pessoa)((linguagem :accessor program-lang

:initform nil:initarg :prog-lang)

(total-wd :accessor quant-wd:initform 0:initarg :tot-wd:allocation :class))

)

Page 12: paradigma de linguagens de programação - clos/lisp

12

Estrutura de um make-instance

(make-instance nome_da_classe* {valores dos initarg}*)

nome_da_classe* → Nome da classe que se deseja criar{valores dos initarg}* → Argumentos de incialização

Page 13: paradigma de linguagens de programação - clos/lisp

13

1) A instância é criada com base nos :initarg's;2) Os initargs passados para o make-instance são validados;3) Alocam-se os espaços para a instância e criam-se instâncias livres;4) Inicializam-se os slots que tenham :initform;5) Inicializam-se os slots que foram passados :initarg's.

Exemplo: (make-instance 'pessoa :nome 'fulano :idade 99) (make-instance 'webdesigner :nome 'fulanow :idade 98 :prog-lang 'html)

Processo de Instanciação

Page 14: paradigma de linguagens de programação - clos/lisp

14

Combinação de método

(defmethod cria-pessoa ((p pessoa)) (print " Nome:")

(setf (slot-value p 'nome) (read-line))

(print " Idade:")(setf (slot-value p 'idade) (read-line))

)

(defmethod cria-pessoa :around ((p pessoa))(print "-------------------------")(call-next-method)

)

(defmethod cria-pessoa :before ((p pessoa))(write-sentence p)

)

Page 15: paradigma de linguagens de programação - clos/lisp

15

Interpretadores e IDE’s

1. Cusp

Page 16: paradigma de linguagens de programação - clos/lisp

16

Interpretadores e IDE’s

2. LispStudio

Page 17: paradigma de linguagens de programação - clos/lisp

17

Interpretadores e IDE’s

3. GNU CLISP

Page 18: paradigma de linguagens de programação - clos/lisp

18

Exemplo de Referência

Page 19: paradigma de linguagens de programação - clos/lisp

19

Exemplo Original

Page 20: paradigma de linguagens de programação - clos/lisp

20

Análise Crítica sobre a linguagem

• Linguagem pode ser usada para várias finalidades

• Legibilidade de expressões s-expression

• Conhecer LISP

• Paradigma OO & Funcional

• Material disponível em Inglês

Page 21: paradigma de linguagens de programação - clos/lisp

21

Conteúdo disponível na WEB

1. #LISP – irc.freenode.net

Page 22: paradigma de linguagens de programação - clos/lisp

22

Conteúdo disponível na WEB

2. http://www.cliki.net/

Page 23: paradigma de linguagens de programação - clos/lisp

23

Conteúdo disponível na WEB

3. http://cl-cookbook.sourceforge.net/

Page 24: paradigma de linguagens de programação - clos/lisp

24

KEENE, Sonja. Object-Oriented Programming in Common LispAddison-Wesley

Conteúdo disponível na WEB

3. E-Books

Page 25: paradigma de linguagens de programação - clos/lisp

25

SEIBEL, Peter. Practical Common LispApress

Conteúdo disponível na WEB

3. E-Books

Page 26: paradigma de linguagens de programação - clos/lisp

26

Massachusetts Institute of Technology. Lisp 1.5 Programmer's ManualMassachusetts Institute of Technology

Conteúdo disponível na WEB

3. E-Books

Page 27: paradigma de linguagens de programação - clos/lisp

27

TOURETZKY, David S. Common LISP : A Gentle Introduction to Symbolic Computation

The Benjamin/Cummings Publishing Company, inc.

Conteúdo disponível na WEB

3. E-Books

Page 28: paradigma de linguagens de programação - clos/lisp

28

OBRIGADO!

Fim