Advanced Functional Programming is an optional course made available for 5th year students of the following degrees:
5309?? - Licenciatura em Engenharia de Sistemas e Informática
7009?? - Licenciatura em Matemática e Ciências da Computação
Course Staff
(Alphabetically ordered by surname) J.C. Bacelar, J.B. Barros, M.A. Cunha, J.N. Oliveira J.S. Pinto, J.A. Saraiva (course leader), Joost Visser,
Structure of the Course
The course is organised into two parts:
A set of seminars introducing relevant topics to be covered. This seminars will be primarily given by the students. Some more advanced material, however, can/will be presented by the course lecturers or by guests visiting the department.
In the second, more substantial part of the course, students will develop a project (see List of Projects Available).
Number of students: Minimum 5, maximum 10.
Assessment
The following three items will be taken into account for student evaluation:
A - Background lecture
The students will deliver a short lecture (20m) introducing one of the topics covered in the course.
B - Brief Project/Tool Presentation
The different groups will give a lecture (30m) presenting the project they have chosen for development and the tool(s) that will be used in this task.
C - Project Presentation and Report
Each group will give a lecture presenting the project.
The final mark is computed according to the formula:
Week 1 (2004.10.06): kick off: definition of topics and projects
Week 2 (2004.10.13): meetings with supervisors
Week 3 (2004.10.17): talk by Simon Thompson
When/Where: Oct 20nd, 3pm, room DI-A1
Title: Refactoring Functional Programs
Abstract: Refactoring is about improving the design of existing computer programs and systems; as such it is familiar to every programmer, software engineer and designer. Its key characteristic is the focus on structural change, strictly separated from changes in functionality. A structural change can make a program simpler, by removing duplicate code, say, or can be the preparatory step for an upgrade or extension of a system. It is characteristic of refactorings that they are 'diffuse' and 'bureaucratic': consider the example of the simplest possible refactoring: renaming a component of a program. To effect this change requires not only the component definition to be changed, but also every use of the component must be similiarly modified. This involves changing every file/module which might use the component, potentially tens or hundreds of modules. Moreover, it is equally vital not to change any components hidden in other parts of the system which happen to share the same name. Of course, it is possible to do refactorings 'by hand', but this process is tedious and, more importantly, error-prone. Automated support for refactorings makes them safe and easy to perform and also secure in their implementation. The 'Refactoring Functional Programs' project comprising Huiqing Li, Claus Reinke and Simon Thompson is building the HaRe system to support refactorings for Haskell programs. HaRe is designed as a serious tool for use by practising programmers: HaRe supports the whole of the Haskell; it is integrated into standard development environments and it preserves the 'look and feel' of refactored programs. HaRe is built using a number of existing libraries: 'Programatica' provides tools on which to build the language-analysis components, and 'Strafunski' gives general support for tree transformations.
Week 4 (2003.10.24): students project presentations (item B)
Week 5 (2004.11.31): talk by Joost Visser
When/Where: Oct 28, 16:00-18:00, room DI-1.04
Title: Strafunski: a Haskell-centered bundle for generic programming and language processing
Abstract: Strafunski is a bundle of a combinator library and various generative tools that support key tasks in language processing: parser generation and traversal. The traversal support is based on the notion of functional strategies: generic functions that can traverse into terms of any type while mixing type-specific and uniform behaviour. The parsing support is involves connectivity to the Generalized LR parser SGLR. Finally, an enhanced version of DrIFT ensures that traversal and parsing support can easily be deployed for (extremely) large languages such as Java or Cobol. The following will be covered in the talk:
Essentials of Strafunski: concepts and architecture, relationship to GHC's Data.Generics.
Hands-on session of strategic programming with Strafunski.
Week 8 (2003.11.24): Tutorials by Doaitse Swierstra
When/Where: Nov 23, 14:00-16:00, room Sala de Reuniões
Title: Linear, Online, Functional Pretty Printing
Abstract: We present an implementation of Oppen's Pretty printing solution in Haskell. The algorithm is linear in the size of the input, independent of the line width, uses limited look ahead, and has online behaviour.
Title: Parsing permutation phrases
Abstract: A permutation phrase is a sequence of elements (possibly of different types) in which each element occurs exactly once and the order is irrelevant. Some of the permutable elements may be optional. We show how to extend a parser combinator library with support for parsing such free-order constructs. A user of the library can easily write parsers for permutation phrases and does not need to care about checking and reordering the recognized elements. Applications include the generation of parsers for attributes of XML tags and Haskell's record syntax.
Week 9 (2003.12.01):
Luís Pedro Machado presents the project: Embedding Disambiguation Rules in the HaGLR System
meetings with supervisors
Week 10 (2003.12.08): J.M.Valença
Monadic Strategies - the teachers allocation problem
Notas da época de recurso disponibilizadas nesta página
-- JorgeSousaPinto - 04 Mar 2006
Notas da época normal disponibilizadas nesta página
-- JorgeSousaPinto - 07 Feb 2006
Disponíveis nesta página:
Notas do TP
Slides relativos ao 3o. capítulo da matéria (Problemas NP-completos)
-- JorgeSousaPinto - 15 Dec 2005
Disponíveis nesta página os slides relativos ao primeiro capítulo da matéria (Análise de Algoritmos) e um conjunto de enunciados de exercícios sobre este tema.
-- JorgeSousaPinto - 19 Nov 2005
Disponível nesta página o enunciado do trabalho prático
-- JorgeSousaPinto - 29 Oct 2005
Já disponíveies os slides relativos ao primeiro capítulo da matéria (Grafos)
-- JorgeSousaPinto - 26 Sep 2005
Introdução à Análise de Algoritmos Casos de Estudo:
Algoritmos de Ordenação
Algoritmos de Grafos
Problemas NP-completos
[P] Estruturas de Dados Fundamentais: Questões de Eficiência na Pesquisa; Árvores AVL e Tabelas de “Hash”; sua Realização na Linguagem C;
Programa Detalhado
Grafos: Conceitos e Algoritmos Fundamentais
Grafos: conceitos básicos e representação em memória de computador
Algoritmos elementares: pesquisas (em largura e em profundidade)
Algoritmos para determinação de árvores geradoras mínimas
Algoritmos para determinação de caminhos mais curtos
Estratégias algorítmicas: algoritmos "greedy''
Algoritmos para determinação do fecho transitivo de um grafo
Introdução à Análise de Algoritmos Casos de Estudo:
Algoritmos de Ordenação
Algoritmos de Grafos
Problemas NP-completos
[P] Estruturas de Dados Fundamentais: Questões de Eficiência na Pesquisa; Árvores AVL e Tabelas de “Hash”; sua Realização na Linguagem C;
Bibliografia
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms. MIT Press, Cambridge,Mass., second edition, 2001.
Robert L. Kruse, Bruce P. Leung, and Clovis L. Tondo. Data Structures and Program Design in C. Prentice Hall, second edition, 1997.
Donald E. Knuth. The Art of Computer Programming : (1) Fundamental Algorithms, (2) Seminumerical Algorithms, (3) Sorting and Searching. Addison/Wesley, third edition, 1997/98. 3 volumes.
Notas da época de recurso disponibilizadas nesta página
-- JorgeSousaPinto - 04 Mar 2006
Notas da época normal disponibilizadas nesta página
-- JorgeSousaPinto - 07 Feb 2006
Disponíveis nesta página:
Notas do TP
Slides relativos ao 3o. capítulo da matéria (Problemas NP-completos)
-- JorgeSousaPinto - 15 Dec 2005
Disponíveis nesta página os slides relativos ao primeiro capítulo da matéria (Análise de Algoritmos) e um conjunto de enunciados de exercícios sobre este tema.
-- JorgeSousaPinto - 19 Nov 2005
Disponível nesta página o enunciado do trabalho prático
-- JorgeSousaPinto - 29 Oct 2005
Já disponíveies os slides relativos ao primeiro capítulo da matéria (Grafos)
-- JorgeSousaPinto - 26 Sep 2005
The first edition of the Attack On The Clones project was a project carried out in the context of Opção 3 of LESI.
Status: finished
Project description
Create a Clone Detection Portal. Clones are duplicate pieces of software that generally result from copy-paste techniques in programming. Clones can differ slightly, for instance in the names of variables or in the exact order of statements and declarations. A pragmatic technique for detecting clones is to compute metrics over the code, and compare the metrics. If the metrics for two pieces are (almost) identical, they are clones. In this project you will create a web site where one can (i) upload Java source code to be subjected to metric-based clone detection, and (ii) inspect the detection results.
Team
Project description
The project is based on the detection of similar source code in Java source code files. One of the major reasons why clones occur is code reuse by copying a pre-existing program fragment. Code clones are one of the factors that degrade the structure of the software and lower the software quality. If one changes a code clone, he/she must also update all other copies and that can raise the maintenance cost. It is also useful to know wich parts of different source codes are clones to each other.
The result of the project is the next step of the 1. edition of the clone detection portal. Because the 1. edition was designed for testing only two Java projects in one "detection", this was changed and now the portal supports the submition of more projects. Therefore the way of metrics extraction had to be changed; metrics are extracted from each project directly after the submition. The time needed to calculate metrics remains the same as in the previous version-can increase drastically when computing large projects source code. Because it is very useful to know which parts of a project are similar to other ones-contain similar source code, the option of comparing the project to itself was added also. The problem of finding out if duplicated source code is spread out over a single project shouldn't be one anymore. After the metrics have been computed, the detection of clones can be initialised either by comparing projects metrics (overlap of projects metrics and overlap of class comparison between two projects) and/or by a line-by-line comparison with the later also supporting a graphical representation of the cloned lines. When detecting clones, both ways should be taken in account. For validation purposes different editions of the JJTraveler tool and some students projects were used.
Team
ChopaChops: view and manipulate Java program graphs
Powered by Chocapic!Student: Patrick Machado
In this project you will develop an interactive tool to view and
manipulate various kinds of graphical representations of Java
programs. Your starting point is an initial version of the tool
(called ChopaChops) that can already:
a. parse Java
b. derive inheritance, import, and nesting relations
c. display these relations in a graph
d. perform slicing and chopping on this graph
Starting from this basis, you can make improvements such as:
e. derive data flow and control flow relations
f. compute some graph-based program metrics
g. support more graph manipulations
h. improve the interactive interface
You will be using and extending functionality offered by the UMinho
Haskell Libraries to accomplish these tasks.
ChopaChops is a project for slicing and chopping in program graphs. Starting from the Java program source code, this tool can generate graphs with relation information.
Objectives
Work already done - PackageGraphs
On the moment I took the project, much work was already done.
ChopaChops could already do things like:
Java parsing to an haskell abstract syntax tree
Creation of Package Graphs, which contains class-based relations like:
Imports
Inheritance
Implementation
Nesting
Visualization of these relations in a graph
Metrics on graphs
Implementation of slicing and chopping on the graphs
My Extension - Call Graphs
Starting from the work done, I extended the libraries, adding some method-based relations:
Method invocation
Method nesting in classes
Call Graphs in haskell
-- | Call Graphs are labeled relations
type CallGraph
= LRel CGNode CGNode CGEdgeType
-- | A node may be either a Class or a Method
data CGNode = CGClass ClassName
| CGMethod ClassName MethodName [ParameterType]
...
-- | Function to create a CallGraph for an AST
java2ccg :: (Term a, MonadPlus m)
=> CGNode -- Current node
-> Declarations -- Declarations context
-> a -- Term to convert to Call Graph
-> m CallGraph
-- | Function to convert a Call Graph to dot format, ready to feed the GraphViz tool
cg2dot :: String -> CallGraph -> String
Declarations Environment
I provide a basic API for Declarations manipulation
Here is an extract of it:
emptyDec :: Declarations
appendDec :: Declarations -> Declarations -> Declarations
addGlobalDec :: Declarations -> (ClassName, MemberName) -> TypeName -> Declarations
...
-- | General funcion for getting a variable's/member's type
getType :: (MonadPlus m) => Declarations -> ClassName -> MemberName -> m TypeName
-- | Generic function to collect global variable declarations, providing the AST
collectMembers :: (Term a, MonadPlus m) => ClassName -> a -> m Declarations
Type Inference System
To determine which classes were getting method invocations, it was necessary to buid a type inference system.
To accomplish that task I used strafunsky to do generic AST traversals.
So, I came up wit a function called findTypeOf which has the flollowing type signature:
findTypeOf :: (Term a, MonadPlus m) => Declarations -> ClassName -> a -> m TypeName
This function (tries) to find out the type of any entity, provided it is an instance of Term. We have to provide the environment (Declarations) and the class name on wich we are trying to find the type of an entity.
The Tool - ChopaChopsOnline
ChopaChopsOnline is a tool, developed with WASH, wich interfaces the developed librarires with the user. Basicaly, it is a web , wich can be run from a Web Server.
The user, with this tool, can perform operations like:
Upload zip archives, containing Java source files (all other filetypes are simply discarded)
Visualize both Package and Call Graphs
Visualize some graph metrics such as:
Tree impurity
Level count (strongly connected components)
Non singleton levels
Size of the largest level
...
Perform slicing and chopping on these graphs (Package and Call graphs), given the sources and sinks sets
Web interface:
Chopping:
Example
Class Foo:
Class Bar:
Callgraph:
Future Work
Although much progress has been done regarding program slicing, I must state that this project is far from being a complete approach to Java Program Slicing.
So, there is still much work to do in the future, to extend this tool.
I will enumerate some ways to evolve, although there may be others:
Extend the type inference system to support more types
Compute more graph metrics
Continue to move to lower level relations:
Data flow
Control
Problems
Hard to understand big graphs (real world java programs)
Type inference system not fully implemented
Not working with compiled classes
Does not handle some java features
Inheritance / Implementation
Static methods
Exception handling
Conclusion
Nice progresses towards full program slicing in Java
At the moment there is no support for many Java features
Aula 1 -- 23 de Fevereiro Não houve aula. Motivo: Simpósio doutoral do DI.Aula 2 -- 2 de Março Apresentação da disciplina. Apresentação do trabalho prático 1.Aula 3 -- 9 de Março E-learning. Apresentação do conceito e análise de alguns documentos sobre o tema.Aula 4 -- 16 de Março Open Source Software. Apresentação do conceito e análise de alguns documentos sobre o tema.Aula 5 -- 23 de Março Introdução ao Latex. Apresentação de exemplos.Aula 6 -- 30 de Março Realização do trabalho prático 1.Aula 7 -- 6 de Abril Introdução ao UML. Diagramas de casos de uso.Realização do trabalho prático 1.Aula 8 -- 20 de Abril Não houve aula. Motivo: doença.Aula 9 -- 27 de Abril Apresentação oral do trabalho nº 1.Aula 10 -- 4 de Maio UML: Diagramas de actividade e diagramas de transição de estados. Resolução de exercícios.Aula 11 -- 11 de Maio UML: Diagramas de classes. Resolução de exercícios.Aula 12 -- 18 de Maio Não há aula. Motivo: Enterro da Gata.Aula 13 -- 25 de Maio UML: Resolução de exercícios.Aula 14 -- 1 de Junho Apresentação oral do trabalho nº 2.
Aula 1 -- 23 de Fevereiro Não houve aula. Motivo: Simpósio doutoral do DI.Aula 2 -- 2 de Março Apresentação da disciplina. Apresentação do trabalho prático 1.Aula 3 -- 9 de Março E-learning. Apresentação do conceito e análise de alguns documentos sobre o tema.Aula 4 -- 16 de Março Open Source Software. Apresentação do conceito e análise de alguns documentos sobre o tema.Aula 5 -- 23 de Março Introdução ao Latex. Apresentação de exemplos.Aula 6 -- 30 de Março Realização do trabalho prático 1.Aula 7 -- 6 de Abril Introdução ao UML. Diagramas de casos de uso.Realização do trabalho prático 1.Aula 8 -- 20 de Abril Não houve aula. Motivo: doença.Aula 9 -- 27 de Abril Apresentação oral do trabalho nº 1.Aula 10 -- 4 de Maio UML: Diagramas de actividade e diagramas de transição de estados. Resolução de exercícios.Aula 11 -- 11 de Maio UML: Diagramas de classes. Resolução de exercícios.Aula 12 -- 18 de Maio Não há aula. Motivo: Enterro da Gata.Aula 13 -- 25 de Maio UML: Resolução de exercícios.Aula 14 -- 1 de Junho Apresentação oral do trabalho nº 2.
Desenvolvimento de Sistemas de Informação
Licenciatura em Administração Pública 3º Ano - 2º Semestre Ano lectivo 2005/2006
Embedding Disambiguation Rules in the HaGLR System
Student: Luís Pedro Machado
In this project we will embed a domain specific language to express
disambiguation rules in the HaGLR system: A Generalised LR parser
generator. Such disambiguation rules "work" very much like precedence
and priority rules used by YACC-like systems. Traditional techniques
use a language processor for processing the disambiguation "language"
and, then, combine them with the parser (either buy applying such
rules at parse time , or by applying them as a filter over the
resulting set of abstract syntax trees).
The UMinho Haskell Libraries already provide support for:
a. Generalised LR parsing. The HaGLR system is a GLR parser generator.
b. Parsing SDF grammars, that includes a large set of real programming language grammars defintions.
c. The construction and visualization of the resulting XML parse trees.
You will define a language to express disambiguation rules (based on
exiting ones). Then you will implement a function that given a
sentence of that langauge (ie, a set of rules) and the resulting parse
forest and it selects the right tree(s).
Recomended Literature
Disambiguation Filters for Scannerless Generalized LR Parsers, M.G.J. van den Brand, J. Scheerder, J.J. Vinju, and E. Visser, 2002
Pure Functional Parsing, Peter Ljunglof, 2002
Parser Generation for Interactive Environments, J. Rekers, 1992
T (2006.10.21a): Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação-implementação. Objectivos e programa da disciplina; sua integração no plano curricular do curso.
T (2006.10.21b): Introdução à modelação de sistemas computacionais em VDM-SL. Tipos e invariantes. Especificação de operações. Estudo de um caso.
T (2006.11.04a): Conclusão da aula anterior. Apresentação da ferramenta VDMTools.
T (2006.11.04b): A linguagem de especificação VDM-SL: expressão de propriedades em lógica de 1a ordem. Problemas de definição.
T (2006.11.11a e 11b): Não houve aula.
T (2006.12.9a): A linguagem de especificação VDM-SL: modelação de problemas com conjuntos e sequências. Polimorfismo e ordem superior (exemplos). Especificação ímplicita vs explícita. Funções vs operações.
Exemplo: cálculo da raíz quadrada (especificação disponível aqui).
T (2006.12.9b): A linguagem de especificação VDM-SL: modelação de problemas com correspondências. O caso do sistema de gestão de contas bancárias.
Especificação funcional (BAMS) e orientada ao estado (SBAMS).
T (2006.12.16a): Aula laboratorial em VDMTools.
T (2006.12.16b): Aula laboratorial em VDMTools.
T (2007.01.20a): Estudo de caso em modelação VDM: multiconjuntos.
T (2007.01.20b): Discussão dos projectos individuais de modelação.
T (2007.01.27a): Estudo de caso em modelação VDM: o espaço de endereçamento web.
T (2007.01.27b): Acompanhamento dos projectos individuais de modelação.
-- LuisSoaresBarbosa - 27 Jan 2007
Especificação e Desenvolvimento Formal de Software
Nota: sujeito a marcação prévia (verbal ou por email) com o docente.
Programa Resumido
Introdução ao problema do controlo de qualidade em `software' . Especificação formal -- porquê e para quê? Introdução aos binómio especificação /implementação.
Ciclo de vida do software usando métodos formais. Redução do risco e dos custos. Áreas típicas de aplicação. Sistemas críticos e confiáveis. Qualidade de serviços.
Linguagens e métodos para especificação formal. Antecendentes históricos. Do método de Viena (VDM) ao `standard' ISO/IEC 13817-1 (VDM-SL).
Estudo da notação VDM-SL. Modelação por conjuntos, sequências e funções finitas. Especificação por pré/pós-condições. Invariantes. Obrigações de prova.
Prototipagem e animação. Experiência com a utilização do ambiente VDMTOOLS.
Especificação por modelos orientada aos objectos. Estudo de VDM++.
Critérios de Avaliação
Projecto individual ou exame final de acordo com o regulamento aplicável. A opção por um projecto está dependente
da concordância do docente. Os temas deverão ser propostos pelos alunos.
Acetatos e Textos de Apoio
T (2006.10.21a): Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação-implementação. Objectivos e programa da disciplina; sua integração no plano curricular do curso.
T (2006.10.21b): Introdução à modelação de sistemas computacionais em VDM-SL. Tipos e invariantes. Especificação de operações. Estudo de um caso.
T (2006.11.04a): Conclusão da aula anterior. Apresentação da ferramenta VDMTools.
T (2006.11.04b): A linguagem de especificação VDM-SL: expressão de propriedades em lógica de 1a ordem. Problemas de definição.
T (2006.11.11a e 11b): Não houve aula.
T (2006.12.9a): A linguagem de especificação VDM-SL: modelação de problemas com conjuntos e sequências. Polimorfismo e ordem superior (exemplos). Especificação ímplicita vs explícita. Funções vs operações.
Exemplo: cálculo da raíz quadrada (especificação disponível aqui).
T (2006.12.9b): A linguagem de especificação VDM-SL: modelação de problemas com correspondências. O caso do sistema de gestão de contas bancárias.
Especificação funcional (BAMS) e orientada ao estado (SBAMS).
T (2006.12.16a): Aula laboratorial em VDMTools.
T (2006.12.16b): Aula laboratorial em VDMTools.
T (2007.01.20a): Estudo de caso em modelação VDM: multiconjuntos.
T (2007.01.20b): Discussão dos projectos individuais de modelação.
T (2007.01.27a): Estudo de caso em modelação VDM: o espaço de endereçamento web.
T (2007.01.27b): Acompanhamento dos projectos individuais de modelação.
-- LuisSoaresBarbosa - 27 Jan 2007
Feb. 17, 2004
May 14, 2004 is the deadline for submission to CoLogNet / Formal Methods Europe Symposium on Teaching Formal Methods 2004Feb 6, 2004
Students interested in the Overture Project please contact to JNO. (NB: the Overture Modelling Language has great resemblance with
VDM++)
Jan 31, 2004
Novas propostas para estágios curriculares em EstagiosProfisionaisJanuary 29, 2004
Invitation to Wiki.
January 21, 2004
We have a new Wiki server for educational purposes!
18 Out Já saíram as notas do exame da época especial.
27 Jul Já saíram as notas das orais.
22 Jul Já saíram as notas do exame de recurso. As orais serão no dia 27 às 10h00.
11 Jul Já saíram as notas finais da época normal.
5 Jul Quem quiser entregar o projecto prático deverá fazê-lo até ao dia 8 de Julho.
5 Jul As notas da 2a chamada já saíram.
28 Jun As notas da 1a chamada já saíram. As orais serão no dia 7 Julho às 10h00.
5 Abr O enunciado do projecto prático pode ser consultado aqui.
9 Mar Os exemplos das aulas práticas já estão disponíveis para download.
7 Mar A ferramenta DaNAMiCS já está disponível para download.
Elementos Lógicos da Programação 3
Licenciatura em Matemática e Ciências da Computação 3º Ano - 2º Semestre Ano lectivo 2004-2005
Petri Nets for Systems Engineering: A Guide to Modeling, Verification, and Applications, Claude Girault and Rüdiger Valk (editors). Springer-Verlag 2003.
Elements of Distributed Algorithms: modeling and analysis with petri nets, Wolfgang Reisig. Springer-Verlag 1998.
Model Checking, Edmund M. Clarke Jr., Orna Grumberg, and Doron A. Peled. MIT Press 2001.
Elements of Distributed Algorithms: modeling and analysis with petri nets; Wolfgang Reisig. Springer-Verlag 1998.
Model Checking; Edmund M. Clarke Jr., Orna Grumberg, and Doron A. Peled. MIT Press 2001.
Elementos de Estudo
16/04 Uma nova versão do Animador que já suporta redes coloridas (Net2.tgz)
05/04 Nova verão dos módulos do Animador que fazem uso de multi-parameter type classes para permitir um maior nível de abstracção. (Net.tgz) --- Obs.: Para executar estes módulos devem-se passar as seguintes opções ao GHC:"-fglasgow-exts -fallow-undecidable-instances".
05/04 Versões simplificadas do animador de redes de Petri apresentado na teórica:
Versão I - Não define novas classes; utiliza o transformador de estados da biblioteca. (RPetri.hs)
Versão II - Evita a utilização do monad de estado. (RPetri2.hs)
05/04 Várias resoluções para os exercícios da aula sobre o Monad de Estado:
Versão I - Monad definido explicitamente (como foi apresentado na aula prática). (StateEx1.hs)
Versão II - Usando a biblioteca standard. (StateEx2.hs)
Nota final é calculada com base nas seguintes componentes:
Componente Teórica (Exame) - OBRIGATÓRIA - peso nunca inferior a 60% (nota mínima de 8 valores). Componente Prática - FACULTATIVA - com peso máximo de 30%.
A componente prática consiste na realização de um projecto.
18 Out Já saíram as notas do exame da época especial.
27 Jul Já saíram as notas das orais.
22 Jul Já saíram as notas do exame de recurso. As orais serão no dia 27 às 10h00.
11 Jul Já saíram as notas finais da época normal.
5 Jul Quem quiser entregar o projecto prático deverá fazê-lo até ao dia 8 de Julho.
5 Jul As notas da 2a chamada já saíram.
28 Jun As notas da 1a chamada já saíram. As orais serão no dia 7 Julho às 10h00.
5 Abr O enunciado do projecto prático pode ser consultado aqui.
9 Mar Os exemplos das aulas práticas já estão disponíveis para download.
7 Mar A ferramenta DaNAMiCS já está disponível para download.
Pretende-se que modele e analise os dois problemas seguintes usando redes de petri e a ferramenta de model checking SMV. Na modelação deve começar por usar uma rede colorida e depois fazer a seu expansão para uma rede normal. Nesta operação pode começar por usar capacidades e arcos inibidores, que depois deverão ser eliminados usando as regras de transformação já ensinadas. Para cada problema são enumeradas algumas propriedades que devem ser verificadas pela solução apresentada. Sempre que possível devem ser demonstradas usando técnicas estruturais (como invariantes de lugar), mas também usando model checking. Para tal terão que ser traduzidas em fórmulas CTL equivalentes. Sempre que desejarem, podem enriquecer a especificação adicionando novas características ao modelo ou novas propriedades para verificar. Naturalmente, tal será valorizado na nota final.
O projecto é facultativo. Deverá ser realizado em grupos com o máximo de dois alunos. A apresentação será em data a combinar, devendo na mesma ser entregue um pequeno relatório com a descrição das tarefas realizadas.
ATENÇÃO: esta página será alterada consoante a necessidade de clarificar o enunciado.
Sistema de Transporte
Pretende-se modelar um sistema de transporte de uma linha de produção. Esta é constítuida por uma série de mesas, existindo um braço robotizado entre cada par de mesas. O braço robotizado pode estar em três posições diferentes (A, B e C), podendo mover-se para a esquerda ou para a direita. Também possui uma garra que lhe permtite apanhar uma peça numa mesa e transportá-la para a seguinte. Considere também que existe um produtor que coloca as peças na primeira mesa e um consumidor que as retira da última.
Algumas das propriedades que a sistema modelado deve verificar são:
Cada mesa pode conter no máximo uma peça.
Não deve possível colocar uma peça na mesa i se o robot i está na posição A.
Nomeadamente, nunca deve ser possível o robot i estar na posição C e o robot i+1 na posição A.
Os motores de deslocamento para a esquerda e para a direita não podem estar activos simultaneamente.
Qualquer peça que seja colocada na primeira mesa deve eventualmente chegar à última.
Não existem deadlocks.
Exclusão Mútua Distribuída
Pretende-se implementar um algoritmo de exclusão mútua distribuído, ou seja sem nenhum controlador centralizado. O mesmo será baseado no conceito token ring. As diversas unidades funcionais estão ligadas através de um anel de comunicação onde circula uma marca. Sempre que uma unidade pretende entrar na zona crítica deverá retirar esta marca do anel, devendo a mesma ser propagada para a unidade seguinte quando não for necessária. A seguinte imagem apresenta um esquema da rede de petri que modela este problema, para o caso em que temos três unidades funcionais, estando uma delas detalhada.
Cada unidade é constituída por dois módulos:
O primeiro, cuja rede se encontra detalhada, representa o componente que pretende usar o recurso crítico. Tem três estados possíveis: Idle, quando está a realizar tarefas que não envolvem o recurso crítico; Waiting, quando está à espera de usar o recurso crítico; e Critical, quando está na zona de exclusão mútua.
O segundo é o controlador que irá implementar o protocolo, e cuja especificação é o objectivo deste projecto.
A comunicação entre os dois componentes é feita assincronamente usando os lugares Req (request), Prm (permission), e Rdy (ready). O primeiro é usado para sinalizar a vontade de usar o recurso crítico. O segundo é usado pelo controlador para dar autorização ao outro componente para entrar na zona crítica, e o último serve para este indicar que já terminou a utilização do recurso crítico. O controlador também tem acesso ao anel onde circula a marca. Sempre que deseje, pode retirar a mesma da sua porta de entrada (Tok) ou transferi-la para a unidade funcional que lhe sucede no anel.
Algumas das propriedades que a solução deve verificar são:
Não existem duas unidades simultaneamente na zona crítica.
Não existem deadlocks.
Nunca existe mais do que uma marca a circular no anel.
Qualquer unidade que pretenda utilizar o recurso crítico poderá eventualmente fazê-lo.
Uma unidade não poderá utilizar o recurso crítico duas vezes seguidas se outra unidade também o pretender utilizar.
A marca não deve circular desnecessariamente pelo anel. Só o deverá fazer se alguma unidade requisitar o acesso à zona crítica.
Para poder satisfazer esta última propriedade poderá ser necessário adicionar um segundo anel de comunicação (com sentido inverso) onde circulam pedidos para libertar a marca.
Location: Vrije Universiteit or CWI in Amsterdam, The Netherlands.
In many areas of computing, languages play a central role. Programming languages, data definition languages, scripting languages, mark-up-languages, query languages, etc. Unfortunately, it is common practise in software engineering to apply mostly ad-hoc techniques when dealing with language syntaxes. Grammar Engineering seeks to remedy this situation by regarding grammars as valueable software artifacts, and applying good engineering practises to their development, deployment, and maintenance.
In this project you will implement a tool-suite for Grammar Engineering. The tool-suite will include (i) support for grammar reconstruction from language reference manuals, (ii) a combinator library for reshaping grammars, and (iii) support for generating parsers, XML shema's, transformation libraries, and
other software components from grammars. Your tool-suite will use the Syntax Definition Formalism (SDF) as internal representation format. To design your tool-suite you will take inspiration from published work and previously developed prototypes.
The implementation of this tool-suite will normally require some technology that it is fit to implement all of the above components while this technology
should then also benefit from the provided components. Here are some options:
A Haskell-centric approach with combinator parsing.
An ASF+SDF Meta-Environment approach with its SGLR parsing technology.
General-purpose programming languages and main-stream parser generators like ANTLR.
For example, in the Haskell scenario, the tool-suite is implemented in Haskell and it would
be useful for the Haskell programmer. That is, the tool-suite would then help with deploying
Haskell-based parsers, XML components and others while processing SDF grammars as input.
See also: the Grammar Ware page.
Supervisors: Ralf Laemmel (VU & CWI, The Netherlands), JoostVisser (UMinho)
Benchmarking Generic Programs
Location: Vrije Universiteit or CWI in Amsterdam, The Netherlands.
Generic Programming encompasses programming techniques that allow the construction of programs that work for just about any kind of data type. Examples of generic programming solutions are Strafunski, traversal functions in ASF+SDF, Generic Haskell, Polytypic Programming, and visitor combinators.
In this project you will perform thorough benchmarking of various generic programming approaches, and investigate some options for improving the efficiency of generic programs. To this end, you will develop a benchmark suite of generic programming problems, and corresponding solutions for each approach under scrutiny. You will investigate both time and space consumption by the various approaches. You will publish your benchmark suite and the results of running it on the internet, such that in future others can take advantage of it when comparing and evaluating generic programming approaches in future.
Supervisors: Ralf Laemmel (VU & CWI, The Netherlands), JoostVisser (UMinho)
This project consists of creating a Haskell binding to AT&T's GraphViz library. This involves using a Foreign Function Interface (FFI) to invoke the C functions of the GraphViz library from within Haskell. To simplify the task of writing this FFI invocations, a tool named GreenCard is beeing used. Next, an abstraction layer is introduced to hide all the miscelaneous procedures of GraphViz and to provide a simple, but powerfull interface to the Haskell application.
With a minimal binding it's possible to replace the graph visualization support in the HaLex library (generating DOT) by invocations to the foreign functions specified. Also, new instances are declared of the types witch one wants to visualize. HaLex is an instance, since UMinho's Haskell Libraries uses GraphViz widely. This is of course a incremental work and hopefully in the end one could visualize and interact with data.
Implementation
To be updated soon... need to sleep... (Knock, Knock.... wake up.... :)) (Who's there?) (That's me! :))
Greencard
Graphviz
Core
Attribute
Graphable
Layoyt
Render
UI
Future Work
Download
Checkout module Graphics.Graphviz from Research.PURe CVS repository.
PUReSoftware
An open graph visualization system and its applications to software engineering, Emden R. Gansner and Stephen C. North, Software - Practice and Experience, 1999.
Drawing graphs with Graphviz, Emden R. Gansner, 2004.
The Haskell 98 Foreign Function Interface 1.0: An Addendum to the Haskell 98 Report, Manuel Chakravarty (ed.), 2002,2003.
fornecida por todos
Sobre as ideias básicas de Criptografia (exigindo um pouco de Matemática) um livro importante é o Applied Cryptography de Bruce Schneier.
-- JoseManuelValenca - 08 Mar 2005
Sobre o Liberalismo Político e a Teoria da Justiça consultar o tratado fundamental de John Rawls ou a versão comentada de Jacques Bidet.
-- JoseManuelValenca - 08 Mar 2005
1 de Março início das aulas
-- JoseManuelValenca8 de Março devido à minha presença num júri não é possível dar a aula deste dia; nesta semana funciona só o turno de 4ª feira.
-- JoseManuelValenca22 e 23 de Março devido a uma reunião em Lisboa não posso dar aulas esta semana.
-- JoseManuelValenca21 de Abril foi criada a primeira página de ensaios que pode servir de exemplo para outras páginas.
-- JoseManuelValenca13 de Junho atenção aos critérios de avaliação dos trabalhos; está definida a escala de classificação na gama D .. A
-- JoseManuelValenca30 de Junho tendo em atenção que dificilmente se conseguirá fazer todas as apresentações nos dias 8 e 9 de Julho, continuaremos essas apresentações no dia 14 às 9:00 horas
-- JoseManuelValenca5 de Julho atendendo ao elevado número de possíveis apresentações (cerca de 90) não é logisticamente possível realiza-las como estava acordado. Por isso é necessário alterar as condições de apresentação como se indica nesta página. Ficam sem efeito as datas de apresentação de 8, 9 de Julho; as apresentações serão efectuadas numa dada a combinar com cada um dos alunos interessados.
-- JoseManuelValenca
Componente pratica: dois a cinco ensaios em cada um dos temas de estudo com as seguintes características:
Trabalho de grupo de 2/3 pessoas, versando a análise, levantamento de informação e bibliografia sobre um caso/exemplo referido nas aulas,
limitados a 2000 palavras excluindo bibliografia,
possibilidade (sorteada) de apresentação oral.
O peso relativo das duas componentes da avaliação depende do número de ensaios; o peso da componente pratica é 40% para 2 ensaios, 50% para 3 ensaios, 60% para 4 ensaios e 100% para 5 ensaios.
A avaliação de cada trabalho é feita tendo em atenção 3 parâmetros: FOCUS (a clareza na concretização de um problema ou questão ética), CONTEÚDO (a precisão e relevância dos factos referidos ou das fontes citadas) e POSIÇÂO (a clareza e justificação da posição ética assimida).
Os alunos com avaliação exclusivamente efectuada por trabalhos praticos podem, se assim entenderem e para efeitos de melhoria de nota, apresentar um dos trabalhos que, para o efeito, será seleccionado pelo docente da disciplina.
Os trabalhos são enviados em formato PDF, anexos a uma mensagem de correio electrónico enviada ao docente da disciplina. O endereçp de envio tem de ser o endereço institucional do aluno e o assunto deve conter a string "Informática Jurídica" e o número (ou números) do trabalho submetido.
Ensaios de Ana Ferreira, Alexandra Cruz e Michelle Pinto
A Avaliação de cada trabalho é feita numa escala de D (insatisfatório), C ou C+ (satisfatório), B ou B+ (bom), A, A+, A++ (muito bom, ...)
-- JoseManuelValenca - 11 Jun 2005
Este também é um trabalho expositivo mas está melhor focado e dá alguma informação. Avalio-o como B
-- JoseManuelValenca - 11 Jun 2005
Este também é um trabalho expositivo mas está melhor focado e dá alguma informação. Avalio-o como B
-- JoseManuelValenca - 11 Jun 2005
Este tema só perifericamente toca os objectivos deste curso; a exposição também está um pouco confusa; podia ser melhorado.
-- JoseManuelValenca - 12 Jun 2005
O tema tratatado, apesar de importante, está apresentado nos aspectos que pouco intersectam os objectivos deste curso
-- JoseManuelValenca - 12 Jun 2005
-- JoseManuelValenca - 12 May 2005
-
ATÉ QUE PONTO SERÁ FIÁVEL E RECOMENDÁVEL O RECURSO A ESTA FERRAMENTA?
Trabalho de opinião, bem focado. Não me parece que apresente um argumento suficiente para inviabilizar a escritura electrónica, nem percebo como o factor "tempo" pode influenciar qualquer dos argumentos.
-- JoseManuelValenca - 10 Jun 2005
Trabalho é expositivo mas está razoalvelmente completo. As questões tecnicas do voto são complexas mas alguma coisa poderia ter sido dito.
-- JoseManuelValenca - 10 Jun 2005
A noção de "direito electrónico" parece-me mais adequadamente apresentado na perspectiva das relações que se estabelecem na Sociedade da Informação. O trabalho está interessante e revela esforço.
-- JoseManuelValenca - 10 Jun 2005
-
-- JoseManuelValenca - 18 May 2005
Este trabalho fala dos direitos de propriedade de autor mas, apesar de refeir à divulgação de obras na internet, não me parece que os analise na especificidade deste meio
-- JoseManuelValenca - 11 Jun 2005
bom trabalho mas podia ser mais completo já que não considera casos em que o interesse público tenha precedência sobre o interesse privado
-- JoseManuelValenca - 11 Jun 2005
bom trabalho mas podia ter alguma informação concreta sob a forma de resolver algumas das dificuldades levantadas por este tipo de votação
-- JoseManuelValenca - 11 Jun 2005
uma alegoria da ubiquidade da sociedade da informação mas não é uma análise apropriada da noção de vida virtual pelo menos da forma como ele é aceite nas comunidades da TI's
-- JoseManuelValenca - 11 Jun 2005
-- JoseManuelValenca - 27 May 2005
Bom trabalho apresentando uma visão bastante interessante da noção juridica de documento electronico. Contém porém algumas incorrecções tecnicas
-- JoseManuelValenca - 12 Jun 2005
-
-- JoseManuelValenca - 27 Apr 2005
A Democracia nos dedos dos Cidadãos.
-
Este trabalho é muito extenso (não respeitou os limites indicados) e repete muito do conteúdo da página da UMIC sobre o veoto electrónico. Não é muito original.
-- JoseManuelValenca - 13 Jun 2005
Outros trabalhos
Biometria: mais uma vez o trabalho é extremamente longo e reproduz a informação sobre este tema fornecida pela CNPD
-- JoseManuelValenca - 13 Jun 2005
-- JoseManuelValenca - 28 Apr 2005
Nesta primeira sessão pretende-se familiarizar os alunos com o ambiente de programação que será utilizado nesta unidade curricular. Admite-se que os alunos já dispõem de algum tipo de contacto com a utilização de computadores.
Login e Apresentação do Sistema MacOSX
Após a introdução do login e da password (o docente informará qual é...) o computador exibe
um écran como o apresentado:
A barra no topo do écran - o menu - diz respeito à aplicação activa e contém funcionalidades dessa aplicação (tais como abrir um novo ficheiro, gravar, etc).
Na parte inferior do écran existe a barra de ferramentas que disponibiliza o acesso rápido a algumas aplicações (inicia aplicação com um click; arrastando um ficheiro sobre o icon: inicia a aplicação abrindo imediatamente o ficheiro em causa).
Na barra de ferramentas encontramos (entre outras) as aplicações:
O Finder é a aplicação responsável por manter a sessão do utilizador. O seu aspecto mais visível é a interacção com o sistema de ficheiros. Por seu intermédio podemos aceder/manipular a informação contida no disco (ficheiros, directorias, etc.).
O Terminal é a aplicação que permite interagir, em modo de comando, com o sistema operativo MacOSX (o sistema Unix da Apple). A sua utilização requer portanto o conhecimento de alguns comandos desse sistema, tornando-se menos intuitiva do que a manipulação da interface gráfica do sistema. É no entanto muito mais flexível e permite-nos realizar operações não acessíveis pela interface gráfica.
O Safari é um browser WWW. Permite consultar páginas Web (e.g. a página da disciplina).
O Trash permite remover ficheiros/directorias, arrastando o que se pretende remover para cima do icon.
O Finder
Esta aplicação permite interagir de uma forma visual com o sistema de ficheiros. Algumas
das operações básicas que se podem fazer são acessíveis na barra superior no item File.
Podemos abrir uma nova janela de visualização ou criar uma nova directoria. Note-se que esta directoria será uma sub-directoria da que estamos neste momento a visualizar (se não estiver nenhuma janela do Finder aberta, será criada como uma sub-directoria da Desktop que contém os elementos visíveis no fundo do écran).
Note a existência de uma directoria com icon representando uma casa, que se refere à sua directoria base (Home). A própria Desktop é uma sub-directoria dessa.
Tarefa 1 - Crie na sua Home uma directoria chamada Aula1.
O Terminal
Através do Terminal também podemos interagir, de uma forma textual, com o sistema de ficheiros. Podemos por exemplo listar o conteúdo de uma directoria (ls), remover um ficheiro (rm), visualizar o conteúdo de um ficheiro (cat) ou mover/mudar o nome de um ficheiro (mv).
Podemos além disso efectuar toda uma série de acções, incluindo o início de programas.
Tarefa 2 - Inicie o Terminal e usando o comando cd (change directory) vá para a directoria Aula1 criada atras. Use ainda o comando ls -la para visualizar o conteúdo dessa directoria. Note que o comando cd, quando usado sem argumentos, o posiciona na sua Home.
Vamos agora usar um editor de texto para criar um ficheiro. Nesta primeira fase vamos usar o editor vi, comum a todos os sistemas Unix.
Quando estamos a usar o vi podemos estar em dois modos de funcionamento:
modo comando é o modo inicial e podemos invocar comandos: (a, i, e o) servem para passar a modo inserção; :s guarda as alterações efectuadas; (:q, :x e ZZ) terminam a execução do vi.
modo inserção onde podemos inserir o texto. Para voltar ao modo de comando devemos usar a tecla "Esc".
Emacs
Um outro editor de texto muito utilizado em sistemas Unix é o Emacs. Tal como fizemos para o vi, vamos aqui descrever a utilização mais rudimentar deste editor de texto. Este programa pode ser encontrado na directoria Applications e tem como icon um gnu.
Para abrir um determinado ficheiro usa-se o comando "CTRL-x CTRL-f". Alternativamente, podemos usar o item File da barra superior do ecran. Aqui, uma das opções é abrir um ficheiro (Open File) ou uma nova janela (New). No final da edição devemos guardar o ficheiro editado, usando Save ou Save As, dependendo se o ficheiro já existia ou não.
Tarefa 3: Crie na directoria Aula1 um ficheiro com nome Grupo.txt, com a identificação dos membros do grupo (número e nome). Utilize para o efeito um dos editores de texto referidos atrás (Emacs ou vi).
LaTeX
Para produzir relatórios e outros documentos, vamos utilizar o sistema LaTeX. Este "processador de texto" distingue-se de outros (como o MS Word, do Windows) por promover a separação entre conteúdo e apresentação. Assim, o processo de criação de um documento passa pelas seguintes fases:
o utilizador utiliza um qualquer editor de texto para criar um ficheiro com a informação que irá dar origem ao documento (com a extensão .tex, por exemplo teste.tex)
executa-se o comando pdflatex que processará o documento resultando um ficheiro em formato PDF (Portable Document Format) (seguindo com o exemplo, executando pdflatex teste.tex produziria o ficheiro teste.pdf).
No Mac, está disponível o TexShop - uma aplicação que contém o editor de texto próprio e que facilita a utilização do LaTeX (produzir o documento resume-se a primir no botão typeset).
Naturalmente que o ficheiro .tex que contém a informação para o documento deve adoptar um formato específico. De facto, para além do conteúdo que queremos ver no documento final, teremos de dar indicações ao LaTeX que lho permita produzir o resultado pretendido (qual o título, o autor, quais a várias secções, etc.). Comecemos então por ver um exemplo de um tal ficheiro:
\documentclass[12pt]{article}
\usepackage[portuges]{babel}
\usepackage[mac]{inputenc}
\begin{document}
\title{Um Documento de Exemplo}
\author{Eu}
\date{\today}
\maketitle
\section{Primeira Secção}
Isto é o texto que aparece na primeira secção...
\section{Segunda Secção}
Isto já é a segunda secção. Agora vou referir:
\begin{itemize}
\item Um ponto...
\item Outro ponto...
\end{itemize}
\end{document}
Uma breve explicação do conteúdo apresentado:
Quando uma palavra é precedida pelo carácter \, é um comando para o LaTeX. Os argumentos para estes comando (quando existem) são envolvidos em chavetas.
As linhas até ao \begin{document} são designadas por preâmbulo. Este inicia-se obrigatoriamente com o comando \documentclass que serve para indicar ao LaTeX qual o estilo de documento adoptado (neste caso article, mas existem também book, letter, etc.). Os restantes comandos utilizados no preâmbulo destinam-se a preparar o LaTeX para lidar com os caracteres acentuados presentes no Português.
O conteúdo do documento encontra-se entre as linhas \begin{document} e \end{document} (o que designamos por o ambientedocument).
O comando \maketitle visualiza o título do documento (com a informação previamente registada pelos comandos \title, \author e \date).
O comando \section marca o início de uma secção (como argumento aceita o título da secção)
O ambiente itemize permite enumerar vários pontos (cada um deles é precedido pelo comando \item).
Após o processamento descrito, obteríamos o seguinte documento:
Obviamente que a explicação aqui apresentada é muito incompleta, e o exemplo não ilustra minimamente as enorme potencialidades do LaTeX para produzir documentos de elevada qualidade gráfica. Recomenda-se vivamente a leitura do
pequeno livro Uma não tão pequena introdução ao LaTeX2e.
Tarefa 4: Crie o ficheiro teste.tex com o conteúdo acima apresentado, compile-o (comando pdflatex teste.tex) e visualize-o (comando open teste.pdf, ou com um duplo click no Finder).
Mini-projecto individual
Instale no seu computador pessoal uma distribuição apropriada do LaTeX (veja, na secção "links úteis" da página da disciplina, diferentes alternativas de distribuições para os vários sistemas operativos).
Acompanhe a leitura de "Uma não tão pequena introdução ao LaTeX2e" com experimentações na sua instalação do LaTeX (no sub-título desse livro, lê-se que bastam 137 minutos para a sua leitura. O que podemos afirmar é que vale definitivamente a pena, mesmo que demore um pouco mais...).
Produza um documento contendo o seu curriculum vitae (identificação pessoal, escolas onde obteve os vários graus de ensino, hobbies, etc.)
Envie por email o documento produzido para o (seu) docente da disciplina.
Nesta sessão pretende-se tomar conhecimento com conceitos básicos da linguagem Haskell, nomeadamente:
expressões e sua avaliação,
tipos básicos,
tipos estruturados,
utilização do interpretador ghci e do compilador ghc.
ghci: um interpretador da linguagem Haskell
Ao longo deste curso iremos utilizar o interpretador ghci para executar programas escritos na linguagem Haskell. Este interpretador pode ser invocado a partir do Terminal:
Verificamos então que o ghci avalia as expressões introduzidas apresentando o respectivo resultado. Mesmo sem conhecermos ainda todas as funções apresentadas, podemos desde logo observar que o Haskell não se limita a avaliar expressões numéricas --- na realidade, é capaz de processar dados de natureza muito diversa (diferentes tipos de dados) como números inteiros, decimais, valores de verdade (booleanos), caracteres, sequências, etc. Por outro lado verificamos que dispõe já do conhecimento de algumas funções pré-definidas (como sin, odd, etc.). Estas funções (e muitas outras, naturalmente) estão definidas na biblioteca básica da linguagem, a que se dá o nome de Prelude. Daí o prefixo "=Prelude>=" apresentado no ghci: informa-nos que ele (só) tem carregadas as definições dessa biblioteca. (obs.: biblioteca, em programação, consiste num conjunto de definições disponibilizadas para serem (re)utilizadas pelos programadores.)
Execução de Comandos: para além de avaliar expressões, é-nos também possível executar comandos que controlam o comportamento do ghci (como carregar um ficheiro com definições de novas funções, solicitar informação de tipos, etc.). Os comandos mais utilizados serão:
:l (fich) - carrega ficheiro (fich),
:t (expr) - interroga o interpretador sobre o tipo de (expr),
:b (mod) - visualiza o conjunto de definições de (mod),
:? - comando de ajuda que fornece uma breve explicação dos comandos disponíveis
:q - sai do interpretador
De referir é ainda a integração existente entre o ghci/haskell e o Emacs. De facto, este último dispõe de um modo de edição próprio para a linguagem Haskell, activado automáticamente quando é carregado um ficheiro com extensão .hs, que constitui uma mais valia quando editamos programas nessa linguagem (disponibiliza indentação automática, coloração do texto, etc.).
Tarefa 1 - Verifique qual é o tipo das expressões apresentadas acima.
Tipos básicos e estruturados
O Haskell é uma linguagem fortemente tipada - com isto quer-se dizer que o Haskell força a que todas as expressões da linguagem possuam um tipo.
A linguagem oferece o seguinte conjunto de tipos básicos:
Bool - Booleanos: True e False
Char - Caracteres: 'a', 'x', 'R', '7', '\n', ...
Int - Inteiros de tamanho limitado: 1, -4, 23467, ...
Integer - Inteiros de tamanho ilimitado: 36, 37829938847736292938338283
Float - Números de vírgula flutuante: 3.5, -45.3, 3e-2, ...
Double - Números de vírgula flutuante com precisão dupla
() - Unit: ()
Para além dos tipos básicos, o Haskell disponibiliza formas de construir novos tipos a partir de outros existentes.
produto cartesiano - (a1, a2) :: (t1, t2) - um par cuja primeira componente a1 é do tipo t1 e a segunda componente a2 é do tipo t2. O produto cartesiano generaliza-se par n-tuplos (i.e. (a1, ..., an) :: (t1, ..., tn),
listas - [a1,a2, ..., an] :: [t] - uma lista (sequência) constituída pelos elementos a1, a2, ..., an, todos do tipo t,
funçõesf :: t1 -> t2 - f é uma função que espera um argumento de tipo t1 e cujo resultado é do tipo t2.
Para além dos tipos apresentados, o utilizador pode ainda definir novos tipos (assunto que retomaremos numa próxima sessão).
Tarefa 2:
Verifique o tipo das funções utilizadas nas expressões apresentadas acima (e.g. odd, sin, ...)
Porque é que o Haskell não aceita as seguintes expressões:
3 + 'A'
[1,True]
not (0)
not not
Tarefa 3:
* Teste as definições por compreensão apresentadas na aula teórico prática de Programação Funcional da semana anterior disponível aqui.
Definição de funções
A principa tarefa de um programador na linguagem Haskell consiste na definição de funções que realizem as tarefas pretendidas. As funções são definidas por intermédio de regras de cálculo. A título de exemplo, temos
eZero :: Int -> Bool
eZero x = if x==0 then True else False
Por vezes é conveniente (ou mesmo necessário) separar a definição da função em várias cláusulas. Por exemplo, a mesma função podia ser também ser definida como:
As funções podem ainda possuir mais do que um argumento. Considere:
maior :: Int -> Int -> Int
maior x y = if x>y then x else y
Esta função determina o maior de dois inteiros passados como argumento (e.g. (maior 9 3) resulta em 9).
Note que as definição das funções não deve ser realizada directamente no ghci - devem antes ser definidas num ficheiro (com extensão .hs) que será depois carregado no ghci (comando :l).
Tarefa 4: Defina funções que:
dados dois números inteiros retorne um par onde a primeira componente é o menor número e a segunda o maior,
dado o comprimento dos dois lados catetos de um triângulo retorne o comprimento da hipotenusa.
dado o raio do círculo, retorne o perímetro e a área desse círculo.
Módulos
Um programa em Haskell é formado por um conjunto de módulos. Cada módulo contém um conjunto de definições (declarações de tipos, de funções, de classes, ...) que podem ser utilizados internamente, ou exportados para serem utilizados noutros módulos. Um módulo Haskell é armazenado num ficheiro com extensão .hs, .hs, em que representa o nome do módulo, como declarado na primeira linha do ficheiro. Por exemplo, o ficheiro Teste.hs deverá começar com a declaração seguinte:
module Teste where
...
Para utilizar definições contidas num outro módulo é necessário referencia-lo explicitamente. Este tipo de ligação entre módulos estabelece-se utilizando uma declaração import. Como exemplo, vejamos como podemos ter acesso às funções de manipulação de caracteres e strings (listas
de caracteres) disponíveis no módulo Char.
module Main where
import Char
main = putStrLn ("Isto é o resultado de executar a função "++[toLower x | x <- "MAIN..."])
Uma excepção a esta regra é o módulo Prelude, que constitui a base da linguagem Haskell, e cujas definições estão disponíveis por omissão.
Compilador
Também é possível produzir uma aplicação (ficheiro executável) a partir de um ficheiro em Haskell. Para tal deve-se utilizar o compiladorghc.
O módulo a compilar deve conter a função main, que corresponde ao "ponto de entrada" da aplicação (ou seja, essa função será avaliada quando executarmos o programa). A título de de exemplo, para compilar e executar o programa apresentado atrás, devíamos proceder da seguinte forma:
$ ghc -o teste Main.hs
$ ./teste
Isto é o resultado de executar a função main...
$ _
Tarefa 5:
Compile o programa apresentado e execute-o.
Crie um módulo com as funções definidas atrás (tarefa 3) e modifique o módulo Main para utilizar uma dessas funções.
A recursividade é um recurso fundamental para codificar funções não triviais numa linguagem funcional. A ideia básica consiste em permitir-se codificar uma função com recurso a ela própria, desde que com argumentos mais simples. O exemplo sempre citado é a definição da função factorial: n! = n * (n-1) * ... * 1. Observando que (n-1)!=(n-1) *...*1, verificamos que podemos definir n!=n*(n-1)! para n>0 (em que 0!=1). Em haskell poderiamos então definir:
fact :: Int -> Int
fact 0 = 1
fact n = n * (fact (n-1))
Observe que o argumento da invocação recursiva é estritamente menor do que o parâmetro da função - é por este motivo que o cálculo da função termina. De facto, para o cálculo de (fact 3), o interpretador realiza as seguintes reduções:
Um outro domínio onde a recursividade surge naturalmente é ao realizar funções sobre listas (sequências). Aí, a forma mais natural de definirmos uma função consiste em explicitar qual o resultado para o caso da lista vazia [], e para o caso da lista não vazia (x:xs). Neste último caso, podemos invocar a própria função recursivamente na cauda xs porque esta é necessariamente mais pequena do que lista original. Um exemplo clássico é a função que calcula o comprimento:
len :: [a] -> Int
len [] = 0
len (x:xs) = 1 + (len xs)
Tarefa 1: Defina as seguintes funções que:
dado a e b determine a^b (sem utilizar a operação de exponenciação ^).
dado uma lista de inteiros, conte o número de zeros contidos nessa lista.
dado uma lista de inteiros, calcule o seu somatório.
dado uma lista e um elemento, verifique se esse elemento está contido na lista.
Sinónimos de tipos
O tipos pré-definidos do Haskell são suficientemente poderosos para representarem uma grande variedade de dados. A título de exemplo, considere que se pretende representar e manipular a informação relativa a alunos de um curso e as suas respectivas notas. Assim, para cada aluno pretende-se registar: o número, o nome, e a nota. Essa informação pode ser representada no tipo (Int, String, Float). Para representar a informação de todos os alunos do curso, utilizamos uma lista desse tipo.
Em casos como este, é útil fazer uso da possibilidade oferecida pelo haskell em atribuir sinómimos de tipos (declaração type) - podemos dessa forma atribuir um nome mais informativo ao tipo em questão. Uma função que verifique se o aluno está aprovado pode ficar codificada como:
Nas funções realizadas na última tarefa da sessão anterior é bem patente que algumas delas partilham um mesmo padrão: um exemplo será o cálculo das listas dos alunos aprovados e reprovados - em ambos os casos "filtramos" da lista original os elementos que satisfazem um dado critério. O facto de o Haskell permitir manipular funções como quaisqueres outros valores (e.g. podemos passar funções como argumentos para outras funções) permite-nos criar funções que abstraiam esses padrões comuns. Continuando com o exemplo da lista de aprovados/reprovados, podemos utilizar função pré-definida
filter :: (a->Bool) -> [a] -> [a]
que filtra todos os elementos de uma lista que satisfassam um dado predicado. As funções ficariam então:
Obs.: (not . verifAprov) é a composição de ambas as funções: not após verifAprov.
Outras funções pré-definidas no Prelude que correspondem a padrões repediamente encontrados são:
map::(a->b)->[a]->[b], (map f l) aplica a função f a cada elemento de l retornando a lista de resultados. Exemplo: map verifAprov listaAlunos retorna [True, False, True].
zip::[a]->[b]->[(a,b)], (zip l1 l2) associa os elementos das listas l1 e l2 produzindo uma lista de pares. Exemplo: (zip [1,2,3] ['A','B','C']) retorna [(1,'A'),(2,'B'),(3,'C')].
unzip::[(a,b)]->([a],[b]), (unzip l) separa uma lista de pares duas listas, cada uma contendo cada uma das componentes. Exemplo: (unzip [(1,'A'),(2,'B'),(3,'C')]) retorna ([1,2,3],['A','B','C'])
...
Tarefa 1: Pode fazer uso de alguma(s) destas funções nas funcionalidades pedidas na sessão anterior? Experimente...
Utilização das bibliotecas
Já se referiu que a biblioteca do Haskell dispõe de um vasto conjunto de funções úteis (algumas já tem vindo a ser referidas, muitas outras o serão ao longo do semestre...). A forma última de se conhecer a oferta existente, e de obter informação para a sua utilização consiste em consultar a documentação existente. Para a tarefa que se segue pretende-se utilizar algumas funções dos seguintes módulos (para além das já referidas...):
Tarefa 2: Pretende-se realizar um programa que realize um histograma com a frequência das palavras que ocorrem nesse texto. Assim, o resultado de avaliar
hist "Um texto com palavras... um, com, palavras, palavras, dois,dois"
23/02/2007: Já disponíveis as notas da época de recurso.
19/02/2007: O exame de recurso será realizado na 4ª-feira, às 14:30 no DI0.11. O exame incluirá as componentes de Maple e Haskell. Quem desejar realizar esse exame, deve enviar um email a um docente da disciplina.
19/02/2007: Estão disponíveis as notas finais da disciplina (época normal).
13/02/2007: Já estão disponíveis as notas dos testes de Maple de todos os turnos.
07/02/2007: Foram publicadas as notas dos testes de Maple, com excepção dos alunos que realizaram o teste no dia 5 de Janeiro. Em princípio, no início da próxima semana serão publicadas as notas finais. Os alunos que reprovarem à disciplina poderão requerer um teste de recurso, que será realizado no dia 21 de Fevereiro à tarde.
21/12/2006: EXAMES de MAPLE Os exames de Maple para os turnos de sexta-feira, realizam-se em 4 sessões de 1 hora no dia 5 de Janeiro 2007. Cada sessão admite 13 slots . A inscrição nesses slots realiza-se a partir do dia 3 de Janeiro na recepção do DI.
02/12/2006: Já é possível realizar a inscrição para a apresentação dos trabalhos práticos (na recepção do departamento).
22/11/2006: Já estão disponíveis as instruções para submissão do trabalho prático.
26/10/2006: Já está disponível o enunciado do primeiro trabalho prático.
28/09/2006: Início das aulas.
Acompanhamento dos Projectos: Quartas, 11-13 h, Sala DI 0.04.
SemináriosPURe: Terças, 11-13, Sala de Reuniões do DI.
Objectivos
A disciplina é orientada ao projecto em engenharia de software no contexto das abordagens formais à especificação e desenvolvimento de sistemas. Assim, visa-se
Desenvolver competências específicas no projecto e implementação de sistemas envolvendo diversas plataformas de suporte e requisitos não triviais
Desenvolver um conjunto de `soft-skills' essenciais a qualquer técnico de informática dos dias de hoje: gestão de projecto, organização, comunicação e trabalho colaborativo.
Aprofundar o contacto com ferramentas de suporte ao desenvolvimento formal de software
Oferecer uma iniciação à investigação científica através da integração dos alunos em equipas de projectos de investigação em curso no Grupo de Lógica e Métodos Formais do DI.
Em 2004-05, em particular, os alunos que escolherem esta Opção são convidados a integrar a equipa do projecto PURe e a participar nos correspondentes
seminários de investigação. A apresentação final dos projectos a realizar será igualmente feita no âmbito deste projecto.
Programa Resumido
Estudo e desenvolvimento de técnicas de análise de requisitos e experiência em interface/ coabitação de ferramentas de apoio ao uso de métodos formais (à escala industrial) com as tecnologias tradicionais. Casos de estudo - projectos propostos no contexto do Projecto PURe (FCT):
PURe Camila: re-engenharia do sistema de prototipagem Camila e sua re-implementação sobre Haskell
Métodos e ferremantas para slicing sobre especificações VDM
ProjectosCritérios de Avaliação
Tratando-se de uma disciplina eminentemente práticai, é adoptado o regime de avaliação contínua (sem provas escritas) que terá em conta as seguintes componentes:
Capacidade de organização e gestão de projectos de software
Capacidade de interligação de conhecimentos obtidos ao longo do curso na realização de um projecto de engenharia de software.
23/02/2007: Já disponíveis as notas da época de recurso.
19/02/2007: O exame de recurso será realizado na 4ª-feira, às 14:30 no DI0.11. O exame incluirá as componentes de Maple e Haskell. Quem desejar realizar esse exame, deve enviar um email a um docente da disciplina.
19/02/2007: Estão disponíveis as notas finais da disciplina (época normal).
13/02/2007: Já estão disponíveis as notas dos testes de Maple de todos os turnos.
07/02/2007: Foram publicadas as notas dos testes de Maple, com excepção dos alunos que realizaram o teste no dia 5 de Janeiro. Em princípio, no início da próxima semana serão publicadas as notas finais. Os alunos que reprovarem à disciplina poderão requerer um teste de recurso, que será realizado no dia 21 de Fevereiro à tarde.
21/12/2006: EXAMES de MAPLE Os exames de Maple para os turnos de sexta-feira, realizam-se em 4 sessões de 1 hora no dia 5 de Janeiro 2007. Cada sessão admite 13 slots . A inscrição nesses slots realiza-se a partir do dia 3 de Janeiro na recepção do DI.
02/12/2006: Já é possível realizar a inscrição para a apresentação dos trabalhos práticos (na recepção do departamento).
22/11/2006: Já estão disponíveis as instruções para submissão do trabalho prático.
26/10/2006: Já está disponível o enunciado do primeiro trabalho prático.
28/09/2006: Início das aulas.
Na actual estrutura da Licenciatura em Engenharia Informática, esta é a primeira de uma série de unidades curriculares designadas por Laboratórios de Informática. Como o seu próprio nome sugere, estas unidades curriculares agregam as componentes laboratoriais (de informática) das várias temáticas leccionadas no semestre.
Nesta primeira instância, concentrar-nos-emos nos seguintes tópicos:
Prática de programação na linguagem Haskell.
Utilização do LaTeX na elaboração de relatórios e outros documentos.
Exploração de um sistema de manipulação simbólica (Mapple) como ferramenta na resolução de problemas de engenharia.
Instruções para submissão: O trabalho deverá ser entregue AQUI. O grupo deve registar-se nesse site para poder submeter o trabalho. IMPORTANTE: o sistema só aceitará trabalhos até às 24:00 do dia 26/11/2006 (note que o prazo já foi alargado para permitir que o processo de submissão seja feito atempada e tranquilamente. Não arrisque a deixar a entrega para os últimos instantes...).
Apresentação: Os grupos deverão inscrever-se na recepção do departamento (piso 0) para realizar a apresentação do trabalho prático.
T (2004.09.23): Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação-implementação. Objectivos e programa da disciplina; sua integração no plano curricular do curso.
TP (2004.09.22): Apresentação: marcação de turnos.
TP (2004.09.22): Apresentação: marcação de turnos.
T (2004.09.30): Motivação para a especificação relacional. Introdução ao Cálculo Relacional. Operadores básicos e propriedades.
TP (2004.09.29): Apresentação do VDMTools. Resolução do problema 02 do guião das sessões de laboratório(Modelling with Sequences).
TP (2004.09.30): Apresentação do VDMTools. Resolução do problema 02 do guião das sessões de laboratório (Modelling with Sequences).
T (2004.10.07): Cálculo Relacional: Lei modular; técnicas de prova; exemplos.
TP (2004.10.06): Resolução do problema 03 dos guiões (Modelling with Sets).
TP (2004.10.07): Resolução do problema 03 dos guiões (Modelling with Sets).
T (2004.10.14): Dispensa de aulas concedida pelo Senhor ReitorTP (2004.10.13): Resolução do problema 06 dos guiões (Modelling with Mappings).
TP (2004.10.14): Resolução do problema 06 dos guiões (Modelling with Mappings).
T (2004.10.21): Raciocínio com funções: regras de shunting; especialização de leis. Conexões de Galois: motivação, definição e exemplos. Propriedades básicas associadas a uma conexão de Galois. Prova da preservação de supremos (infimos) pelo adjunto inferior (superior).
TP (2004.10.20): Resolução do problema 07 dos guiões (Multisets "are" Mappings).
TP (2004.10.21): Resolução do problema 07 dos guiões (Multisets "are" Mappings).
T (2004.10.28): Continuação da aula anterior: análise de diversos exemplos de conexões de Galois e derivação de propriedades.
Noção de either e split relacionais.
TP (2004.10.27): Resolução da Ficha 1 (Cálculo Relacional).
TP (2004.10.28): Resolução da Ficha 1 (Cálculo Relacional).
T (2004.11.04): Faltou o docente (por deslocação em serviço). Em substituição foi dada uma aula TP a cargo da Prof. Olga Pacheco.
TP (2004.11.03): Resolução da Ficha 2 (Cálculo Relacional).Resolução do problema 04 dos guiões (Datatype Invariants).
TP (2004.11.04): Resolução da Ficha 2 (Cálculo Relacional).Resolução do problema 04 dos guiões (Datatype Invariants).
T (2004.11.11): Semântica relacional da meta-linguagem de VDM. Definição recursiva de relações. Noção de
hilomorfismo relacional. Incursão na semântica das definições recursivas. Teorema de Knaster-Tarski.
TP (2004.11.10): Faltou a docente (deslocação em serviço).
TP (2004.11.11): Faltou a docente (deslocação em serviço).
T (2004.11.18): Faltou o docente (deslocação em serviço).
Esta aula será reposta no dia 14 Dez (terça-feira) pelas 14.30 h.
TP (2004.11.17): Faltou a docente. (Aula de substituição).
TP (2004.11.18): Faltou a docente. (Aula de substituição).
T (2004.11.25): Cálculo de pontos fixos. Leis básicas e exemplos. Aplicação ao cálculo de hilomorfismos relacionais.
TP (2004.11.24): Resolução da Ficha 3 (Conexões de Galois).Resolução do problema 09 dos guiões (A Toy Production Database model).
TP (2004.11.25): Resolução da Ficha 3 (Conexões de Galois).Resolução do problema 09 dos guiões (A Toy Production Database model).
T (2004.12.02): Propriedades dos hilomorfismos relacionais. Aplicação ao estudo dos tipos colectivos (não indutivos) de VDM (conjuntos e corresponências).
TP (2004.12.01): Feriado Nacional.
TP (2004.12.02): Resolução da Ficha 4 (Conexões de Galois). Continuação da resolução do problema 09 dos guiões.
T (2004.12.09): Relação de acessibilidade e pertença em tipos de dados. Factorização em equações-hilo. Condições para a existência
de soluções únicas. Aplicações.
TP (2004.12.08): Feriado Nacional.
TP (2004.12.09): (Aulas de dúvidas)
T (2004.12.14): (Reposição aula de 18 Nov) Discussão de exercícios de aplicação.
T (2004.12.16): Conclusão da disciplina. Preenchimento do questionário de avaliação.
TP (2004.12.15): (Aulas de dúvidas)
TP (2004.12.16): (Aulas de dúvidas)
-- LuisSoaresBarbosa - 21 Sep 2004
T (2005.02.21): Apresentação da Disciplina. Noção de refinamento.
TP (2005.02.22, 2005.02.24): Apresentação e marcação de turnos. Generalização das construções básicas das funções para as relações (do functor para o relator). A unidade nas relações. O produto de relações. Derivação de algumas das leis referidas como exercício de utilização do cálculo relacional.
T (2005.02.28): JOIN'05.
TP (2005.03.01): JOIN'05.
T (2005.03.07): Introdução ao refinamento de modelos de dados: relações de abstraçao e representação; a ordem de refinamento.
Invariantes induzidos. Exemplos: algumas leis de reificação de conjuntos e correspondências.
TP (2005.03.03, 2005.03.08): Continuação da apresentação de relators: o coproduto de relações; o power relator. Derivação de algumas das leis referidas como exercício de utilização do cálculo relacional.
TP (2005.03.10, 2005.03.22): Catamorfismos relacionais: propriedades e exemplos.
T (2005.03.14): Estudo de algumas situações de refinamento de dados. Propriedades da relação de
refinamento.
Prototipagem: o legado Camila.
TP (2005.03.15): Assistir à apresentação sobre o "PURe Camila" por João Ferreira e Alexandra Mendes.
T (2005.03.21): Não houve aula (ausência do docente em reunião interna).
TP (2005.03.31, 2005.04.5): Especificação de propriedades como Catamorfismos Relacionais.
T (2005.04.04): Relacionadores e o refinamento estruturado. Leis de refinamento de conjuntos finitos, correspondências e representações
por apontador. Introdução ao problema de desrecursivação de modelos de dados.
TP (2005.04.07, 2005.04.12): Utilização do Haskell na especificação do Software (comparação com VDM/Camila): abstração Set e Map; invariantes de tipo; pré e pós-condições nas operações; especificações não executáveis; características não funcionais (estado de objectos e do interpretador; operações IO; etc.). Apresentação dos projectos práticos da disciplina.
T (2005.04.11): Teorema de desrecursivação genérica: Função de abstracção e invariante concreto. Relações de pertença e acessibilidade estrutural.
Cálculo da relação de acessibilidade para diversos exemplos.
TP (2005.04.14, 2005.04.19) Refinamento de Dados: caracterização abstracta; exemplos de refinamentos; exercícios sobre refinamento de dados e utilização da biblioteca CamilaPrelude? .
T (2005.04.18): Introdução ao refinamento algorítmico. Relação de satisfação de uma especificação (implícita) por uma função e sua generalização
à satisfação de uma relação por outra. Enunciação e prova das propriedades básicas desta relação. Refinamento algoritmíco progressivo.
TP (2005.04.21, 2005.04.26) Refinamento de dados - exercício sobre normalização de dados para representação tabular.
T (2005.05.02): Continuação do sumário da aula anterior
TP (2005.04.28, 2005.05.03) Refinamento de dados: exercício sobre desrecursivação de dados.
T (2005.05.09): Noção de simulação. Resolução de equações de refinamento. Soluções funcionais e não funcionais.
TP (2005.05.05, 2005.05.17) Refinamento de algoritmos: Definição da relação "é implementado por". Demonstração de duas leis sobre a relação de implementação. Preenchimento dos inquéritos.
T (2005.05.16): Cálculo de simulações: análise de alguns casos de estudo.
TP (2005.05.19, 2005.05.24) Caso de estudo sobre refinamento de algoritmos: verificação da correcção do "insertion sort".
T (2005.05.23): Inter-combinação de ciclos e eliminação de recursão mútua. Teorema de Fokkinga e seus corolários. Exemplos de aplicação.
TP (2005.05.31, 2005.06.02) Recepção de trabalhos práticos.
T (2005.05.30): Conclusão da aula anterior. Introdução ao cálculo de soluções iterativas. Preenchimento dos inquéritos de avaliação e
fecho da disciplina.
Nota: o contacto com os docentes através de email deve ser sempre feito a partir de contas institucionais da Universidade e com a indicação clara do nome da disciplina no subject.
Programa Resumido
Introdução ao cálculo de programas. Princípio da abstracção dos dados. Relações de abstracção e de representação. Inequações de refinamento.
Cálculo de refinamento formal de dados. Teorema de desrecursivação genérica. Relações de pertença estrutural e acessibilidade estrutural. Implementação de tipos indutivos polinomais em linguagens com gestão de memória dinâmica: Introdução de apontadores em linguagens tipo C/C++. Representação orientada a objectos.
Cálculo de refinamento algorítmico. A eficiência como principal motivação para o refinamento algorítmico. Fases do refinamento algorítmico: simulação, redução do não-determinismo, mudança de estrutura de dados virtual. Lei de refinamento funcional. Lei de refinamento relacional. Leis de fusão «vertical» e «horizontal». Lei de refinamento de simultâneo de dados e algoritmos. Cálculo de ciclos while como hilomorfismos.
Prototipagem rápida e integração com outras tecnologias. Introdução ao VDM++. Integração de protótipos reactivos em arquitecturas cliente-servidor. Emulação de serviços intermédios («middleware») e de serviços de dados («dataware»).
Critérios de Avaliação
Nota final
Componente Teórica (Exame): 70% (nota mínima de 8 valores)
Componente Prática: Facultativa, com um peso de 30%.
No caso não se realizar trabalho prático, o exame teórico conta integralmente para a nota final (100%), mas essa nota fica majorada a 16 valores.
T (2005.02.21): Apresentação da Disciplina. Noção de refinamento.
TP (2005.02.22, 2005.02.24): Apresentação e marcação de turnos. Generalização das construções básicas das funções para as relações (do functor para o relator). A unidade nas relações. O produto de relações. Derivação de algumas das leis referidas como exercício de utilização do cálculo relacional.
T (2005.02.28): JOIN'05.
TP (2005.03.01): JOIN'05.
T (2005.03.07): Introdução ao refinamento de modelos de dados: relações de abstraçao e representação; a ordem de refinamento.
Invariantes induzidos. Exemplos: algumas leis de reificação de conjuntos e correspondências.
TP (2005.03.03, 2005.03.08): Continuação da apresentação de relators: o coproduto de relações; o power relator. Derivação de algumas das leis referidas como exercício de utilização do cálculo relacional.
TP (2005.03.10, 2005.03.22): Catamorfismos relacionais: propriedades e exemplos.
T (2005.03.14): Estudo de algumas situações de refinamento de dados. Propriedades da relação de
refinamento.
Prototipagem: o legado Camila.
TP (2005.03.15): Assistir à apresentação sobre o "PURe Camila" por João Ferreira e Alexandra Mendes.
T (2005.03.21): Não houve aula (ausência do docente em reunião interna).
TP (2005.03.31, 2005.04.5): Especificação de propriedades como Catamorfismos Relacionais.
T (2005.04.04): Relacionadores e o refinamento estruturado. Leis de refinamento de conjuntos finitos, correspondências e representações
por apontador. Introdução ao problema de desrecursivação de modelos de dados.
TP (2005.04.07, 2005.04.12): Utilização do Haskell na especificação do Software (comparação com VDM/Camila): abstração Set e Map; invariantes de tipo; pré e pós-condições nas operações; especificações não executáveis; características não funcionais (estado de objectos e do interpretador; operações IO; etc.). Apresentação dos projectos práticos da disciplina.
T (2005.04.11): Teorema de desrecursivação genérica: Função de abstracção e invariante concreto. Relações de pertença e acessibilidade estrutural.
Cálculo da relação de acessibilidade para diversos exemplos.
TP (2005.04.14, 2005.04.19) Refinamento de Dados: caracterização abstracta; exemplos de refinamentos; exercícios sobre refinamento de dados e utilização da biblioteca CamilaPrelude? .
T (2005.04.18): Introdução ao refinamento algorítmico. Relação de satisfação de uma especificação (implícita) por uma função e sua generalização
à satisfação de uma relação por outra. Enunciação e prova das propriedades básicas desta relação. Refinamento algoritmíco progressivo.
TP (2005.04.21, 2005.04.26) Refinamento de dados - exercício sobre normalização de dados para representação tabular.
T (2005.05.02): Continuação do sumário da aula anterior
TP (2005.04.28, 2005.05.03) Refinamento de dados: exercício sobre desrecursivação de dados.
T (2005.05.09): Noção de simulação. Resolução de equações de refinamento. Soluções funcionais e não funcionais.
TP (2005.05.05, 2005.05.17) Refinamento de algoritmos: Definição da relação "é implementado por". Demonstração de duas leis sobre a relação de implementação. Preenchimento dos inquéritos.
T (2005.05.16): Cálculo de simulações: análise de alguns casos de estudo.
TP (2005.05.19, 2005.05.24) Caso de estudo sobre refinamento de algoritmos: verificação da correcção do "insertion sort".
T (2005.05.23): Inter-combinação de ciclos e eliminação de recursão mútua. Teorema de Fokkinga e seus corolários. Exemplos de aplicação.
TP (2005.05.31, 2005.06.02) Recepção de trabalhos práticos.
T (2005.05.30): Conclusão da aula anterior. Introdução ao cálculo de soluções iterativas. Preenchimento dos inquéritos de avaliação e
fecho da disciplina.
Sessão de esclarecimento de dúvidas na próxima 2ª feira (dia 18) às 14:30 na sala DI 0.02.
-- MariaJoaoFrade - 12 Jul 2005
Os testes poderão ser consultados na Quarta-feira (13 de Julho) às 9:30 na sala DI 0.02 (junto à recepção).
-- MariaJoaoFrade - 12 Jul 2005
Os alunos que vão entregar o trabalho prático apenas a MP2, deverão faze-lo na próxima 2ªfeira, 30 de Maio, da parte da manhã.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
Quem entregar trabalhos a MP2 e a PP4, apenas tem que fazer a marcação de entrega de trabalhos a PP4 (a recepção de MP2 será feita na mesma altura).
-- MariaJoaoFrade - 24 May 2005
Disponíveis as notas práticas do ano lectivo 2004/2004.
-- JoseBacelarAlmeida - 09 Mar 2005
T (2006.02.21): Apresentação da Disciplina. Introdução aos sistemas reactivos. Álgebras e Coalgebras.
Tipos indutivos e coindutivos. Interação e comportamento. Comportamento dos autómatos determinísticos.
-- LuisSoaresBarbosa - 21 Feb 2006
Terão lugar (no anfiteatro A1 do DI) as seguintes sessões de esclarecimento de dúvidas:
2a.fa. 14 Fev 10:00, com possibilidade de consulta dos exames (1a. chamada).
4a.fa. 16 Fev 10:00, com possibilidade de consulta dos exames (2a. chamada).
-- JorgeSousaPinto - 06 Jan 2005
Disponíveis nesta página (com a preciosa ajuda de Nuno Rodrigues) alguns exercícios resolvidos.
-- JorgeSousaPinto - 08 Jan 2005
Já disponível nesta página a versão final dos slides das aulas teóricas.
-- JorgeSousaPinto - 2 Dec 2004
Disponível nesta página a versão 5 dos exercícios da disciplina. A menos de correcções de erros e algum rearranjo de estrutura, esta é a versão final deste documento
-- JorgeSousaPinto - 11 Dec 2004
T (2004.09.23): Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação-implementação. Objectivos e programa da disciplina; sua integração no plano curricular do curso.
TP (2004.09.22): Apresentação: marcação de turnos.
TP (2004.09.22): Apresentação: marcação de turnos.
T (2004.09.30): Motivação para a especificação relacional. Introdução ao Cálculo Relacional. Operadores básicos e propriedades.
TP (2004.09.29): Apresentação do VDMTools. Resolução do problema 02 do guião das sessões de laboratório(Modelling with Sequences).
TP (2004.09.30): Apresentação do VDMTools. Resolução do problema 02 do guião das sessões de laboratório (Modelling with Sequences).
T (2004.10.07): Cálculo Relacional: Lei modular; técnicas de prova; exemplos.
TP (2004.10.06): Resolução do problema 03 dos guiões (Modelling with Sets).
TP (2004.10.07): Resolução do problema 03 dos guiões (Modelling with Sets).
T (2004.10.14): Dispensa de aulas concedida pelo Senhor ReitorTP (2004.10.13): Resolução do problema 06 dos guiões (Modelling with Mappings).
TP (2004.10.14): Resolução do problema 06 dos guiões (Modelling with Mappings).
T (2004.10.21): Raciocínio com funções: regras de shunting; especialização de leis. Conexões de Galois: motivação, definição e exemplos. Propriedades básicas associadas a uma conexão de Galois. Prova da preservação de supremos (infimos) pelo adjunto inferior (superior).
TP (2004.10.20): Resolução do problema 07 dos guiões (Multisets "are" Mappings).
TP (2004.10.21): Resolução do problema 07 dos guiões (Multisets "are" Mappings).
T (2004.10.28): Continuação da aula anterior: análise de diversos exemplos de conexões de Galois e derivação de propriedades.
Noção de either e split relacionais.
TP (2004.10.27): Resolução da Ficha 1 (Cálculo Relacional).
TP (2004.10.28): Resolução da Ficha 1 (Cálculo Relacional).
T (2004.11.04): Faltou o docente (por deslocação em serviço). Em substituição foi dada uma aula TP a cargo da Prof. Olga Pacheco.
TP (2004.11.03): Resolução da Ficha 2 (Cálculo Relacional).Resolução do problema 04 dos guiões (Datatype Invariants).
TP (2004.11.04): Resolução da Ficha 2 (Cálculo Relacional).Resolução do problema 04 dos guiões (Datatype Invariants).
T (2004.11.11): Semântica relacional da meta-linguagem de VDM. Definição recursiva de relações. Noção de
hilomorfismo relacional. Incursão na semântica das definições recursivas. Teorema de Knaster-Tarski.
TP (2004.11.10): Faltou a docente (deslocação em serviço).
TP (2004.11.11): Faltou a docente (deslocação em serviço).
T (2004.11.18): Faltou o docente (deslocação em serviço).
Esta aula será reposta no dia 14 Dez (terça-feira) pelas 14.30 h.
TP (2004.11.17): Faltou a docente. (Aula de substituição).
TP (2004.11.18): Faltou a docente. (Aula de substituição).
T (2004.11.25): Cálculo de pontos fixos. Leis básicas e exemplos. Aplicação ao cálculo de hilomorfismos relacionais.
TP (2004.11.24): Resolução da Ficha 3 (Conexões de Galois).Resolução do problema 09 dos guiões (A Toy Production Database model).
TP (2004.11.25): Resolução da Ficha 3 (Conexões de Galois).Resolução do problema 09 dos guiões (A Toy Production Database model).
T (2004.12.02): Propriedades dos hilomorfismos relacionais. Aplicação ao estudo dos tipos colectivos (não indutivos) de VDM (conjuntos e corresponências).
TP (2004.12.01): Feriado Nacional.
TP (2004.12.02): Resolução da Ficha 4 (Conexões de Galois). Continuação da resolução do problema 09 dos guiões.
T (2004.12.09): Relação de acessibilidade e pertença em tipos de dados. Factorização em equações-hilo. Condições para a existência
de soluções únicas. Aplicações.
TP (2004.12.08): Feriado Nacional.
TP (2004.12.09): (Aulas de dúvidas)
T (2004.12.14): (Reposição aula de 18 Nov) Discussão de exercícios de aplicação.
T (2004.12.16): Conclusão da disciplina. Preenchimento do questionário de avaliação.
TP (2004.12.15): (Aulas de dúvidas)
TP (2004.12.16): (Aulas de dúvidas)
-- LuisSoaresBarbosa - 21 Sep 2004
Nota: o contacto com os docentes através de email deve ser sempre feito a partir de contas institucionais da Universidade e com a indicação clara do nome da disciplina no subject.
Programa Resumido
Introdução ao problema do controlo de qualidade em `software' . Especificação formal -- porquê e para quê? Introdução aos binómio especificação /implementação.
Ciclo de vida do software usando métodos formais. Redução do risco e dos custos. Áreas típicas de aplicação. Sistemas críticos e confiáveis. Qualidade de serviços.
Linguagens e métodos para especificação formal. Antecendentes históricos. Do método de Viena (VDM) ao `standard' ISO/IEC 13817-1 (VDM-SL).
Estudo da notação VDM-SL. Modelação por conjuntos, sequências e funções finitas. Especificação por pré/pós-condições. Invariantes. Sub-especificação e não-determinismo. Relação (especificação) versus função (implementação).
Prototipagem e animação. Experiência com a utilização do ambiente VDMTOOLS.
Introdução ao cálculo relacional. Combinadores relacionais básicos. Taxonomia de relações binárias. Conexões de Galois. Pontos fixos.
Semântica relacional para VDM-SL e cálculo de especificações.
Critérios de Avaliação
Nota final
Componente Teórica (Exame): 80% (nota mínima de 8 valores)
Componente Prática: 20% em avaliação contínua e entrega de relatórios das aulas laboratoriais (nota mínima de 10 valores)
Recorda-se que o estatuto de Trabalhador-Estudante não isenta os alunos nessas condições da obrigatoriedade de realizar a componente experimental da disciplina.
ATENÇÃO: A página oficial da disciplina está alojada em http://www.di.uminho.pt/~jno/html/mpi.html.
Esta página destina-se apenas a fornecer material de estudo adicional e a dar apoio aos trabalhos práticos.
As apresentações do 2º trabalho prático decorrerão nos dias 4, 5 e 6 de Janeiro. Já se encontram disponíveis na recepção do DI as folhas para as marcações das apresentações orais dos trabalhos práticos.
Apresentações do 1º Trabalho Prático
As apresentações do 1º trabalho prático decorrerão nos dias 21, 22 e 23 de Novembro. Já se encontram disponíveis na recepção do DI as folhas para as marcações das apresentações orais dos trabalhos práticos.
É obrigatório a elaboração de um pequeno relatório (1 ou 2 páginas),
explicando as principais decisões tomadas na resolução dos problemas
propostos. Este relatório deve também ser submetido ao sistema de recepção
de trabalhos práticos. Aquando da apresentação oral, os grupos devem-se fazer acompanhar
pelos respectivos relatórios impressos.
Submissão Electrónica
Siga este link. Os trabalhos têm de ser submetidos em formato .zip ou .tgz
Para efectuar a entrega do trabalho é necessário registar primeiro o grupo, registo este que so deve acontecer uma única vez. Para isso devem seleccionar a opção Registar e introduzir um username e uma password para o grupo; Depois de registado o grupo, devem fazer login com o username e password escolhidos; Uma vez dentro do sistema, devem selecionar a opção "Elementos do Grupo" e registar todos os elementos do grupo um por um; Por fim, para submeter o trabalho selecionem a opção "Submeter Trabalho" e escolham qual o trabalho a submeter bem como o ficheiro contendo o trabalho, fazendo "Submit" no final.
Se algum grupo perder a password contacte NunoRodrigues. Não tentem nunca registarem-se mais do que uma vez.
FAQ dos Trabalhos Práticos
Disponível nesta página
(faça login como TWikiGuest e coloque as suas questões)
Terão lugar (no anfiteatro A1 do DI) as seguintes sessões de esclarecimento de dúvidas:
2a.fa. 14 Fev 10:00, com possibilidade de consulta dos exames (1a. chamada).
4a.fa. 16 Fev 10:00, com possibilidade de consulta dos exames (2a. chamada).
-- JorgeSousaPinto - 06 Jan 2005
Disponíveis nesta página (com a preciosa ajuda de Nuno Rodrigues) alguns exercícios resolvidos.
-- JorgeSousaPinto - 08 Jan 2005
Já disponível nesta página a versão final dos slides das aulas teóricas.
-- JorgeSousaPinto - 2 Dec 2004
Disponível nesta página a versão 5 dos exercícios da disciplina. A menos de correcções de erros e algum rearranjo de estrutura, esta é a versão final deste documento
-- JorgeSousaPinto - 11 Dec 2004
Ficheiros contendo definições e exemplos de utilização dos padrões de recursividade de listas e árvores binárias: MP1-Libraries.tgz
Trabalhos Práticos
Submissão Electrónica
Siga este link. Os trabalhos têm de ser submetidos em formato .zip ou .tgz
Para efectuar a entrega do trabalho é necessário registar primeiro o grupo, registo este que so deve acontecer uma única vez. Para isso devem seleccionar a opção Registar e introduzir um username e uma password para o grupo; Depois de registado o grupo, devem fazer login com o username e password escolhidos; Uma vez dentro do sistema, devem selecionar a opção "Elementos do Grupo" e registar todos os elementos do grupo um por um; Por fim, para submeter o trabalho selecionem a opção "Submeter Trabalho" e escolham qual o trabalho a submeter bem como o ficheiro contendo o trabalho, fazendo "Submit" no final.
Se algum grupo perder a password contacte NunoRodrigues. Não tentem nunca registarem-se mais do que uma vez.
Enunciados
Trabalho 1, a ser submetido electronicamente até às 24:00 do dia 10 de Outubro.
Trabalho 2, a ser submetido electronicamente até às 24:00 do dia 7 de Novembro.
Trabalho 3, a ser submetido electronicamente até às 24:00 do dia 12 de Dezembro.
Pré-Requisitos
Não havendo pré-requisitos formais, assume-se que os alunos possuem o seguinte conjunto de conhecimentos:
familiaridade com conceitos básicos de Programação Funcional
familiaridade com a linguagem de programação Haskell
Critérios de Avaliação
Nota final
Componente Teórica (Exame): 60% (nota mínima de 8 valores)
Componente Prática (Trabalhos Práticos): 40% (nota mínima de 10 valores)
Avaliação prática
A componente prática da nota resulta da avalição de três trabalhos práticos.
Os trabalhos serão realizados extra-aulas, por grupos de exactamente 3 alunos.
Datas para a entrega dos trabalhos práticos: 10 de Outubro, 7 de Novembro, e 12 de Dezembro.
Aqueles alunos que obtiveram classificação prática positiva no ano anterior poderão congelar essas notas para o ano corrente. O CONGELAMENTO IMPLICA QUE O ALUNO NÃO SERÁ AVALIADO NA VERTENTE PRÁTICA ESTE ANO, NÃO PODENDO POR ISSO ENTREGAR QUALQUER TRABALHO.
Programa Resumido
Motivação. Teoria e método em programação. Cálculo e raciocínio sobre programas. Composicionalidade. Combinadores de programas. Modularidade e reutilização.
Programação funcional: sua motivação e antecendentes históricos. Composição de funções. Noções de abstracção e de isomorfismo.
Iniciação à estruturação de dados. Combinadores básicos e suas propriedades estruturais (reflexão, fusão, absorção, cancelamento e de functorialidade). Álgebra de um tipo de dados. Lei da troca.
Introdução às estruturas de dados indutivas regulares. Álgebras de functores. A triologia «cata-ana-hilo». Recursividade polinomial. Caso de estudo: algoritmos de ordenação.
Parametrização e polimorfismo. Programação genérica. Functores de tipo. Introdução ao politipismo.
Programação funcional com mónadas. `Input/output'. Excepções
Bibliografia
Textos de referência sobre Programação Funcional e Haskell:
R. Bird, Introduction to Functional Programming Using Haskell. Prentice-Hall International, 2nd edition, 1998
J.M. Valença e J.B. Barros, Fundamentos da Computação II: Programação Funcional. Universidade Aberta, 2000
Recomenda-se ainda, como apoio específico aos temas tratados na disciplina:
Devemos nos restringir unicamente aos operadores Pointfree indicados no enunciado (não há o Either, por exemplo)?
Claro que não! Faltam todos os operadores das somas e dos exponenciais. Quanto mais provar melhor!!
No ponto 4 para a calculadora quantas expressões simplificadas são para devolver? É que tendo a função "reescreve" a devolver várias simplificações as hipóteses de aplicar novas regras vão aumentando progressivamente. Se é para devolver apenas uma simplificação qual devemos escolher?
Essa decisão fica ao vosso critério.
Na função "reescreve" pede para devolver todas as expressões possiveis resultantes da reescrita. A pergunta é: é necessário devolver expressões em que a substituião foi feita apenas num termo de nivel n? Isto é a substituição feita apenas dentro de um termo que por sua vez está dentro de outro e assim sucessivamente? Ou é necessário devolver apenas as substituições que fazem matching no primeiro nivel do termo?
Tem que devolver todas, independentemente do nível em que se encontrem na árvore. Por exemplo,
reescreve (Term Comp [Var ´f´, Term Id []], Var ´f´) (Term Comp [Term Comp [Term Fst [], (Term Comp [Term Snd [], Term Id []]], Term Id []])
deverá devolver a seguinte lista (não necessariamente na ordem apresentada). Note que existem duas subexpressões que fazem match com o lado esquerdo da regra.
[Term Comp [Term Fst [], (Term Comp [Term Snd [], Term Id []]], Term Comp [Term Comp [Term Fst [], Term Snd []], Term Id []]]
O enunciado faz referência à necessidade de definir a orientação em que vamos aplicar a equação.
Na practica, a que se refere essa orientação? Isso quer dizer que uma vez que assumimos que a orientação é sempre feita da
esquerda para a direita, a substituição vai ser sempre feita na equação (PF1,PF2)? Isto é, fazendo match com PF1, devolve sempre
PF2 (partindo do principio que as condicoes se verificam)?
Exactamente. Definir a orientação é decidir qual dos lados de uma equação vai ficar do lado esquerdo e qual vai ficar do lado direito.
Quanto às expressões genéricas, a noçao de subexpressão refere-se a todos os membros da lista de Expressões de cada termo? ou seja..
data Exp v c = Term c [SubExp v c] | Var v
data SubExp v c = Term c [SubExp v c] | Var v
e se assim é qual a vantagem da criaçao deste tipo? sendo que uma subexpressão é em si mesma uma expressão.
Na versão mais simplista uma subexpressão é efectivamente igual a uma expressão, ou seja,
type SubExp v c = Exp v c
Assumindo esta definição, a função que enumera as subexpressões deverá devolver para o exemplo
assocr :: Pointfree
assocr = Term Split [Term Comp [Term Fst [], Term Fst []], Term Prod [Term Snd [], Term Id []]]
a seguinte lista de subexpressões (não necessariamente nesta ordem).
[Term Split [Term Comp [Term Fst [], Term Fst []], Term Prod [Term Snd [], Term Id []]],
Term Comp [Term Fst [], Term Fst []], Term Prod [Term Snd [], Term Id []], Term Fst [], Term Snd [], Term Id []]
Por vezes pode ser conveniente distinguir subexpressões iguais, mas que ocorrem em posições diferentes da expressão original, como é o caso da subexpressão Term Fst [] do exemplo acima. Quem desejar enveredar por esta alternativa deverá incluir no tipo das subexpressões uma indicação da posição ocupada pela subexpressão em causa. Essa posição deverá ser o caminho necessário para encontrar a subexpressão na expressão original.
Achei a explicaçao da função update um tanto confusa, é possivel dar um exemplo concreto de uma invocaçao e do resultado?
Vamos supor que uma substituição s (do tipo Subst Char PF) contém as seguintes associações entre variáveis e expressões (note que não estamos a assumir nenhuma impementação concreta para este tipo):
'x' --> Term Fst [] 'y' --> Term Comp [Term Snd [], Term Fst []]
Se fizermos update s 'z' (Term Snd []) será devolvida uma nova substituição que para além das expressões associadas a 'x' e 'y' contém uma nova associação entre 'z' e Term Snd []. Se fizermos update s 'x' (Term Fst []) devolve a mesma substituição sem alterações. No entanto, se fizermos update s 'x' (Term Snd []) o update falha devolvendo Nothing pois 'x' já estava associado a uma expressão diferente.
Como colocar questões?
Faça login como TWikiGuest e coloque a sua questão no topo da página em bold. Logo que possível um dos docentes responderá às suas dúvidas.
Em principio quando é que sairão as notas da primeira chamada?
Seria possivel disponibilizarem na página o exame da primeira chamada? Seria bastante util para quem o vai fazer na segunda chamada.
Não, o exame será publicado apenas no fim da época de exames.
-- JorgeSousaPinto - 19 Jan 2005
Haverão mais sessoes de duvidas, nomeadamente mais perto do exame da segunda chamada? É que, visto ainda faltar muito tempo pra este, ainda nao comecamos a estudar para ele, logo nao temos muitas duvidas aínda...
É uma boa pergunta, axo que era mais vantajoso uma das sessoes de duvidas ser na semana antes do exame da 2ª chamada.
Sim, claro, As desta semana destinam-se a quem vai à primeira chamada.
-- JorgeSousaPinto - 11 Jan 2005
Porque não fomos avaliados ao primeiro trabalho? Qual foi então o seu propósito? Perdermos tempo?
Temos diversas disciplinas com vários trabalhos cada. Agora, perdermos tempo com um, que não serviu-nos de nada... é no mínimo absurdo
O primeiro trabalho foi avaliado indirectamente. Uma vez que se tratou de um trabalho preparatório para o terceiro trabalho, entendemos avaliá-lo apenas como cumprindo ou não a funcionalidade básica; esta informação será tida em conta no cálculo da nota final.
-- JorgeSousaPinto - 06 Jan 2005
Absurda é a pergunta. Se no exame não aparecer nenhuma pergunta sobre a propriedade universal do produto, aprendê-la foi uma perda de tempo? Se a sua resposta é afirmativa então devia reconsiderar a sua opção de se inscrever num curso superior.
-- JoseBarros - 11 Jan 2005
No ponto 3.3, devemos fazer operaçoes n-árias ou dar uma aridade a cada operação? por exemplo a soma continuará a ser binária ou será n-ária?
Como não é especificado no enunciado quais os operadores n-ários a utilizar, devem apresentar uma solução genérica válida para operadores arbitrários, e exemplificá-la com alguns operadores de aridades diferentes (ver também enunciado do 1o. TP). Claro que podem incluir para este fim também operadores binários, bem como generalizar um operador binário para ternário, por exemplo.
-- JorgeSousaPinto - 11 Dec 2004
Na valorização 3 pede para fazer parser do tipo Expressao? Mas este nao da pra instanciar pk ta defenido a custa de type e nao data consequentemente da erro. Podemos redefenir atraves do data?
Nas valorizações, "the sky is the limit". Desde que seja em benefício do vosso trabalho sem introduzir novas limitações, alterem o que for necessário.
-- JorgeSousaPinto - 11 Dec 2004
Podiam dar um exemplo de um catamorfismo de ordem superior, é que não estou a perceber a ecencia da questao.
Aqui vai, para quem teve o azar de não estar presente nas muitas aulas em que isto foi exemplificado. A função de inversão de listas com acumulador,
rev [] y = y rev (x:xs) y = rev xs (x:y)
pode ser escrita como
foldr aux id where aux h r = \y -> r(h:y)
-- JorgeSousaPinto - 11 Dec 2004
Na verdade o tipo Tree é muito traiçoeiro pois tnato podemos ter árvores: Node 1 [Node 2[Node 3[]]] como tambem podemos ter Node 1 [Node 2 [], Node 3 []]. Qual a versão correcta?
Ambos os exemplos são expressões (diferentes) do tipo Tree Int.
-- JorgeSousaPinto - 11 Dec 2004
Um Tree é por exemplo: Node 1[Node 2[Node 3[Node 4 []]]] Como fazemos uma travessia preorder disso? Nao vejo Node k [a1, a2, a3] como foi respondido numa das pergundas desta faq
O resultado da travessia pré-order desta árvore é a lista [1,2,3,4]: o conteúdo da raíz da árvore seguido (da concatenação) das travessias das sub-árvores, tal como explicado em baixo.
Na 1 da valorização qd criamos a função stExecPN é suposto dar o resultado logo tipo o função aplicada ao prog dado como exemplo no enunciado de PN deve dar logo [15]?
Como é normal neste tipo de funções com estado, haverá uma função de topo que invoca a função monádica inicializando o estado com o valor inicial. A função de topo não calcula um valor monádico, apenas a outra o faz.
-- JorgeSousaPinto - 11 Dec 2004
É necessario fazer relatorio? não é dito nada no enunciado.Se sim, é para submeter tambem? ou é para levar apenas na apresentação?
Tal como no trabalho anterior,
"é necessário a elaboração de um relatório sucinto acerca do trabalho desenvolvido. Este relatório não deve ser submetido ao sistema de submissão dos trabalhos, mas sim entregue em papel na apresentação oral do trabalho."
-- JorgeSousaPinto - 11 Dec 2004
Na 3.3 pede para fazer com os tipos dados o que se fez na 3.1 e na 3.2 mas o ponto 3.2.3 é a mesma coisa pois o tipo de prog é o mesmo em ambos os casos. Estarei enganado?
O tipo é de facto o mesmo, mas os operadores são diferentes. Por exemplo, um operador ternário necessitará de extraír 3 argumentos da stack. Sendo assim, as funções de execução serão generalizações das funções definidas para o caso binário.
-- JorgeSousaPinto - 11 Dec 2004
Referente à valorização 1
para executar programas em PN ou em RPN como catamorfismos temos de distinguir duas associações diferentes, devido à diferente construção do pograma (PN/RPN). esta distinção é marcada pela utilização de foldr/foldl para cada caso.
Correcto. Mas: não se deve utilizar foldl mas sim foldr também para o segundo caso, um catamorfismo de ordem superior.
implementando estas funçoes com monads ST como respondido em baixo será usada a função sequence_ que faz uma dada associação das monads. esta associação funciona correctamente para um caso e como é obvio n funciona para o outro.
existe alguma função que faça o ke faz a sequence_ mas associe de forma inversa as monads?
Há que investigar! Será difícil, caso esta função não exista, escrevê-la?
-- JorgeSousaPinto - 11 Dec 2004
No ponto 3.2.3 b) é suposto fazer a função execRPNt em total point free? E o que devemos entender por um catamorfismo de ordem superior. Também penso que existe uma gralha no enunciado onde diz: "definindo execRPN :: Prog -> [Int] -> [Int] como um catamorfismo de listas (de ordem superior)."
Em todo o trabalho devem tentar definir funções o mais point free possivel. O catamorfismo a definir é de ordem superior, pois o seu gene tem de consumir um a parâmetro extra, i.e. o acumulador ([Int]) que simula a stack. Existe realmente uma gralha em
"definindo execRPN :: Prog -> [Int] -> [Int] como um catamorfismo de listas (de ordem superior)."
devendo ler-se
"definindo execRPNt :: Prog -> [Int] -> [Int] como um catamorfismo de listas (de ordem superior)."
-- NunoRodrigues - 09 Dec 2004
Na valorização 1 é pedido para utilizar a monad ST para executar um programa. Será suficiente ter um monad ST cujo estado é um [Instr] e cuja unica computaçao será executar execPN ou execRPN sobre o seu estado e devolver o resultado da computação??
Não. O estado deverá ser um tipo de dados que simule uma stack (p.e. [Int]). Pretende-se que façam a conversão de uma instânica de Instr para uma instância de Monad ST, que simule correctamente a operação em causa. No final desta operação irão obter uma lista de monad ST. Ai podem aplicar sequence a essa lista e executar correctamente a monad resultante.
-- NunoRodrigues - 09 Dec 2004
No ponto 2 das valorizações é necessário mostrar o estado interno da stack, que so é criado quando se faz catamorfismo de execução. Para conseguir mostrar a stack interna é necessário monades como genes do catamorfismo??
-- TWikiGuest - 09 Dec 2004
Não. Para irem mostrando o conteúdo da stack á medida que vão executando um programa, têm de trabalhar com a monad STIO. Posto isto, devem fazer a tradução de instruções (Instr) para monades STIO, monades estas que já podem efectuar IO mostrando assim o resultado interno da stack ao longo da execução do programa.
-- NunoRodrigues - 09 Dec 2004
Como posso ligar a opcao de trace de um calculo no ghc?
Podiam dar um exemplo de uma FTree com uma operação. Não é uma FBtree só com um lado, tipo uma lista, com o operador no fim???
é isto k pedem como FBTree : ftree = (FNode 1 [FNode 3 [FNode 4 [FNode 5 [FLeaf 2]]]])
Tree : tree = (Node 1 [Node 3 [Node 2 [Node 4 [Node 5[]]]]]), é isto?
Representação da expressão envolvendo um operador ternário g e um operador binário f
g(2,3,f(10,20))FNode g [Leaf 2, Leaf 3, FNode f [Leaf 10, Leaf 20]]
-- JorgeSousaPinto - 08 Dec 2004
Tive o mesmo problema na pergunta 3.3, nao faz muito sentido pedir um preorder e um postorder de uma RTree, ou faz ?
Sim, faz, cfr. resposta à questão seguinte. Não faria sentido, isso sim, falar de uma travessia inorder de uma destas árvores.
-- JorgeSousaPinto - 08 Dec 2004
Na questão 3.3 que pede para fazer o preorder e o postorder é para o fazer do tipo Tree.?
Podiam dar o exemplo do resultado, dada uma Tree, de fazer preorder e postorder.
Sim. Por exemplo, para a árvore Node k [a1,a2,a3] (com a1, a2, a3 do tipo Tree), o resultado será uma lista com k à cabeça, seguida, por esta ordem, dos elementos resultantes das travessias de a1, a2, e a3. Na travessia pós-ordem a diferença é que k aparece no fim da lista.
-- Main.Jorg
Sessão de esclarecimento de dúvidas na próxima 2ª feira (dia 18) às 14:30 na sala DI 0.02.
-- MariaJoaoFrade - 12 Jul 2005
Os testes poderão ser consultados na Quarta-feira (13 de Julho) às 9:30 na sala DI 0.02 (junto à recepção).
-- MariaJoaoFrade - 12 Jul 2005
Os alunos que vão entregar o trabalho prático apenas a MP2, deverão faze-lo na próxima 2ªfeira, 30 de Maio, da parte da manhã.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
Quem entregar trabalhos a MP2 e a PP4, apenas tem que fazer a marcação de entrega de trabalhos a PP4 (a recepção de MP2 será feita na mesma altura).
-- MariaJoaoFrade - 24 May 2005
Disponíveis as notas práticas do ano lectivo 2004/2004.
-- JoseBacelarAlmeida - 09 Mar 2005
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein.
Introduction to Algorithms. MIT Press, Cambridge,Mass., second edition,
2001.
Robert L. Kruse, Bruce P. Leung, and Clovis L. Tondo. Data Structures and
Program Design in C. Prentice Hall, second edition, 1997.
Donald E. Knuth. The Art of Computer Programming : (1) Fundamental
Algorithms, (2) Seminumerical Algorithms, (3) Sorting and Searching.
Addison/Wesley, third edition, 1997/98. 3 volumes.
Nas pautas que saíram relativamente ao ano 2004/05, alguns alunos têm como nota '*'. Em termos práticos, a que se resume esta nota?... Que nota mínima no exame escrito precisam os alunos em questão para obter aprovação à disciplina?
Visto q o exame é na proxima semana, e existe nota prática obrigatoria, para quando a pauta da avaliação prática?
Durante os exames os horarios de atendimento dos docentes vai ser o mesmo?
Para quem congela a nota do trabalho do ano anterior, os 10% dos trabalhos das TP podem ser contabilizados?
Qualquer aluno inscrito na disciplina de Métodos de Programação II.
Se quiser contribuir e não estiver registado use o login TWikiGuest com password guest.
-- JoseBacelarAlmeida - 19 Feb 2005
Gostaria de saber se os alunos que já efectuaram os trabalhos práticos da disciplina em anos anteriores necessitam de o fazer novamente este ano. Caso não seja necessário quais os procedimentos a seguir?
-- AlexandreCarvalho? - 28 Feb 2005
Os alunos que realizaram a componente prática da disciplina no ano passado (2003/2004) podem optar por congelar a nota prática. Para isso deverão
enviar um email ao docente responsável pela disciplina ou ao docente das aulas teórico-práticas.
-- JoseBacelarAlmeida - 02 Mar 2005
Já agora, para quem é trabalhador, a nota prática é congelada por dois anos?
Não.
E já agora, quem é trabalhador não precisa de congelar a nota; nem sequer por um ano.
-- JoseBarros - 16 Mar 2005
Para "defesa" do colega que escreveu isto, deixe-me dizer-lhe que para bom entendedor meia palavra basta. Trabalhador já é uma e (neste caso) = trabalhador estudante. Às vezes nem sequer são precisas palavras para compreender certas situações. Mas para isso é preciso ser-se ainda mais inteligente. Enfim, é pena que o sr.JBB tenha sempre de mandar o seu (infeliz) comentario para o ar.
Qualquer trabalhador estudante tem direito a um regime especial de frequência de todas as disciplinas de uma licenciatura! Se este regime especial não permite o congelamento de uma nota prática durante 2 anos então qual é a diferença em relação a um regime normal?? Há professores que permitem o congelamento durante 2 anos, mas pelos vistos outros têm a mania que pode fazer tudo o que lhe apetece!
--
Mais uma vez os docentes de lesi pretendem ser diferentes... não é negando direitos aos alunos que contribuimos para que o curso seja cada vez melhor, devemos apoiar aqueles que já se encontram a trabalhar pois são eles que dão visibilidade e prestigio ao nosso curso permitindo abrir novas portas para os recem licenciados. Mas parece que alguns docentes não partilham desta opinião... não se preocupem, não estamos atrás dos vossos empregos, existe mercado para todos...
--
O trabalho não vai ser em conjunto com PPIV?? Na página de PPIV tinha isto relativamente ao congelamento de nota:
CONGELAMENTO DE NOTAS PRATICAS - PPIV 2004/2005
Todos os alunos que pretendam congelar as suas notas praticas obtidas EM ANOS ANTERIORES, devem enviar um email para o endereço congelamentos_PPIV_0405@di.uminho.pt com SUBJECT: Congelamento de Nota e contendo apenas a sua identificação, ou seja, NUMERO, NOME e CURSO. A data limite para tal indicação será o dia 31 de Maio de 2005.
-- M.Ferreira - 16 Mar 2005
--
Uma vez que que este assunto parece interessar alguns dos alunos, vou tentar repetir aqui o argumento apresentado na primeira aula sobre o congelamento das notas práticas.
É da minha opinião que a componente prática da disciplina não se trata de mais um obstáculo à aprovação mas antes uma ajuda na consolidação dos conhecimentos e competências que se pretende que os alunos adquiram ao frequentar (com sucesso) esta disciplina.
Daí que as notas das várias componentes não devam ser consideradas em separado mas como parte de um todo.
A situação excepcional consagrada no RIAPA dos trabalhadores estudantes efectuarem uma disciplina com duas componentes em dois anos consecutivos pode ser justificado pela falta de recursos (neste caso, disponibilidade destes alunos) para poderem frequentar a disciplina tal como ela foi desenhada.
No caso da disciplina de Métodos de Programação II, nesta edição de 2004/2005 e face à inexistência de recursos docentes suficientes, resolvi alargar a excepcionalidade desta situação aos outros alunos.
Esta decisão tem custos associados. Estou convencido de estar a contribuir para que alguns alunos tomem a decisão (errada no meu ponto de vista) de congelar a nota prática do ano anterior, dificultando-lhes por isso mesmo a tarefa de atingirem os objectivos desta disciplina.
Quanto à discrepância entre os critérios usados em MP2 e PP4, apesar de o trabalho prático ser comum, esta partilha tem como objectivos: (1) pela parte dos alunos que vão apresentar os trabalhos de PP4 e de MP2, concentrarem-se apenas num enunciado, (2) pela parte das equipas docentes das duas disciplinas, poupar os poucos recursos que temos para as recepções dos trabalhos.
Pelo que, para os alunos inscritos apenas numa das disciplinas ou que não pretendam realizar a parte prática de alguma delas, esta partilha é irrelevante.
Finalmente, a minha participação nesta discussão, apesar da falta de educação de algumas intervenções acima, deve-se à convicção que tenho que se tratam de excepções que não devem privar a maioria dos alunos da utilidade desta FAQ.
-- JoseBarros - 17 Mar 2005
Será possível colocarem as notas práticas do ano passado online?
Já estão na página. Em breve também estará a lista dos alunso que pediram para congelar a nota.
-- JoseBarros - 16Mar2005
Quantos trabalhos práticos vão existir este ano, para quando (+/-)? E relativamente ás apresentações para quando estão programadas?
-- AlexandreCalisto? - 16 Mar 2005
Vai existir apenas 1. Para ser entregue no final do ano. Com apresentação conjunta com o trabalho de PP4.
Adicionalmente, serão pedidos pequenos trabalhos (facultativos) para serem entregues nas aulas TPráticas.
O peso desta componente facultativa é de 10% da nota final.
-- JoseBarros - 16-Marco-2005
Sendo esta componente facultativa (mas que vale 10%), porquê prejudicar quem não pode assistir às aulas práticas e fazer os respectivos trabalhos - por exemplo alunos com sobreposição de horários ou trabalhadores estudante? Porque não considerar 40% o valor do trabalho prático nestes casos?
A professora das teórico-práticas disse que irá haver um trabalho para o qual teremos 3 semanas para fazer, que será para entregar nas tp e no qual terá-se de aplicar tudo o que se aprendeu nessas aulas. Gostaria de saber se haverá mais alguma informação disponibilizada na página da cadeira sobre esse trabalho e se sim, quando mais ou menos é que estará disponível.
Quanto ao Trabalho Prático, como vêm expressas as horas de partida? 4 digitos seguidos (por exemplo, 1659) ? separados por 2 pontos (16:59) ?
-- AlexandreCarvalho?
Qualquer uma das alternativas. Isto é, fica ao vosso critério.
-- JoseBarros - 06 May 2005
As durações dos voos serão expressas em minutos ou horas:minutos?
-- AlexandreCarvalho?
Idem.
-- JoseBarros - 06 May 2005
No ponto 3, quando assume que a ordem da lista estabelece a prioridade das cargas o que é que devemos inferir disto? que as capacidades de peso e volume dos voos vão-se alterando consoante a alocação das cargas?
-- AlexandreCarvalho?
Não. O que quer dizer é que se eu tiver a alternativa de colocar uma de duas cargas, coloco aquela que aparece em primeiro lugar na lista.
-- JoseBarros - 06 May 2005
Os dois ficheiros de texto que serão usados nos testes vão ser disponibilizados pelo professor?
... ou seremos nós a criar um exemplo? Digo isto porque o volume de dados que o meu ficheiro tem neste momento
é pequeno para testar o desempenho da aplicação.
Já agora uma dúvida simples para o meu caso de testes: podemos ter voos com a mesma origem e mesmo destino, nas mesmas horas, com designações diferentes? Por exemplo TP1201 e TP1202 ??
-- Alvaro Silva - 06 May 2005
No ponto 3, a lista de cargas dada, como sabemos qual é a origem da carga?
Suponho que a origem será comum para todas as cargas.
Eu não sei como os professores pretendem, por aqui a origem está a ser especificada na linha de comandos.
Exemplo: ./mp2 -origem=Lisboa ...
-- AlexandreCarvalho? - 16 May 2005
Quando não é dito nada, e como se trata de uma extensão do trabalho de PP4, estamos a falar de uma mesma origem -- aquela cuja gestão é proposta em PP4.
Mas a sugestão de isso ser feito da linha de comando também me parece reazoável.
-- JoseBarros - 25 May 2005
Um Voo pode comportar mais que uma carga, isto é, se o avião tiver espaço pode levar 1+ cargas? ou apenas uma unica?
Pode e deve levar as cargas que lá couberem.
-- JoseBarros - 25 May 2005
Será que podiam disponibilizar o exame da primeira chamada?
T (2006.02.21): Apresentação da Disciplina. Introdução aos sistemas reactivos. Álgebras e Coalgebras.
Tipos indutivos e coindutivos. Interação e comportamento. Comportamento dos autómatos determinísticos.
-- LuisSoaresBarbosa - 21 Feb 2006
Aula Extra
Em substituição das aulas da semana 22-26, será realizada uma sessão de dúvidas/exercícios no dia 13 de Junho
(terça-feira) às 14.30. Ponto de encontro na sala de atendimento do DI.
Questões a Abordar
Como se caracteriza o paradigma de computação reactivo e qual o interesse do seu estudo?
Como modelar sistemas reactivos e estudar a sua composicionalidade?
Em que condições dois sistemas reactivos podem ser considerados equivalentes ou similares?
Como captar as noções de mobilidade e reconfiguração dinâmica de sistemas reactivos?
Como analisar e prototipar modelos de sistemas reactivos?
Qual a relevância deste paradigma e cálculos associados para a Engenharia do Software?
Programa Resumido
Interação e Comportamento
a.
Introdução aos sistemas reactivos. Noção de interacção e comportamento.
b.
Caso 1: sequências infinitas (de acções) como tipo dos comportamento de autómatos determinísticos.
c.
Noção de tipo coindutivo. Definição e prova por coindução. Cálculo de estruturas coindutivas. Comparação com os tipos indutivos.
d.
Cálculo de sequências infinitas. Codificação em Haskell.
e.
Caso 2: comportamento de autómatos não determinísticos e sistemas de transição de estados.
f.
Definição de morfismo, simulação e bissimulação. Propriedades da bissimulação
g.
Caso 3: dos autómatos aos processos.
Sistemas Reactivos
a.
Estado, interação e concorrência. Noção de processo, traço e comportamento.
b.
Operadores sobre processos. O cálculo CCS: sintaxe e semântica operacional.
c.
Equivalência estrita, equivalência observacional e igualdade de processos. Leis.
d.
Concorrência e não determinismo: o teorema da expansão.
e.
Discussão de exemplos. Modelação e análise de problemas no CWB
f.
Prototipagem funcional de sistemas reactivos
* Sistemas Reactivos com Mobilidade
a.
Noção de mobilidade e reconfiguração dinâmica de processos. Exemplos e aplicações.
b.
Introdução ao cálculo Pi: sintaxe, semântica.
c.
Equivalências para processos móveis. Leis.
f.
Discussão de exemplos. Modelação e análise de problemas no MWB
Communicating and Mobile Processes: the Pi-Calculus, Robin Milner, Cambridge University Press, 1999. Trata-se do livro base para a disciplina. A primeira parte introduz o cálculo base de sistemas reactivos, popularizado sob a designação de Ccs, enquanto a segunda parte aborda o problema da mobilidade e reconfiguração dinâmica de sistemas, constituindo a referência base para o Pi-calculus.
Communication and Concurrency. Robin Milner,Prentice Hall (Hoare Series in Computer Science), 1989. Obra anterior do mesmo autor, é suficiente como introdução a Ccs, mas omissa no que concerne à mobilidade. Se consultar a primeira edição deste livro (1989), tenha à mão a seguinte errata (ps.gz)
The Pi-calculus: A theory of mobile processes, Sangiorgi, D. and Walker, D., Cambridge University Press, 2001.
An Introduction to the _Pi-calculus. J. Parrow, draft (ps.gz) de capítulo análogo no Handbook of Process Algebra, Elsevier, 2001.
O Concurrency Workbench será uma das ferramentas de suporte à disciplina. Neste site pode obter executáveis para Linux e Windows. Ao utilizar o CWB-NC, poderá ainda fazer uso do ccs2dot (tar.gz) paravisualização dos grafos de transição sobre GraphViz por alunos desta disciplina (João Ferreira, Alexandra Mendes e José Proença) em 2002-03.
Supõe-se familiaridade com a linguagem Haskell e com o cálculo de programas funcionais estudado em Métodos de Programação 1. A primeira parte do livro Algebra of Programming (R. Bird e O. de Moor, Prentice-Hall, 1997) é uma excelente introdução a esse cálculo.
Critérios de Avaliação
Componente Teórica (Exame): 70% (nota mínima de 8 valores)
Componente Prática: 30%
A componente prática da nota resulta da avaliação do desempenho nas aulas TP e da realização de uma Ficha de Trabalho, de resolução individual e fora do tempo lectivo, de acordo com o calendário seguinte:
Resultados da Avaliação (26 Julho 2006)
Classificações dos Exames, Prática e Nota Final (Época Normal) (pdf)
Classificações dos Exames, Prática e Nota Final (Época Recurso) (pdf)
-- LuisSoaresBarbosa - 26 Jul 2006
Os exames de recurso podem ser consultados no próximo dia 10 de Março (6ªfeira) das 15h00 às 16h00 no anfiteatro DI A1 (piso 0, junto à recepção).
-- MariaJoaoFrade - 08 Mar 2006
Os exames estarão disponíveis para consulta, 4ªfeira (8 Fev.) entre as 14h30 e as 15h30, no anfitiatro DI A1.
-- MariaJoaoFrade - 07 Feb 2006
Já sairam as notas dos exames da Época Normal.
-- MariaJoaoFrade - 06 Feb 2006
AVISO DE PROVAS ORAIS (para melhoria de nota)
Os exames orais para melhoria de nota serão realizados no dia 8 de Fevereiro (4ª feira), às 9h30. Os alunos deverão esperar na recepção do DI (piso 0).
-- MariaJoaoFrade - 03 Feb 2006
Está aqui (zip) a resolução da ficha 9 (aula prática).
-- MariaJoaoFrade - 05 Dec 2005
Já está disponível o enunciado do 2º trabalho prático.
As apresentações dos trabalhos serão feitas, na semana de 12 Dezembro a 16 de Dezembro, no horário dos turnos práticos.
-- MariaJoaoFrade - 17 Nov 2005
Já está disponível o enunciado do projecto prático para melhoria de nota.
Ver secção Melhorias de Nota.
-- MariaJoaoFrade - 25 Oct 2005
Já está disponível o enunciado do 1º trabalho prático.
As apresentações dos trabalhos serão feitas, na semana de 31 Outubro a 4 de Novembro, no horário dos turnos práticos. Exceptuam-se os turnos de 3ª feira (feriado), que terão que apresentar o trabalho na quarta-feira em horário a marcar. Para os grupos destes turnos, existirá uma folha de marcação de horário na recepção do DI.
-- MariaJoaoFrade - 18 Oct 2005
4ªfeira (dia 28) às 10h00 aula de apresentação no CP1 A3.
-- MariaJoaoFrade - 23 Sep 2005
As aulas práticas começam no dia 3 de Outubro.
-- MariaJoaoFrade - 20 Sep 2005
AVISO PROVAS ORAIS
As provas orais irão realizar-se na 6ªfeira dia 4 de Março, às 10:00. Ponto de encontro: junto à secretaria do DI (piso 2).
AVISO TURNOS 6 e 7 (MBB)
Alteração nas datas de entrega para os turnos 6 e 7. Ficheiro actualizado: Datas das entregas para os alunos dos Turnos 2,3,6 e 7 (MBB)
-- ManuelBernardoBarbosa - 3 Jan 2004
Informações sobre entrega dos trabalhos
A entrega de trabalhos para os alunos dos Turnos 4 e 5 (OMP) será nos dias 3,4 e 5 Jan 2005.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
-- OlgaPacheco - 16 Dec 2004
A entrega de trabalhos para os alunos repetentes que pretendem subir a nota prática, será no dia 3 Jan 2005.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
-- MariaJoaoFrade - 13 Dec 2004
Está já disponível o enunciado dos trabalhos práticos para os alunos inscritos para melhoria de nota.
-- ManuelBernardoBarbosa - 4 Nov 2004
As inscrições nos turnos práticos para os alunos repetentes, serão 3a feira (dia 28 Set) às 11:00 na recepção do DI (piso 0).
A inscrição é individual e por ordem de chegada.
-- MariaJoaoFrade - 23 Sep 2004
AVISO PROVAS ORAIS
As provas orais irão realizar-se na 6ªfeira dia 4 de Março, às 10:00. Ponto de encontro: junto à secretaria do DI (piso 2).
AVISO TURNOS 6 e 7 (MBB)
Alteração nas datas de entrega para os turnos 6 e 7. Ficheiro actualizado: Datas das entregas para os alunos dos Turnos 2,3,6 e 7 (MBB)
-- ManuelBernardoBarbosa - 3 Jan 2004
Informações sobre entrega dos trabalhos
A entrega de trabalhos para os alunos dos Turnos 4 e 5 (OMP) será nos dias 3,4 e 5 Jan 2005.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
-- OlgaPacheco - 16 Dec 2004
A entrega de trabalhos para os alunos repetentes que pretendem subir a nota prática, será no dia 3 Jan 2005.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
-- MariaJoaoFrade - 13 Dec 2004
Está já disponível o enunciado dos trabalhos práticos para os alunos inscritos para melhoria de nota.
-- ManuelBernardoBarbosa - 4 Nov 2004
As inscrições nos turnos práticos para os alunos repetentes, serão 3a feira (dia 28 Set) às 11:00 na recepção do DI (piso 0).
A inscrição é individual e por ordem de chegada.
-- MariaJoaoFrade - 23 Sep 2004
Na actual estrutura da Licenciatura em Engenharia de Sistemas e
Informática, esta é a primeira disciplina de Informática. Por esta
razão, o primeiro grande objectivo desta disciplina é a introdução à
programação de computadores.
Dos vários paradigmas de programação (imperativo, funcional, lógico e
orientado a objectos) apresentados ao longo da licenciatura, nesta
disciplina estuda-se o paradigma funcional, tendo por base a linguagem
de programação Haskell.
Esta abordagem tem a vantagem de não exigir dos alunos grandes
conhecimentos prévios sobre a arquitectura física dos computadores,
para poderem entender e escrever programas funcionais, permitindo, por
esse motivo, trabalhar mais facilmente com turmas heterogéneas em
conhecimentos de informática.
A linguagem Haskell é uma linguagem puramente funcional fortemente
tipada e com um sistema de tipos extremamente rico, o que permite não
só ensinar os conceitos fundamentais da programação (funcional), onde
se incluem tópicos tais como:
tipos de dados, estruturas de controlo, e recursividade;
como também ensinar conceitos avançados, como por exemplo:
funções de ordem superior, polimorfismo, classes, modularidade, e monades.
Programa detalhado
Bibliografia
Fundamentos da Computação, Livro II: Programação Funcional. José Manuel Valença e José Bernardo Barros. Universidade Aberta, 1999.
Introduction to Functional Programming using Haskell. Richard Bird. Prentice-Hall, 1998.
Haskell: the craft of functional programming. Simon Thompson. Addison-Wesley.
Introduction to Functional Programming. Richard Bird and Philip Wadler. Prentice-Hall, 1988.
A avaliação tem uma componente teórica e uma componente prática, ambas
obrigatórias. A nota final será calculada com base na seguinte
fórmula:
Nota Final = NT * 0.6 + NP * 0.4
sendo
NT a nota teórica (nota mínima de 9 valores), obtida através da realização de uma prova individual escrita;
NP a nota prática (nota mínima de 10 valores), resultante da avaliação obtida ao longo das aulas laboratoriais e que terá por base a realização de trabalhos práticos.
Regime de Avaliação Prática
Alunos inscritos para melhoria de nota
A avaliação prática será efectuada através de um trabalho prático a entregar no final do semestre em data a agendar.
O enunciado correspondente está disponível aqui (Enunciado para alunos inscritos para melhoria).
Novos alunos e alunos repetentes sem nota prática.
A inscrição nos turnos laboratoriais é obrigatória (e será feito controlo de
presenças nas aulas). A nota prática resulta da avaliação obtida ao
longo das aulas laboratoriais (avaliação contínua) e terá por base a
realização de 3 fichas de trabalho e 2 trabalhos práticos.
Estudantes trabalhadores.
A inscrição destes alunos nos turnos
laboratoriais é opcional. Caso o aluno opte por não se inscrever
nas aulas laboratoriais, a nota prática será obtida através da
realização de um trabalho prático global (e as aulas laboratorias
poderão ser frequentadas em regime livre).
Alunos repetentes com nota prática positiva.
Os alunos que obtiveram classificação prática positiva no ano anterior
poderão congelar essas notas para o ano corrente.
Para os alunos nestas condições que optem por
não congelar a nota prática, a (nova) nota prática será
obtida através da realização de um trabalho prático global. As aulas
laboratorias poderão ser frequentadas em regime livre.
O ficheiro seguinte contém a lista de alunos em condições de
congelar a nota prática obtida em 2003-2004 (LESI).
A decisão de congelar a nota deverá ser comunicada por e-mail a ManuelBernardoBarbosa.
Metodologia de Inscrições e Formação de Grupos de Trabalho
Cada turno prático terá no máximo 36 alunos inscritos (em regime de avaliação contínua), havendo ainda 3 máquinas (9 lugares) que poderão ser usados (em regime livre) pelos alunos sem inscrição obrigatória nos turnos.
As inscrições dos alunos nos turnos são individuais.
Dentro de cada turno serão formados grupos de 3 alunos.
O trabalho na aula é feito em grupo (fora da aula é como quizerem).
Os exames de recurso podem ser consultados no próximo dia 10 de Março (6ªfeira) das 15h00 às 16h00 no anfiteatro DI A1 (piso 0, junto à recepção).
-- MariaJoaoFrade - 08 Mar 2006
Os exames estarão disponíveis para consulta, 4ªfeira (8 Fev.) entre as 14h30 e as 15h30, no anfitiatro DI A1.
-- MariaJoaoFrade - 07 Feb 2006
Já sairam as notas dos exames da Época Normal.
-- MariaJoaoFrade - 06 Feb 2006
AVISO DE PROVAS ORAIS (para melhoria de nota)
Os exames orais para melhoria de nota serão realizados no dia 8 de Fevereiro (4ª feira), às 9h30. Os alunos deverão esperar na recepção do DI (piso 0).
-- MariaJoaoFrade - 03 Feb 2006
Está aqui (zip) a resolução da ficha 9 (aula prática).
-- MariaJoaoFrade - 05 Dec 2005
Já está disponível o enunciado do 2º trabalho prático.
As apresentações dos trabalhos serão feitas, na semana de 12 Dezembro a 16 de Dezembro, no horário dos turnos práticos.
-- MariaJoaoFrade - 17 Nov 2005
Já está disponível o enunciado do projecto prático para melhoria de nota.
Ver secção Melhorias de Nota.
-- MariaJoaoFrade - 25 Oct 2005
Já está disponível o enunciado do 1º trabalho prático.
As apresentações dos trabalhos serão feitas, na semana de 31 Outubro a 4 de Novembro, no horário dos turnos práticos. Exceptuam-se os turnos de 3ª feira (feriado), que terão que apresentar o trabalho na quarta-feira em horário a marcar. Para os grupos destes turnos, existirá uma folha de marcação de horário na recepção do DI.
-- MariaJoaoFrade - 18 Oct 2005
4ªfeira (dia 28) às 10h00 aula de apresentação no CP1 A3.
-- MariaJoaoFrade - 23 Sep 2005
As aulas práticas começam no dia 3 de Outubro.
-- MariaJoaoFrade - 20 Sep 2005
Na actual estrutura da Licenciatura em Matemática e Ciências de Computação, esta é a primeira disciplina de Informática. Por esta razão, o primeiro grande objectivo desta disciplina é a introdução à programação de computadores.
Dos vários paradigmas de programação (imperativo, funcional, lógico e orientado a objectos) apresentados ao longo da licenciatura, nesta disciplina estuda-se o paradigma funcional, tendo por base a linguagem de programação Haskell.
Esta abordagem tem a vantagem de não exigir dos alunos grandes conhecimentos prévios sobre a arquitectura física dos computadores, para poderem entender e escrever programas funcionais, permitindo, por esse motivo, trabalhar mais facilmente com turmas heterogéneas em conhecimentos de informática.
A linguagem Haskell é uma linguagem puramente funcional fortemente tipada e com um sistema de tipos extremamente rico, o que permite não só ensinar os conceitos fundamentais da programação (funcional), onde se incluem tópicos tais como: tipos de dados, estruturas de controlo, e recursividade; como também ensinar conceitos avançados, como por exemplo: funções de ordem superior, polimorfismo, classes, modularidade, e monades.
Programa detalhado
A avaliação desta disciplina tem duas componentes obrigatórias.
A componente teórica tem um peso de 60% e consiste na realização de uma prova individual escrita (exame)
A componente prática, com um peso de 40%, consiste na realização de dois trabalhos e na avaliação do desempenho nas aulas laboratoriais.
A nota mínima em cada uma das componentes é de 9,5 valores.
Os trabalhos práticos são resolvidos em grupos de 3 alunos (todos do mesmo turno prático).
Os alunos com aprovação na componente prática no ano anterior, podem pedir para essa nota ser congelada.
O ficheiro seguinte contém a lista de alunos em condições de
congelar a nota prática obtida em 2004-2005 (LMCC).
A decisão de congelar a nota deverá ser comunicada por e-mail a Maria João Frade, até ao dia 31 de Outubro de 2005.
Melhorias de Nota
Os alunos que pretendam melhorar a nota a esta disciplina terão de se inscrever nos SAUM para o efeito e realizar um trabalho cujo enunciado está disponível AQUI (ou aqui: enunciado e ficheiros de exemplo). Este trabalho é individual.
A avaliação destes alunos será feita através de um exame oral, onde será apresentado o trabalho e onde serão colocadas questões sobre a generalidade da matéria.
Estes exames orais decorrerão na data prevista para os restantes exames orais da disciplina, i.e., depois das duas chamadas da época normal (data a anunciar nesta página). Até 3 dias antes da oral deverá ser entrege um relatório do trabalho com a listagem do código do programa em anexo, e deverá também ser enviado por mail o .zip do trabalho. AVISO: Estes exames orais serão realizados no dia 8 de FEvereiro (4ª feira), às 9h30. Os alunos deverão esperar na recepção do DI (piso 0).
As apresentações dos trabalhos serão feitas, na semana de 31 Outubro a 4 de Novembro, no horário dos turnos práticos. Exceptuam-se os turnos de 3ª feira (feriado), que terão que apresentar o trabalho na 4ª feira em horário a marcar. Para os grupos destes turnos, existirá uma folha de marcação de horário na recepção do DI.
Na actual estrutura da Licenciatura em Matemática e Ciências de Computação, esta é a primeira disciplina de Informática. Por esta razão, o primeiro grande objectivo desta disciplina é a introdução à programação de computadores.
Dos vários paradigmas de programação (imperativo, funcional, lógico e orientado a objectos) apresentados ao longo da licenciatura, nesta disciplina estuda-se o paradigma funcional, tendo por base a linguagem de programação Haskell.
Esta abordagem tem a vantagem de não exigir dos alunos grandes conhecimentos prévios sobre a arquitectura física dos computadores, para poderem entender e escrever programas funcionais, permitindo, por esse motivo, trabalhar mais facilmente com turmas heterogéneas em conhecimentos de informática.
A linguagem Haskell é uma linguagem puramente funcional fortemente tipada e com um sistema de tipos extremamente rico, o que permite não só ensinar os conceitos fundamentais da programação (funcional), onde se incluem tópicos tais como: tipos de dados, estruturas de controlo, e recursividade; como também ensinar conceitos avançados, como por exemplo: funções de ordem superior, polimorfismo, classes, modularidade, e monades.
Bibliografia
Fundamentos da Computação, Livro II: Programação Funcional. José
Manuel Valença e José Bernardo Barros. Universidade Aberta, 1999.
Introduction to Functional Programming using Haskell. Richard
Bird. Prentice-Hall, 1998.
Haskell: the craft of functional programming. Simon Thompson.
Addison-Wesley.
Introduction to Functional Programming. Richard Bird and Philip
Wadler. Prentice-Hall, 1988.
A Gentle Introduction to Haskell. Paul Hudak, John Peterson and
Joseph Fasel.
Critérios de Avaliação
A avaliação tem uma componente teórica e uma componente prática, ambas
obrigatórias. A nota final será calculada com base na seguinte
fórmula:
Nota Final = NT * 0.6 + NP * 0.4
sendo
NT a nota teórica (nota mínima de 9 valores), obtida através da realização de uma prova individual escrita;
NP a nota prática (nota mínima de 10 valores), resultante da avaliação obtida ao longo das aulas laboratoriais e que terá por base a realização de trabalhos práticos.
Regime de Avaliação Prática
Alunos inscritos para melhoria de nota
A avaliação prática será efectuada através de um trabalho prático a entregar no final do semestre em data a agendar.
O enunciado correspondente está disponível aqui (Enunciado para alunos inscritos para melhoria).
Novos alunos e alunos repetentes sem nota prática.
A inscrição nos turnos laboratoriais é obrigatória (e será feito controlo de
presenças nas aulas). A nota prática resulta da avaliação obtida ao
longo das aulas laboratoriais (avaliação contínua) e terá por base a
realização de 3 fichas de trabalho e 2 trabalhos práticos.
Estudantes trabalhadores.
A inscrição destes alunos nos turnos
laboratoriais é opcional. Caso o aluno opte por não se inscrever
nas aulas laboratoriais, a nota prática será obtida através da
realização de um trabalho prático global (e as aulas laboratorias
poderão ser frequentadas em regime livre).
Alunos repetentes com nota prática positiva.
Os alunos que obtiveram classificação prática positiva no ano anterior
poderão congelar essas notas para o ano corrente (deverão
avisar os docentes). Para os alunos nestas condições que optem por
não congelar a nota prática, a (nova) nota prática será
obtida através da realização de um trabalho prático global. As aulas
laboratorias poderão ser frequentadas em regime livre.
O ficheiro seguinte contém a lista de alunos em condições de
congelar a nota prática obtida em 2003-2004 (LMCC).
A decisão de congelar a nota deverá ser comunicada por e-mail a ManuelBernardoBarbosa.
Metodologia de Inscrições e Formação de Grupos de Trabalho
Cada turno prático terá no máximo 36 alunos inscritos (em regime de avaliação contínua), havendo ainda 3 máquinas (9 lugares) que poderão ser usados (em regime livre) pelos alunos sem inscrição obrigatória nos turnos.
As inscrições dos alunos nos turnos são individuais.
Dentro de cada turno serão formados grupos de 3 alunos.
O trabalho na aula é feito em grupo (fora da aula é como quizerem).
Student: Cupertino Miranda
In this project you will develop a tool for spreadsheet
assessment. Spreadsheet tools can be viewed as programming
environments for non-programmers. Their language of cell references
and formulas offers only low-level expressiveness compared to regular
programming languages. Still, huge numbers of large and often complex
spreadsheets are created and maintained every day in all companies
around the world. You will apply program understanding techniques to
uncover the secrets of spreadsheets, and their potential flaws.
The UMinho Haskell Libraries already provide support for:
a. reading and parsing spreadsheets
b. analyzing the data flow in a spreadsheet
c. program understanding algorithms, such as slicing,formal concept analysis, and type reconstruction.
You will combine and extend this functionality into a tool that
provides insight into spreadsheets beyond Excel's capabilities.
Presentations
Presentation from Cupertino Miranda about following papers:
Header and Unit Inference for Spreadsheets Through Spatial Analyses, Robin Abraham and Martin Erwig. 2004
A User-Centred Approach to Functions in Excel, Simon Peyton-Jones, Alan Blackwell and Margaret Burnett, 2003
Slicing Spreadsheets: An Integrated Methodology for Spreadsheet Testing and Debugging, James Reichwein, Gregg Rothermel, Margaret Burnett, 1999
Spreadsheet Under Scrutiny - Project Report
Under construction
Introduction
Spreadsheet tools can be viewed as programming environments for non-programmers. Their language of cell references and formulas offers only low-level expressiveness compared to regular programming languages.
Still, huge numbers of large and often complex spreadsheets are created and maintained every day in all companies around the world.
In this project i have developed a few tools and respective API for Spreadsheet Analysis.
Project Objectives
Completely read and create a data structure to Spreadsheet understanding.
Add more capabilities to Data-flow graph
Add slicing and chopping analysis
Implement a type inference system using the already implemented algorithm.
Data Structure
Basic Notions
At the beginning of the project there already exist a Schema for the Gnumeric XML file, and a little of this was already been converted to DTD.
With this DTD file was already being generated (by DTDtoHaskell) a Haskell Structure for representation of the Gnumeric content.
In this structure the cell content was represented as a String, and for that reason it was converted to a type Formula.
data Formula
= Var String -- ^ Variables
| Fun String [Formula] -- ^ Function applications
| Ref CellRef (Maybe CellRef) -- ^ Cell or cell block reference
This modification to the data structure is made in the Makefile that generates the file with all the structure and that instances for XmlContent? (Syntax.hs).
Equally in the make file is possible to generate the file SyntaxTermInstances.hs that contains instances for Term and Typeable.
For reading gnumeric files there is the function
readGnumeric :: (Term a, XmlContent a) => FilePath -> IO a
that given the file name it returns the Gmr'Workbook (root element) with cells content as Formulas
This conversion is made by a type unifying strategic function that applies to every cell content the function 'parseFormula'.
In this part of the project i have totally (expected) convert the Schema to DTD and now every possible element of the Gnumeric file is represented in the data structure.
All this processed can be reverted so we can pretty print all the structure. For that already HaXML? already has the function showXML and Formula is instance of Show.
Dataflow Graph
The data-flow graph was one of the things that were previously made.
This graph is generated by a traversal function that for every Reference it creates a relation between the cell that contains the formula and the element referenced.
This was the first approach to data-flow graph, but it has a few problems because it doesn't support References to elements in diferent Sheets. I have resolved the problem by adding Sheet notion to
data CellRef
= CellRef {
sheet :: String, -- ^ Sheet name
colNr :: Int, -- ^ Column index
rowNr :: Int -- ^ Row index
}
and creating a new traversal function that for every Gmr'Sheet runs the previous explained data-flow function.
For the next slicing and chopping was important to have a expanded data-flow graph. For that reason i generalised the previous explained functions to accept as parameter the following functions
collectBlockRefs :: Term a => a -> [CellBlock]
collectCellRefs :: Term a => a -> [CellRef]
that will be applied in all the formulas generating a Gph CellBlock? or a Gph CellRef? respectively.
Results
(under Construction)
Slicing and Chopping
For the slicing and chopping i already had generic functions and the only thing i have implemented was the filtering functions. This functions
filterExpandedDataflow :: Set CellRef -> Gmr'Workbook -> Gmr'Workbook
filterCells :: Set CellBlock -> Gmr'Workbook -> Gmr'Workbook
were created to filter Spreadsheets by some list of cells. This two functions were created so it would be possible to filter by CellRef? and CellBlock? for expanded and normal graphs respectively.
Slicing
Forward - group of cells that contribute to a specified group of cells.
Backward - group of cells that have value contribution from a specified group of cells.
Chopping - Is the interception between a Forward and Backward Slice.
For building the slicing/chopping already exist the sliceOrChopWith function that given a list of elements for sources and sinks and the dataflow graph it returns the list of elements that represent the slice/chop.
This function was already defined in the Haskell Uminho Library.
This report presents the developed work on the project "Strategic Querying of XML Documents".
The results of this project are based on two generic traversal functions, based on Strafunski. One of this functions traverses the child nodes, while the other is a deep traversal function.
One Level Traversal
Deep Traversal
XPath: /X/A
XPath: /X//A
Yellow circles represent collected 'A' items.
Mapping from XPATH, we have "/" as child traversing, and "//" as a deep traversal function. What as done was to create haskell functions (using Strafunski) to represent "/" and "//".
Traversal Functions
As explained before, the solution of te problem was mostly obtained defining twa major functions, as show next:
One Level Traversal Function
taagg cond a= maybe [] id (applyTU strategy a)
where
strategy = allTU (++) [] (adhocTU (constTU []) flp)
flp x = if (cond x) then (return [x]) else (mzero)
Deep Traversal Function
deep:: (Term a, Term [a]) => (Element -> Bool) -> [a] -> [Element]
deep cond = runIdentity.applyTU strategy
where
strategy= collect (adhocTU (constTU []) flp)
flp x=if (cond x) then (return [x]) else (return [])
Query Types
As you can see on the traversal functions defitinion, we only have to define the filtering function for each datatype that a Query can have. The filtering function behaves according to the Query data type received.
Query datatypes are defined as follows:
Student: VitorRodrigues?
In this project you will develop a set of combinators for querying XML
documents expressed in the strafunski library. In particular we would
like to embed the HaQuery language - devoled in the DI/UM - as a set
of strafunski library. As a result, we will be able to define queries
directly in Haskell/Strafunski whithout having to define/update a
language processor for HaQuery as done before.
The Strafunski library already provides support for:
a. Parse/Unparse XML documents via the HaXml library
b. A set of basic combinators to express traversal functions over any data type
c. A prototype implementation of HaQuery and a library of Query combinators (defined by a group of AFP students last year).
You will express the existant HaQuery combinators directly in Strafunski.
The first step will be to express the HaXml cmbinators in Strafusnki, using the HaQuery combinators to generate the query tree.
The second step is to express the HaQuery combinators, directly with Strafunski, avoind the unnecessary creation of the query tree structure.
Recomended Literature
XQuery: a typed functional language for querying XML, Philip Wadler, 2002
A Strafunski Application Letter, Joost Visser and Ralf Laemmel, 2003 This paper presents the Strafunski libraries, and explains how it works, presenting some examples of Strafunski utilization, namely, in Haskell to Cobol reverse engineering, Java code metrics and Haskell re-engineering.
The XQuery Formal Semantics: A Foundation for Implementation and Optimisation, Byron Choi, Mary Fernandez and Jrme Simon, 2002
Sessão Laboratorial 2 Nesta sessão pretende se tomar conhecimento com conceitos básicos da linguagem Haskell , nomeadamente: expressões e sua avaliação, ...
Sessão Laboratorial 1 Nesta primeira sessão pretende se familiarizar os alunos com o ambiente de programação que será utilizado nesta unidade curricular. Admite se ...
Notícias Laboratórios Informática I em Engenharia Informática 1º Ano 1º Semestre Ano lectivo 2006/2007 Apresentação Na actual estrutura da Licenciatura ...
T (2005.02.21) : Apresentação da Disciplina. Noção de refinamento. TP (2005.02.22, 2005.02.24) : Apresentação e marcação de turnos. Generalização das construções ...
Em principio quando é que sairão as notas da primeira chamada? Seria possivel disponibilizarem na página o exame da primeira chamada? Seria bastante util para quem ...
Métodos de Programação I 2005 2006 (anexo) ATENÇÃO: A página oficial da disciplina está alojada em http://www.di.uminho.pt/~jno/html/mpi.html . Esta página destina ...
XML to SQL Conversion Tool Student : RicardoVilaca Project Introduction In this project I have to develop a tool to XML SQL Conversion based on Haskell/Strafunski ...
The following is a list of Undergraduate Project Proposals in the context of the Research.PURe project Grammar Engineering Location: Vrije Universiteit or CWI ...
Haskell Biding to GraphViz Student : João Paulo Barbosa Overview This project consists of creating a Haskell binding to AT T's library. This involves using a Foreign ...
TWiki.Education/Archive Web Preferences The following settings are web preferences of the TWiki.Education/Archive web. These preferences overwrite the site level ...
Strategic Querying of XML Documents Student : VitorRodrigues In this project you will develop a set of combinators for querying XML documents expressed in the strafunski ...
News Welcome to our Education.Archive Wiki! This Wiki is maintained by the LMF research group. If you need help using the Wiki goto the TWiki Web. If you want to ...
Terão lugar (no anfiteatro A1 do DI) as seguintes sessões de esclarecimento de dúvidas: 2a.fa. 14 Fev 10:00, com possibilidade de consulta dos exames (1a. chamada ...
Sessão Laboratorial 3 Assuntos abordados nesta sessão: Obs.: Este guião tem seguimento no da próxima sessão. Definição de funções recursivas A recursividade é um ...
Sessão Laboratorial 4 Este Guião é a continuação do da sessão anterior. Assuntos abordados nesta sessão: Funções de ordem superior simples Nas funções realizadas ...
Os exames de recurso podem ser consultados no próximo dia 10 de Março (6ªfeira) das 15h00 às 16h00 no anfiteatro DI A1 (piso 0, junto à recepção). MariaJoaoFrade ...
Devemos nos restringir unicamente aos operadores Pointfree indicados no enunciado (não há o Either, por exemplo)? Claro que não! Faltam todos os operadores das somas ...
18 Out Já saíram as notas do exame da época especial. 27 Jul Já saíram as notas das orais. 22 Jul Já saíram as notas do exame de recurso. As orais serão no dia ...
Notícias Elementos Lógicos da Programação 3 Licenciatura em Matemática e Ciências da Computação 3º Ano 2º Semestre Ano lectivo 2004 2005 Responsável ...
Notícias Métodos de Programação II 2004 2005 Sugestão de Leitura Robert Floyd, um grande Cientista da Computação, recordado aqui nas palavras de outro grande cientista ...
Ensaios de Jeana Costa, Pedro Bastos e Ana Nunes A criminalidade Informática nos tribunais Gestão do Conhecimento Pay Pal Voto Electrónico Segurança da Informa ...
Ensaios de Elisa Faria, Susana Dourado e Vanessa Silva Sindicância de Dados Pessoais Formas de sindicância do cidadão comum sob os seus dados pessoais constantes ...
Ensaios de Claudio Carvalho, Elsa Barbosa e Silvia Silva A ASSINATURA DIGITAL Cartões Inteligentes Voto Electrónico Protecção dos Dados Pessoais Correio Electr ...
Ensaios de Silvia Vilas Boas Dias, Ana Rita Freitas e Angélica Sofia Campos Preservação da Proriedade Industrial Privacidade dos Dados Clínicos Voto Electrónico ...
Ensaios de Bruno Silva Voto Electrónico A Democracia nos dedos dos Cidadãos. Este trabalho é muito extenso (não respeitou os limites indicados) e repete muito ...
Ensaios de Andreia Leite, Angela Santos e Vera Silva Base de Dados de Recolha Genética (2ª versão) Trabalho bem apresentado focando os argumentos essenciais deste ...
Ensaios de Ana Pereira e Daniela Seixas Ética Hacker trabalho interessante mas acaba por dar pouca informação mesmo sobre eventuais pricípios éticos JoseManuelValenca ...
Ensaios de Albina Pinheiro A INTERNET NA REALIZAÇÃO DE ESCRITURAS E OUTROS ACTOS NOTARIAIS ATÉ QUE PONTO SERÁ FIÁVEL E RECOMENDÁVEL O RECURSO A ESTA FERRAMENTA ...
Ensaios de Henrique Cunha, Cristina Ferreira e Mafalda Magalhães Esteganografia no Processo Civi MafaldaMagalhaes 08 Jun 2005 MafaldaMagalhaes 08 Jun 2005 ...
Ensaios de Eva Sousa, Pedro Miguel Sousa e Manuela Silva Cartão Único AngelicaCampos 06 Jun 2005 Assinatura Digital Voto Electrónico O avanço tecnológico no ...
Ensaios de Susana Dias Tecnologias da Informação e Comunicação na Saúde A Progressiva Informatização no Direito (RE) PENSAR A SOCIEDADE DE INFORMAÇÃO E COMUNICA ...
Ensaios de Bebiana Rafaela Ribeiro, Carla Aguiar e Filipa Martins A informática na saúde Assinatura Digital Cartão Único do Cidadão Criptografia O perfil gen ...
Ensaios de Carla Moreira, Silvia Fonseca e Vera Casto Identificação de dados pessoais sob o ponto vista financeiro Cartão Único Voto Electrónico Violação de Direitos ...
Ensaios de Adelaide Cerqueira e Sandra Pereira Criptografia e Assinatura Digital AdelaideCerqueira 23 May 2005 Segurança Informática Dados Pessoais Escritura ...
Ensaios de Casimiro Rosa e Abilio Ribeiro A INternet e os Direitos de Autor Assinatura Digital Internet: Meio de Ultrapassar Barreiras Phishing: Alerta Máximo ...
Ensaios de Vitor Novo, Manuel Almeida e João Varela Privacidade dos Dados Clínicos Agentes e Eventos A Questão Humana na Segurança da Informacão (parte 1) Faz ...
Ensaios de Jorge Serralheiro, Pedro Lima e Luis Cantanhede Bilhete de Identidade Electrónico BIOMETRIA: “SERÃO MESMO OS OLHOS O ESPELHO DA ALMA” OS DIREITOS DE ...
Ensaios de Catia Matos, Cecilia Cerqueira e Lucia Fernandes Criptografia de Chave Pública: Confidencialidade e Autenticação A Internet: Um Espaço de Comunicação ...
Ensaios de Karina Silva e Eva Mendes Privacidade dos dados clínicos O voto electrónico A assinatura digital O correio electrónico A sociedade da informação ...
Elementos Lógicos da Programação III Projecto Prático Pretende se que modele e analise os dois problemas seguintes usando redes de petri e a ferramenta de model ...
Feb. 17, 2004
May 14, 2004 is the deadline for submission to CoLogNet / Formal Methods Europe Symposium on Teaching Formal Methods 2004Feb 6, 2004
Students interested in the Overture Project please contact to JNO. (NB: the Overture Modelling Language has great resemblance with
VDM++)
Jan 31, 2004
Novas propostas para estágios curriculares em EstagiosProfisionaisJanuary 29, 2004
Invitation to Wiki.
January 21, 2004
We have a new Wiki server for educational purposes!
Welcome to our Education.Archive Wiki!
This Wiki is maintained by the LMF research group.
If you need help using the Wiki goto the TWiki Web. If you want to contribute please register here (this is the case, for instance, for students who have been invited to maintain the pages of a course).
To navigate this Wiki use the links in the side bar.
Programação Funcional Avançada 2004 / 2005 AKA: Advanced Functional Programming General information Advanced Functional Programming is an optional course made available ...
Notas da época de recurso disponibilizadas nesta página JorgeSousaPinto 04 Mar 2006 Notas da época normal disponibilizadas nesta página JorgeSousaPinto ...
The Attack On The Clones project is about the creation of a software clone detection portal. Phase 1 (Opção 3, sep 2003 feb 2004) The first edition of the Attack ...
ChopaChops: view and manipulate Java program graphs Powered by Chocapic! Student : Patrick Machado In this project you will develop an interactive tool to view ...
Chopachops Report This page is under construction... Introdution !ChopaChops is a project for slicing and chopping in program graphs. Starting from the Java program ...
Home Page for the AdvancedFunctionalProgramming Project "Clone Detection in Haskell". To be filled with abundant and pertinent information. Work in progress ...
Aula 1 23 de Fevereiro Não houve aula. Motivo: Simpósio doutoral do DI. Aula 2 2 de Março Apresentação da disciplina. Apresentação do trabalho prático ...
Embedding Disambiguation Rules in the HaGLR System Student : Luís Pedro Machado In this project we will embed a domain specific language to express disambiguation ...
T (2006.10.21a) : Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação implementação ...
Feb. 17, 2004 May 14, 2004 is the deadline for submission to CoLogNet / Formal Methods Europe Symposium on Teaching Formal Methods 2004 Feb 6, 2004 Students interested ...
Notícias Elementos Lógicos da Programação 3 Licenciatura em Matemática e Ciências da Computação 3º Ano 2º Semestre Ano lectivo 2004 2005 Responsável ...
Elementos Lógicos da Programação III Licenciatura de Matemática e Ciências da Computação 3º Ano 2º Semestre Ano lectivo 2003/2004 Ùltima alteração: 12 ...
18 Out Já saíram as notas do exame da época especial. 27 Jul Já saíram as notas das orais. 22 Jul Já saíram as notas do exame de recurso. As orais serão no dia ...
Elementos Lógicos da Programação III Projecto Prático Pretende se que modele e analise os dois problemas seguintes usando redes de petri e a ferramenta de model ...
The following is a list of Undergraduate Project Proposals in the context of the Research.PURe project Grammar Engineering Location: Vrije Universiteit or CWI ...
body { background color : lightgray; font family: Verdana, Arial, Helvetica, sans serif; font size: 12px ; } a:link { text decoration : none ; color : darkblue ...
Haskell Biding to GraphViz Student : João Paulo Barbosa Overview This project consists of creating a Haskell binding to AT T's library. This involves using a Foreign ...
fornecida por todos Sobre as ideias básicas de Criptografia (exigindo um pouco de Matemática) um livro importante é o Applied Cryptography de Bruce Schneier. ...
1 de Março início das aulas JoseManuelValenca 8 de Março devido à minha presença num júri não é possível dar a aula deste dia; nesta semana funciona só o turno ...
Informática Jurídica Licenciatura em Direito 4º Ano 2º Semestre Ano lectivo 2005/2006 Programa Segurança Informática Programa detalhado Bibliografia ...
Ensaios de Helena Ribeiro, Arlindo Barros e Liliana Correia Sociedade de Informação – Cartão Único de Saúde Voto Electrónico Digitaliação de Livros Comércio Electr ...
Ensaios de Regina Fernandes, Teresa Bizarro e Monica Lourenço Operações bancárias on line: insegurança ou desconfiança TeresaBizarro 07 Jun 2005 Declarações ...
Ensaios de Ana Ferreira, Alexandra Cruz e Michelle Pinto A Avaliação de cada trabalho é feita numa escala de D (insatisfatório), C ou C (satisfatório), B ou B (bom ...
Ensaios de Claudio Carvalho, Elsa Barbosa e Silvia Silva A ASSINATURA DIGITAL Cartões Inteligentes Voto Electrónico Protecção dos Dados Pessoais Correio Electr ...
Ensaios de Joana Vilas Boas e Ana Daniela Barbosa Que força probatória terá uma mensagem de correio electrónico? O Voto Electrónico eCash Cifra Cartão Único do ...
Ensaios de Rosa Ribeiro, Claudia Cunha e Eva Fanzeres Assinatura Digital Bases de Dados Genéticos Partilha de Dados Pessoais Novas tecnologias: impacto na sociedade ...
Ensaios de Ana Peixoto e Paula Lopes O Uso das Tecnologias de Informação no âmbito do Direito Processual Penal A Utilização das Novas Tecnologias no Local de Trabalho ...
Ensaios de Jorge Serralheiro, Pedro Lima e Luis Cantanhede Bilhete de Identidade Electrónico BIOMETRIA: “SERÃO MESMO OS OLHOS O ESPELHO DA ALMA” OS DIREITOS DE ...
Ensaios de Ana Araújo Silva e Filipe Macedo Vigilância electrónica: Ponderação de princípios Este tema só perifericamente toca os objectivos deste curso; a exposi ...
Ensaios de Silvia Vilas Boas Dias, Ana Rita Freitas e Angélica Sofia Campos Preservação da Proriedade Industrial Privacidade dos Dados Clínicos Voto Electrónico ...
Ensaios de Vitor Novo, Manuel Almeida e João Varela Privacidade dos Dados Clínicos Agentes e Eventos A Questão Humana na Segurança da Informacão (parte 1) Faz ...
Ensaios de Albina Pinheiro A INTERNET NA REALIZAÇÃO DE ESCRITURAS E OUTROS ACTOS NOTARIAIS ATÉ QUE PONTO SERÁ FIÁVEL E RECOMENDÁVEL O RECURSO A ESTA FERRAMENTA ...
Ensaios de Adelaide Cerqueira e Sandra Pereira Criptografia e Assinatura Digital AdelaideCerqueira 23 May 2005 Segurança Informática Dados Pessoais Escritura ...
Ensaios de Eva Sousa, Pedro Miguel Sousa e Manuela Silva Cartão Único AngelicaCampos 06 Jun 2005 Assinatura Digital Voto Electrónico O avanço tecnológico no ...
Ensaios de Ana Pereira e Daniela Seixas Ética Hacker trabalho interessante mas acaba por dar pouca informação mesmo sobre eventuais pricípios éticos JoseManuelValenca ...
Ensaios de Gloria Soares, Joana Carvalho e Raquel Gomes A Sociedade da Informação A segurança informática A criptografia ... ... JoseManuelValenca 31 May ...
Ensaios de Henrique Cunha, Cristina Ferreira e Mafalda Magalhães Esteganografia no Processo Civi MafaldaMagalhaes 08 Jun 2005 MafaldaMagalhaes 08 Jun 2005 ...
Ensaios de Manuel Ferreira, Vania Rodrigues e Helena Silva O problema dos direitos de autor no mundo informático.. Software LIvre CRIMINALIDADE INFORMÁTICA: SPAM ...
Ensaios de Casimiro Rosa e Abilio Ribeiro A INternet e os Direitos de Autor Assinatura Digital Internet: Meio de Ultrapassar Barreiras Phishing: Alerta Máximo ...
Ensaios de Bebiana Rafaela Ribeiro, Carla Aguiar e Filipa Martins A informática na saúde Assinatura Digital Cartão Único do Cidadão Criptografia O perfil gen ...
Ensaios de Jeana Costa, Pedro Bastos e Ana Nunes A criminalidade Informática nos tribunais Gestão do Conhecimento Pay Pal Voto Electrónico Segurança da Informa ...
Ensaios de Elisa Faria, Susana Dourado e Vanessa Silva Sindicância de Dados Pessoais Formas de sindicância do cidadão comum sob os seus dados pessoais constantes ...
Ensaios de Isabel Nunes, Claudia Pereira e Ana Tavares Voto Electrónico Vantagens da implementação de um sistema de voto alternativo ao tradicional sistema de voto ...
Ensaios de Silvia Pinto e Tania Costa Informática Jurídica Voto Electrónico Assinaturas Digitais Teoria dos Sistemas Cartão Único do Cidadão JoseManuelValenca ...
Ensaios de Karina Silva e Eva Mendes Privacidade dos dados clínicos O voto electrónico A assinatura digital O correio electrónico A sociedade da informação ...
Ensaios de Alvaro Amorim, Carla Costa e Simone Marreiros Bases de Dados com Informação Genética Bom trabalho; claramente exposto e defendido; não tenho a certeza ...
Ensaios de Andreia Leite, Angela Santos e Vera Silva Base de Dados de Recolha Genética (2ª versão) Trabalho bem apresentado focando os argumentos essenciais deste ...
Ensaios de Carla Moreira, Silvia Fonseca e Vera Casto Identificação de dados pessoais sob o ponto vista financeiro Cartão Único Voto Electrónico Violação de Direitos ...
Ensaios de Bruno Silva Voto Electrónico A Democracia nos dedos dos Cidadãos. Este trabalho é muito extenso (não respeitou os limites indicados) e repete muito ...
Ensaios de Helder Oliveira e Luis OLiveira Pirataria Informática (doc) Cartão Comum do Cidadão Contratos na Internet O Preço da Segurança Violação da Correspond ...
Ensaios de Catia Matos, Cecilia Cerqueira e Lucia Fernandes Criptografia de Chave Pública: Confidencialidade e Autenticação A Internet: Um Espaço de Comunicação ...
Ensaios de Susana Dias Tecnologias da Informação e Comunicação na Saúde A Progressiva Informatização no Direito (RE) PENSAR A SOCIEDADE DE INFORMAÇÃO E COMUNICA ...
Sessão Laboratorial 1 Nesta primeira sessão pretende se familiarizar os alunos com o ambiente de programação que será utilizado nesta unidade curricular. Admite se ...
Sessão Laboratorial 2 Nesta sessão pretende se tomar conhecimento com conceitos básicos da linguagem Haskell , nomeadamente: expressões e sua avaliação, ...
Sessão Laboratorial 3 Assuntos abordados nesta sessão: Obs.: Este guião tem seguimento no da próxima sessão. Definição de funções recursivas A recursividade é um ...
Sessão Laboratorial 4 Este Guião é a continuação do da sessão anterior. Assuntos abordados nesta sessão: Funções de ordem superior simples Nas funções realizadas ...
23/02/2007 : Já disponíveis as notas da época de recurso. 19/02/2007 : O exame de recurso será realizado na 4ª feira, às 14:30 no DI0.11. O exame incluirá as componentes ...
Notícias Laboratórios Informática I em Engenharia Informática 1º Ano 1º Semestre Ano lectivo 2006/2007 Apresentação Na actual estrutura da Licenciatura ...
T (2004.09.23) : Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação implementação. ...
T (2005.02.21) : Apresentação da Disciplina. Noção de refinamento. TP (2005.02.22, 2005.02.24) : Apresentação e marcação de turnos. Generalização das construções ...
Sessão de esclarecimento de dúvidas na próxima 2ª feira (dia 18) às 14:30 na sala DI 0.02 . MariaJoaoFrade 12 Jul 2005 Os testes poderão ser consultados na ...
T (2006.02.21) : Apresentação da Disciplina. Introdução aos sistemas reactivos. Álgebras e Coalgebras. Tipos indutivos e coindutivos. Interação e comportamento. Comportamento ...
Terão lugar (no anfiteatro A1 do DI) as seguintes sessões de esclarecimento de dúvidas: 2a.fa. 14 Fev 10:00, com possibilidade de consulta dos exames (1a. chamada ...
Métodos de Programação I 2005 2006 (anexo) ATENÇÃO: A página oficial da disciplina está alojada em http://www.di.uminho.pt/~jno/html/mpi.html . Esta página destina ...
Devemos nos restringir unicamente aos operadores Pointfree indicados no enunciado (não há o Either, por exemplo)? Claro que não! Faltam todos os operadores das somas ...
Em principio quando é que sairão as notas da primeira chamada? Seria possivel disponibilizarem na página o exame da primeira chamada? Seria bastante util para quem ...
Notícias Métodos de Programação II 2004 2005 Sugestão de Leitura Robert Floyd, um grande Cientista da Computação, recordado aqui nas palavras de outro grande cientista ...
FAQ de Métodos de Programação II Índice: Nas pautas que saíram relativamente ao ano 2004/05, alguns alunos têm como nota ' '. Em termos práticos, a que se resume ...
Os exames de recurso podem ser consultados no próximo dia 10 de Março (6ªfeira) das 15h00 às 16h00 no anfiteatro DI A1 (piso 0, junto à recepção). MariaJoaoFrade ...
AVISO PROVAS ORAIS As provas orais irão realizar se na 6ªfeira dia 4 de Março, às 10:00 . Ponto de encontro: junto à secretaria do DI (piso 2). AVISO TURNOS ...
Notícias Programação Funcional em Matemática e Ciências de Computação 1º Ano 1º Semestre (7001N7) Ano lectivo 2005/2006 (anterior) Programa Na actual ...
Resultados do Trabalho Prático nº 1 Grupo Trabalho nº1 G1 de Informação do Centro de Saúde de Amares G2 de Informação da Câmara Municipal de Braga G3 ...
SpreadSheet under Scrutiny Student : Cupertino Miranda In this project you will develop a tool for spreadsheet assessment. Spreadsheet tools can be viewed as programming ...
Spreadsheet Under Scrutiny Project Report Under construction Introduction Spreadsheet tools can be viewed as programming environments for non programmers. Their ...
Project Report This report presents the developed work on the project "Strategic Querying of XML Documents". The results of this project are based on two generic traversal ...
Strategic Querying of XML Documents Student : VitorRodrigues In this project you will develop a set of combinators for querying XML documents expressed in the strafunski ...
News Welcome to our Education.Archive Wiki! This Wiki is maintained by the LMF research group. If you need help using the Wiki goto the TWiki Web. If you want to ...
This is a subscription service to be automatically notified by e mail when topics change in this Education/Archive web. This is a convenient service, so you do not ...
TWiki.Education/Archive Web Preferences The following settings are web preferences of the TWiki.Education/Archive web. These preferences overwrite the site level ...
TWiki's Education/Archive web /view/Education/Archive The web for users, groups and offices. TWiki is a Web Based Collaboration Platform for the Corporate World ...
XML to SQL Conversion Tool Student : RicardoVilaca Project Introduction In this project I have to develop a tool to XML SQL Conversion based on Haskell/Strafunski ...
This is a subscription service to be automatically notified by e-mail when topics change in this Education/Archive web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:
Format: <space><space><space>, followed by: * Main.yourWikiName (if you want that the e-mail address in your home page is used) * Main.yourWikiName - yourEmailAddress (if you want to specify a different e-mail address) * Main.anyTWikiGroup (if you want to notify all members of a particular TWikiGroup)
Related topics:TWikiUsers, TWikiRegistration
The following settings are web preferences of the TWiki.Education/Archive web. These preferences overwrite the site-level preferences in TWikiPreferences, and can be overwritten by user preferences (your personal topic, i.e. TWikiGuest in the TWiki.Main web)
Preferences:
List of topics of the TWiki.Education/Archive web:
Set WEBTITLE = Education.Archive
Set WEBBGCOLOR = %6699CC
Web specific background color: (Pick a lighter one of the StandardColors)
If yes, Set SITEMAPLIST = on, and add the "what" and "use to..." description for the site map. Make sure to list only links that include the name of the web, e.g. Education/Archive.Topic links.
Set SITEMAPLIST = on
Set SITEMAPWHAT = Education.Archive Wiki.
Set SITEMAPUSETO = ...collaborate on
Exclude web from a web="all" search: (Set to on for hidden webs)
Set NOSEARCHALL =
Default template for new topics and form(s) for this web:
WebTopicEditTemplate? : Default template for new topics in this web. (Site-level is used if topic does not exist)
Web preferences that are not allowed to be overridden by user preferences:
Set FINALPREFERENCES = WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME
Notes:
A preference is defined as: 6 spaces * Set NAME = value Example:
Set WEBBGCOLOR = #FFFFC0
Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
When you write variable %WEBBGCOLOR% , it gets expanded to #6699CC .
The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
You can introduce new preferences variables and use them in your topics and templates. There is no need to change the TWiki engine (Perl scripts).
TWiki's Education/Archive web
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive
The web for users, groups and offices. TWiki is a Web-Based Collaboration Platform for the Corporate World.en-usCopyright 2020 by contributing authorsTWiki Administrator [webmaster@di.uminho.pt]The contributing authors of TWikiTWikiDIUM.Education/Archive
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive
/twiki/pub/Main/LocalLogos/um_eengP.jpgMenuTopics
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/MenuTopics
AeC AFP CA CriptoBio EDFS EC DSI ELP1 ELP2 ELP3 IJ LAD LabMF LI1 LC MFP1 MFP2 MP1 MP2 MP4 Opcao III PF PP1 PP2 Estágios Projectos PhD@DI (last changed by JoseBacelarAlmeida)2008-09-19T13:37:28ZJoseBacelarAlmeidaLI1Aula2
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/LI1Aula2
Sessão Laboratorial 2 Nesta sessão pretende se tomar conhecimento com conceitos básicos da linguagem Haskell , nomeadamente: expressões e sua avaliação, ... (last changed by JoseBarros)2007-10-09T12:28:47ZJoseBarrosLI1Aula1
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/LI1Aula1
Sessão Laboratorial 1 Nesta primeira sessão pretende se familiarizar os alunos com o ambiente de programação que será utilizado nesta unidade curricular. Admite se ... (last changed by OlgaPacheco)2007-10-04T11:06:18ZOlgaPachecoLaboratoriosInformatica1
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/LaboratoriosInformatica1
Notícias Laboratórios Informática I em Engenharia Informática 1º Ano 1º Semestre Ano lectivo 2006/2007 Apresentação Na actual estrutura da Licenciatura ... (last changed by JoseBarros)2007-10-03T09:39:08ZJoseBarrosWebSearchAdvanced
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/WebSearchAdvanced
(last changed by TWikiGuest)2007-05-17T14:51:41ZguestProgramacaoFuncional
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/ProgramacaoFuncional
Notícias Programação Funcional em Matemática e Ciências de Computação 1º Ano 1º Semestre (7001N7) Ano lectivo 2005/2006 (anterior) Programa Na actual ... (last changed by MariaJoaoFrade)2007-02-23T17:59:36ZMariaJoaoFradeWebLeftBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/WebLeftBar
Topics: (last changed by JoseBacelarAlmeida)2007-02-13T02:58:01ZJoseBacelarAlmeidaXMLtoSQLConversionToolAFPProject
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/XMLtoSQLConversionToolAFPProject
XML to SQL Conversion Tool Student : RicardoVilaca Project Introduction In this project I have to develop a tool to XML SQL Conversion based on Haskell/Strafunski ... (last changed by JoseBacelarAlmeida)2007-02-12T19:32:09ZJoseBacelarAlmeidaWebPreferences
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/WebPreferences
TWiki.Education/Archive Web Preferences The following settings are web preferences of the TWiki.Education/Archive web. These preferences overwrite the site level ... (last changed by JoseBacelarAlmeida)2007-02-12T19:20:19ZJoseBacelarAlmeidaWebHome
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/WebHome
News Welcome to our Education.Archive Wiki! This Wiki is maintained by the LMF research group. If you need help using the Wiki goto the TWiki Web. If you want to ... (last changed by JoseBacelarAlmeida)2007-02-12T19:20:18ZJoseBacelarAlmeidaStrategicXMLQueryingAFPProject
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/StrategicXMLQueryingAFPProject
Strategic Querying of XML Documents Student : VitorRodrigues In this project you will develop a set of combinators for querying XML documents expressed in the strafunski ... (last changed by JoseBacelarAlmeida)2007-02-12T19:20:18ZJoseBacelarAlmeidaProgramacaoFuncional0405
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/ProgramacaoFuncional0405
Programação Funcional em Matemática e Ciências de Computação 1º Ano 1º Semestre Ano lectivo 2004/2005 Notas Notas do exame de Recurso Notas ... (last changed by JoseBacelarAlmeida)2007-02-12T19:15:22ZJoseBacelarAlmeidaParadigmasProgramacaoI0405
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/ParadigmasProgramacaoI0405
Notícias Paradigma da Programação I em Engenharia de Sistemas e Informática 1º Ano 1º Semestre (5301P3) Ano lectivo 2004/2005 (anteriores) Notas ... (last changed by JoseBacelarAlmeida)2007-02-12T19:15:21ZJoseBacelarAlmeidaRTp1
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/RTp1
Resultados do Trabalho Prático nº 1 Grupo Trabalho nº1 G1 de Informação do Centro de Saúde de Amares G2 de Informação da Câmara Municipal de Braga G3 ... (last changed by OlgaPacheco)2005-04-07T11:08:21ZOlgaPachecoSpreadsheetUnderScrutinyAFPProjectReport
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/SpreadsheetUnderScrutinyAFPProjectReport
Spreadsheet Under Scrutiny Project Report Under construction Introduction Spreadsheet tools can be viewed as programming environments for non programmers. Their ... (last changed by CupertinoMiranda)2005-03-05T16:45:42ZCupertinoMirandaSpreadsheetUnderScrutinyAFPProject
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/SpreadsheetUnderScrutinyAFPProject
SpreadSheet under Scrutiny Student : Cupertino Miranda In this project you will develop a tool for spreadsheet assessment. Spreadsheet tools can be viewed as programming ... (last changed by CupertinoMiranda)2005-03-04T11:43:25ZCupertinoMiranda
Advanced Functional Programming is an optional course made available for 5th year students of the following degrees:
5309?? - Licenciatura em Engenharia de Sistemas e Informática
7009?? - Licenciatura em Matemática e Ciências da Computação
Course Staff
(Alphabetically ordered by surname) J.C. Bacelar, J.B. Barros, M.A. Cunha, J.N. Oliveira J.S. Pinto, J.A. Saraiva (course leader), Joost Visser,
Structure of the Course
The course is organised into two parts:
A set of seminars introducing relevant topics to be covered. This seminars will be primarily given by the students. Some more advanced material, however, can/will be presented by the course lecturers or by guests visiting the department.
In the second, more substantial part of the course, students will develop a project (see List of Projects Available).
Number of students: Minimum 5, maximum 10.
Assessment
The following three items will be taken into account for student evaluation:
A - Background lecture
The students will deliver a short lecture (20m) introducing one of the topics covered in the course.
B - Brief Project/Tool Presentation
The different groups will give a lecture (30m) presenting the project they have chosen for development and the tool(s) that will be used in this task.
C - Project Presentation and Report
Each group will give a lecture presenting the project.
The final mark is computed according to the formula:
Week 1 (2004.10.06): kick off: definition of topics and projects
Week 2 (2004.10.13): meetings with supervisors
Week 3 (2004.10.17): talk by Simon Thompson
When/Where: Oct 20nd, 3pm, room DI-A1
Title: Refactoring Functional Programs
Abstract: Refactoring is about improving the design of existing computer programs and systems; as such it is familiar to every programmer, software engineer and designer. Its key characteristic is the focus on structural change, strictly separated from changes in functionality. A structural change can make a program simpler, by removing duplicate code, say, or can be the preparatory step for an upgrade or extension of a system. It is characteristic of refactorings that they are 'diffuse' and 'bureaucratic': consider the example of the simplest possible refactoring: renaming a component of a program. To effect this change requires not only the component definition to be changed, but also every use of the component must be similiarly modified. This involves changing every file/module which might use the component, potentially tens or hundreds of modules. Moreover, it is equally vital not to change any components hidden in other parts of the system which happen to share the same name. Of course, it is possible to do refactorings 'by hand', but this process is tedious and, more importantly, error-prone. Automated support for refactorings makes them safe and easy to perform and also secure in their implementation. The 'Refactoring Functional Programs' project comprising Huiqing Li, Claus Reinke and Simon Thompson is building the HaRe system to support refactorings for Haskell programs. HaRe is designed as a serious tool for use by practising programmers: HaRe supports the whole of the Haskell; it is integrated into standard development environments and it preserves the 'look and feel' of refactored programs. HaRe is built using a number of existing libraries: 'Programatica' provides tools on which to build the language-analysis components, and 'Strafunski' gives general support for tree transformations.
Week 4 (2003.10.24): students project presentations (item B)
Week 5 (2004.11.31): talk by Joost Visser
When/Where: Oct 28, 16:00-18:00, room DI-1.04
Title: Strafunski: a Haskell-centered bundle for generic programming and language processing
Abstract: Strafunski is a bundle of a combinator library and various generative tools that support key tasks in language processing: parser generation and traversal. The traversal support is based on the notion of functional strategies: generic functions that can traverse into terms of any type while mixing type-specific and uniform behaviour. The parsing support is involves connectivity to the Generalized LR parser SGLR. Finally, an enhanced version of DrIFT ensures that traversal and parsing support can easily be deployed for (extremely) large languages such as Java or Cobol. The following will be covered in the talk:
Essentials of Strafunski: concepts and architecture, relationship to GHC's Data.Generics.
Hands-on session of strategic programming with Strafunski.
Week 8 (2003.11.24): Tutorials by Doaitse Swierstra
When/Where: Nov 23, 14:00-16:00, room Sala de Reuniões
Title: Linear, Online, Functional Pretty Printing
Abstract: We present an implementation of Oppen's Pretty printing solution in Haskell. The algorithm is linear in the size of the input, independent of the line width, uses limited look ahead, and has online behaviour.
Title: Parsing permutation phrases
Abstract: A permutation phrase is a sequence of elements (possibly of different types) in which each element occurs exactly once and the order is irrelevant. Some of the permutable elements may be optional. We show how to extend a parser combinator library with support for parsing such free-order constructs. A user of the library can easily write parsers for permutation phrases and does not need to care about checking and reordering the recognized elements. Applications include the generation of parsers for attributes of XML tags and Haskell's record syntax.
Week 9 (2003.12.01):
Luís Pedro Machado presents the project: Embedding Disambiguation Rules in the HaGLR System
meetings with supervisors
Week 10 (2003.12.08): J.M.Valença
Monadic Strategies - the teachers allocation problem
Notas da época de recurso disponibilizadas nesta página
-- JorgeSousaPinto - 04 Mar 2006
Notas da época normal disponibilizadas nesta página
-- JorgeSousaPinto - 07 Feb 2006
Disponíveis nesta página:
Notas do TP
Slides relativos ao 3o. capítulo da matéria (Problemas NP-completos)
-- JorgeSousaPinto - 15 Dec 2005
Disponíveis nesta página os slides relativos ao primeiro capítulo da matéria (Análise de Algoritmos) e um conjunto de enunciados de exercícios sobre este tema.
-- JorgeSousaPinto - 19 Nov 2005
Disponível nesta página o enunciado do trabalho prático
-- JorgeSousaPinto - 29 Oct 2005
Já disponíveies os slides relativos ao primeiro capítulo da matéria (Grafos)
-- JorgeSousaPinto - 26 Sep 2005
Introdução à Análise de Algoritmos Casos de Estudo:
Algoritmos de Ordenação
Algoritmos de Grafos
Problemas NP-completos
[P] Estruturas de Dados Fundamentais: Questões de Eficiência na Pesquisa; Árvores AVL e Tabelas de “Hash”; sua Realização na Linguagem C;
Programa Detalhado
Grafos: Conceitos e Algoritmos Fundamentais
Grafos: conceitos básicos e representação em memória de computador
Algoritmos elementares: pesquisas (em largura e em profundidade)
Algoritmos para determinação de árvores geradoras mínimas
Algoritmos para determinação de caminhos mais curtos
Estratégias algorítmicas: algoritmos "greedy''
Algoritmos para determinação do fecho transitivo de um grafo
Introdução à Análise de Algoritmos Casos de Estudo:
Algoritmos de Ordenação
Algoritmos de Grafos
Problemas NP-completos
[P] Estruturas de Dados Fundamentais: Questões de Eficiência na Pesquisa; Árvores AVL e Tabelas de “Hash”; sua Realização na Linguagem C;
Bibliografia
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms. MIT Press, Cambridge,Mass., second edition, 2001.
Robert L. Kruse, Bruce P. Leung, and Clovis L. Tondo. Data Structures and Program Design in C. Prentice Hall, second edition, 1997.
Donald E. Knuth. The Art of Computer Programming : (1) Fundamental Algorithms, (2) Seminumerical Algorithms, (3) Sorting and Searching. Addison/Wesley, third edition, 1997/98. 3 volumes.
Notas da época de recurso disponibilizadas nesta página
-- JorgeSousaPinto - 04 Mar 2006
Notas da época normal disponibilizadas nesta página
-- JorgeSousaPinto - 07 Feb 2006
Disponíveis nesta página:
Notas do TP
Slides relativos ao 3o. capítulo da matéria (Problemas NP-completos)
-- JorgeSousaPinto - 15 Dec 2005
Disponíveis nesta página os slides relativos ao primeiro capítulo da matéria (Análise de Algoritmos) e um conjunto de enunciados de exercícios sobre este tema.
-- JorgeSousaPinto - 19 Nov 2005
Disponível nesta página o enunciado do trabalho prático
-- JorgeSousaPinto - 29 Oct 2005
Já disponíveies os slides relativos ao primeiro capítulo da matéria (Grafos)
-- JorgeSousaPinto - 26 Sep 2005
The first edition of the Attack On The Clones project was a project carried out in the context of Opção 3 of LESI.
Status: finished
Project description
Create a Clone Detection Portal. Clones are duplicate pieces of software that generally result from copy-paste techniques in programming. Clones can differ slightly, for instance in the names of variables or in the exact order of statements and declarations. A pragmatic technique for detecting clones is to compute metrics over the code, and compare the metrics. If the metrics for two pieces are (almost) identical, they are clones. In this project you will create a web site where one can (i) upload Java source code to be subjected to metric-based clone detection, and (ii) inspect the detection results.
Team
Project description
The project is based on the detection of similar source code in Java source code files. One of the major reasons why clones occur is code reuse by copying a pre-existing program fragment. Code clones are one of the factors that degrade the structure of the software and lower the software quality. If one changes a code clone, he/she must also update all other copies and that can raise the maintenance cost. It is also useful to know wich parts of different source codes are clones to each other.
The result of the project is the next step of the 1. edition of the clone detection portal. Because the 1. edition was designed for testing only two Java projects in one "detection", this was changed and now the portal supports the submition of more projects. Therefore the way of metrics extraction had to be changed; metrics are extracted from each project directly after the submition. The time needed to calculate metrics remains the same as in the previous version-can increase drastically when computing large projects source code. Because it is very useful to know which parts of a project are similar to other ones-contain similar source code, the option of comparing the project to itself was added also. The problem of finding out if duplicated source code is spread out over a single project shouldn't be one anymore. After the metrics have been computed, the detection of clones can be initialised either by comparing projects metrics (overlap of projects metrics and overlap of class comparison between two projects) and/or by a line-by-line comparison with the later also supporting a graphical representation of the cloned lines. When detecting clones, both ways should be taken in account. For validation purposes different editions of the JJTraveler tool and some students projects were used.
Team
ChopaChops: view and manipulate Java program graphs
Powered by Chocapic!Student: Patrick Machado
In this project you will develop an interactive tool to view and
manipulate various kinds of graphical representations of Java
programs. Your starting point is an initial version of the tool
(called ChopaChops) that can already:
a. parse Java
b. derive inheritance, import, and nesting relations
c. display these relations in a graph
d. perform slicing and chopping on this graph
Starting from this basis, you can make improvements such as:
e. derive data flow and control flow relations
f. compute some graph-based program metrics
g. support more graph manipulations
h. improve the interactive interface
You will be using and extending functionality offered by the UMinho
Haskell Libraries to accomplish these tasks.
ChopaChops is a project for slicing and chopping in program graphs. Starting from the Java program source code, this tool can generate graphs with relation information.
Objectives
Work already done - PackageGraphs
On the moment I took the project, much work was already done.
ChopaChops could already do things like:
Java parsing to an haskell abstract syntax tree
Creation of Package Graphs, which contains class-based relations like:
Imports
Inheritance
Implementation
Nesting
Visualization of these relations in a graph
Metrics on graphs
Implementation of slicing and chopping on the graphs
My Extension - Call Graphs
Starting from the work done, I extended the libraries, adding some method-based relations:
Method invocation
Method nesting in classes
Call Graphs in haskell
-- | Call Graphs are labeled relations
type TWiki.CallGraph
= LRel CGNode CGNode TWiki.CGEdgeType
-- | A node may be either a Class or a Method
data CGNode = CGClass TWiki.ClassName
| CGMethod TWiki.ClassName TWiki.MethodName [ParameterType]
...
-- | Function to create a TWiki.CallGraph for an AST
java2ccg :: (Term a, TWiki.MonadPlus m)
=> CGNode -- Current node
-> Declarations -- Declarations context
-> a -- Term to convert to Call Graph
-> m TWiki.CallGraph
-- | Function to convert a Call Graph to dot format, ready to feed the TWiki.GraphViz tool
cg2dot :: String -> TWiki.CallGraph -> String
Declarations Environment
I provide a basic API for Declarations manipulation
Here is an extract of it:
emptyDec :: Declarations
appendDec :: Declarations -> Declarations -> Declarations
addGlobalDec :: Declarations -> (TWiki.ClassName, TWiki.MemberName) -> TWiki.TypeName -> Declarations
...
-- | General funcion for getting a variable's/member's type
getType :: (TWiki.MonadPlus m) => Declarations -> TWiki.ClassName -> TWiki.MemberName -> m TWiki.TypeName
-- | Generic function to collect global variable declarations, providing the AST
collectMembers :: (Term a, TWiki.MonadPlus m) => TWiki.ClassName -> a -> m Declarations
Type Inference System
To determine which classes were getting method invocations, it was necessary to buid a type inference system.
To accomplish that task I used strafunsky to do generic AST traversals.
So, I came up wit a function called findTypeOf which has the flollowing type signature:
findTypeOf :: (Term a, MonadPlus m) => Declarations -> ClassName -> a -> m TypeName
This function (tries) to find out the type of any entity, provided it is an instance of Term. We have to provide the environment (Declarations) and the class name on wich we are trying to find the type of an entity.
The Tool - ChopaChopsOnline
ChopaChopsOnline is a tool, developed with WASH, wich interfaces the developed librarires with the user. Basicaly, it is a web , wich can be run from a Web Server.
The user, with this tool, can perform operations like:
Upload zip archives, containing Java source files (all other filetypes are simply discarded)
Visualize both Package and Call Graphs
Visualize some graph metrics such as:
Tree impurity
Level count (strongly connected components)
Non singleton levels
Size of the largest level
...
Perform slicing and chopping on these graphs (Package and Call graphs), given the sources and sinks sets
Web interface:
Chopping:
Example
Class Foo:
Class Bar:
Callgraph:
Future Work
Although much progress has been done regarding program slicing, I must state that this project is far from being a complete approach to Java Program Slicing.
So, there is still much work to do in the future, to extend this tool.
I will enumerate some ways to evolve, although there may be others:
Extend the type inference system to support more types
Compute more graph metrics
Continue to move to lower level relations:
Data flow
Control
Problems
Hard to understand big graphs (real world java programs)
Type inference system not fully implemented
Not working with compiled classes
Does not handle some java features
Inheritance / Implementation
Static methods
Exception handling
Conclusion
Nice progresses towards full program slicing in Java
At the moment there is no support for many Java features
Aula 1 -- 23 de Fevereiro Não houve aula. Motivo: Simpósio doutoral do DI.Aula 2 -- 2 de Março Apresentação da disciplina. Apresentação do trabalho prático 1.Aula 3 -- 9 de Março E-learning. Apresentação do conceito e análise de alguns documentos sobre o tema.Aula 4 -- 16 de Março Open Source Software. Apresentação do conceito e análise de alguns documentos sobre o tema.Aula 5 -- 23 de Março Introdução ao Latex. Apresentação de exemplos.Aula 6 -- 30 de Março Realização do trabalho prático 1.Aula 7 -- 6 de Abril Introdução ao UML. Diagramas de casos de uso.Realização do trabalho prático 1.Aula 8 -- 20 de Abril Não houve aula. Motivo: doença.Aula 9 -- 27 de Abril Apresentação oral do trabalho nº 1.Aula 10 -- 4 de Maio UML: Diagramas de actividade e diagramas de transição de estados. Resolução de exercícios.Aula 11 -- 11 de Maio UML: Diagramas de classes. Resolução de exercícios.Aula 12 -- 18 de Maio Não há aula. Motivo: Enterro da Gata.Aula 13 -- 25 de Maio UML: Resolução de exercícios.Aula 14 -- 1 de Junho Apresentação oral do trabalho nº 2.
Aula 1 -- 23 de Fevereiro Não houve aula. Motivo: Simpósio doutoral do DI.Aula 2 -- 2 de Março Apresentação da disciplina. Apresentação do trabalho prático 1.Aula 3 -- 9 de Março E-learning. Apresentação do conceito e análise de alguns documentos sobre o tema.Aula 4 -- 16 de Março Open Source Software. Apresentação do conceito e análise de alguns documentos sobre o tema.Aula 5 -- 23 de Março Introdução ao Latex. Apresentação de exemplos.Aula 6 -- 30 de Março Realização do trabalho prático 1.Aula 7 -- 6 de Abril Introdução ao UML. Diagramas de casos de uso.Realização do trabalho prático 1.Aula 8 -- 20 de Abril Não houve aula. Motivo: doença.Aula 9 -- 27 de Abril Apresentação oral do trabalho nº 1.Aula 10 -- 4 de Maio UML: Diagramas de actividade e diagramas de transição de estados. Resolução de exercícios.Aula 11 -- 11 de Maio UML: Diagramas de classes. Resolução de exercícios.Aula 12 -- 18 de Maio Não há aula. Motivo: Enterro da Gata.Aula 13 -- 25 de Maio UML: Resolução de exercícios.Aula 14 -- 1 de Junho Apresentação oral do trabalho nº 2.
Desenvolvimento de Sistemas de Informação
Licenciatura em Administração Pública 3º Ano - 2º Semestre Ano lectivo 2005/2006
Embedding Disambiguation Rules in the HaGLR System
Student: Luís Pedro Machado
In this project we will embed a domain specific language to express
disambiguation rules in the HaGLR system: A Generalised LR parser
generator. Such disambiguation rules "work" very much like precedence
and priority rules used by YACC-like systems. Traditional techniques
use a language processor for processing the disambiguation "language"
and, then, combine them with the parser (either buy applying such
rules at parse time , or by applying them as a filter over the
resulting set of abstract syntax trees).
The UMinho Haskell Libraries already provide support for:
a. Generalised LR parsing. The HaGLR system is a GLR parser generator.
b. Parsing SDF grammars, that includes a large set of real programming language grammars defintions.
c. The construction and visualization of the resulting XML parse trees.
You will define a language to express disambiguation rules (based on
exiting ones). Then you will implement a function that given a
sentence of that langauge (ie, a set of rules) and the resulting parse
forest and it selects the right tree(s).
Recomended Literature
Disambiguation Filters for Scannerless Generalized LR Parsers, M.G.J. van den Brand, J. Scheerder, J.J. Vinju, and E. Visser, 2002
Pure Functional Parsing, Peter Ljunglof, 2002
Parser Generation for Interactive Environments, J. Rekers, 1992
T (2006.10.21a): Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação-implementação. Objectivos e programa da disciplina; sua integração no plano curricular do curso.
T (2006.10.21b): Introdução à modelação de sistemas computacionais em VDM-SL. Tipos e invariantes. Especificação de operações. Estudo de um caso.
T (2006.11.04a): Conclusão da aula anterior. Apresentação da ferramenta VDMTools.
T (2006.11.04b): A linguagem de especificação VDM-SL: expressão de propriedades em lógica de 1a ordem. Problemas de definição.
T (2006.11.11a e 11b): Não houve aula.
T (2006.12.9a): A linguagem de especificação VDM-SL: modelação de problemas com conjuntos e sequências. Polimorfismo e ordem superior (exemplos). Especificação ímplicita vs explícita. Funções vs operações.
Exemplo: cálculo da raíz quadrada (especificação disponível aqui).
T (2006.12.9b): A linguagem de especificação VDM-SL: modelação de problemas com correspondências. O caso do sistema de gestão de contas bancárias.
Especificação funcional (BAMS) e orientada ao estado (SBAMS).
T (2006.12.16a): Aula laboratorial em VDMTools.
T (2006.12.16b): Aula laboratorial em VDMTools.
T (2007.01.20a): Estudo de caso em modelação VDM: multiconjuntos.
T (2007.01.20b): Discussão dos projectos individuais de modelação.
T (2007.01.27a): Estudo de caso em modelação VDM: o espaço de endereçamento web.
T (2007.01.27b): Acompanhamento dos projectos individuais de modelação.
-- LuisSoaresBarbosa - 27 Jan 2007
Especificação e Desenvolvimento Formal de Software
Nota: sujeito a marcação prévia (verbal ou por email) com o docente.
Programa Resumido
Introdução ao problema do controlo de qualidade em `software' . Especificação formal -- porquê e para quê? Introdução aos binómio especificação /implementação.
Ciclo de vida do software usando métodos formais. Redução do risco e dos custos. Áreas típicas de aplicação. Sistemas críticos e confiáveis. Qualidade de serviços.
Linguagens e métodos para especificação formal. Antecendentes históricos. Do método de Viena (VDM) ao `standard' ISO/IEC 13817-1 (VDM-SL).
Estudo da notação VDM-SL. Modelação por conjuntos, sequências e funções finitas. Especificação por pré/pós-condições. Invariantes. Obrigações de prova.
Prototipagem e animação. Experiência com a utilização do ambiente VDMTOOLS.
Especificação por modelos orientada aos objectos. Estudo de VDM++.
Critérios de Avaliação
Projecto individual ou exame final de acordo com o regulamento aplicável. A opção por um projecto está dependente
da concordância do docente. Os temas deverão ser propostos pelos alunos.
Acetatos e Textos de Apoio
T (2006.10.21a): Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação-implementação. Objectivos e programa da disciplina; sua integração no plano curricular do curso.
T (2006.10.21b): Introdução à modelação de sistemas computacionais em VDM-SL. Tipos e invariantes. Especificação de operações. Estudo de um caso.
T (2006.11.04a): Conclusão da aula anterior. Apresentação da ferramenta VDMTools.
T (2006.11.04b): A linguagem de especificação VDM-SL: expressão de propriedades em lógica de 1a ordem. Problemas de definição.
T (2006.11.11a e 11b): Não houve aula.
T (2006.12.9a): A linguagem de especificação VDM-SL: modelação de problemas com conjuntos e sequências. Polimorfismo e ordem superior (exemplos). Especificação ímplicita vs explícita. Funções vs operações.
Exemplo: cálculo da raíz quadrada (especificação disponível aqui).
T (2006.12.9b): A linguagem de especificação VDM-SL: modelação de problemas com correspondências. O caso do sistema de gestão de contas bancárias.
Especificação funcional (BAMS) e orientada ao estado (SBAMS).
T (2006.12.16a): Aula laboratorial em VDMTools.
T (2006.12.16b): Aula laboratorial em VDMTools.
T (2007.01.20a): Estudo de caso em modelação VDM: multiconjuntos.
T (2007.01.20b): Discussão dos projectos individuais de modelação.
T (2007.01.27a): Estudo de caso em modelação VDM: o espaço de endereçamento web.
T (2007.01.27b): Acompanhamento dos projectos individuais de modelação.
-- LuisSoaresBarbosa - 27 Jan 2007
Feb. 17, 2004
May 14, 2004 is the deadline for submission to CoLogNet / Formal Methods Europe Symposium on Teaching Formal Methods 2004Feb 6, 2004
Students interested in the Overture Project please contact to JNO. (NB: the Overture Modelling Language has great resemblance with
VDM++)
Jan 31, 2004
Novas propostas para estágios curriculares em EstagiosProfisionaisJanuary 29, 2004
Invitation to Wiki.
January 21, 2004
We have a new Wiki server for educational purposes!
18 Out Já saíram as notas do exame da época especial.
27 Jul Já saíram as notas das orais.
22 Jul Já saíram as notas do exame de recurso. As orais serão no dia 27 às 10h00.
11 Jul Já saíram as notas finais da época normal.
5 Jul Quem quiser entregar o projecto prático deverá fazê-lo até ao dia 8 de Julho.
5 Jul As notas da 2a chamada já saíram.
28 Jun As notas da 1a chamada já saíram. As orais serão no dia 7 Julho às 10h00.
5 Abr O enunciado do projecto prático pode ser consultado aqui.
9 Mar Os exemplos das aulas práticas já estão disponíveis para download.
7 Mar A ferramenta DaNAMiCS já está disponível para download.
Elementos Lógicos da Programação 3
Licenciatura em Matemática e Ciências da Computação 3º Ano - 2º Semestre Ano lectivo 2004-2005
Petri Nets for Systems Engineering: A Guide to Modeling, Verification, and Applications, Claude Girault and Rüdiger Valk (editors). Springer-Verlag 2003.
Elements of Distributed Algorithms: modeling and analysis with petri nets, Wolfgang Reisig. Springer-Verlag 1998.
Model Checking, Edmund M. Clarke Jr., Orna Grumberg, and Doron A. Peled. MIT Press 2001.
Elements of Distributed Algorithms: modeling and analysis with petri nets; Wolfgang Reisig. Springer-Verlag 1998.
Model Checking; Edmund M. Clarke Jr., Orna Grumberg, and Doron A. Peled. MIT Press 2001.
Elementos de Estudo
16/04 Uma nova versão do Animador que já suporta redes coloridas (Net2.tgz)
05/04 Nova verão dos módulos do Animador que fazem uso de multi-parameter type classes para permitir um maior nível de abstracção. (Net.tgz) --- Obs.: Para executar estes módulos devem-se passar as seguintes opções ao GHC:"-fglasgow-exts -fallow-undecidable-instances".
05/04 Versões simplificadas do animador de redes de Petri apresentado na teórica:
Versão I - Não define novas classes; utiliza o transformador de estados da biblioteca. (RPetri.hs)
Versão II - Evita a utilização do monad de estado. (RPetri2.hs)
05/04 Várias resoluções para os exercícios da aula sobre o Monad de Estado:
Versão I - Monad definido explicitamente (como foi apresentado na aula prática). (StateEx1.hs)
Versão II - Usando a biblioteca standard. (StateEx2.hs)
Nota final é calculada com base nas seguintes componentes:
Componente Teórica (Exame) - OBRIGATÓRIA - peso nunca inferior a 60% (nota mínima de 8 valores). Componente Prática - FACULTATIVA - com peso máximo de 30%.
A componente prática consiste na realização de um projecto.
18 Out Já saíram as notas do exame da época especial.
27 Jul Já saíram as notas das orais.
22 Jul Já saíram as notas do exame de recurso. As orais serão no dia 27 às 10h00.
11 Jul Já saíram as notas finais da época normal.
5 Jul Quem quiser entregar o projecto prático deverá fazê-lo até ao dia 8 de Julho.
5 Jul As notas da 2a chamada já saíram.
28 Jun As notas da 1a chamada já saíram. As orais serão no dia 7 Julho às 10h00.
5 Abr O enunciado do projecto prático pode ser consultado aqui.
9 Mar Os exemplos das aulas práticas já estão disponíveis para download.
7 Mar A ferramenta DaNAMiCS já está disponível para download.
Pretende-se que modele e analise os dois problemas seguintes usando redes de petri e a ferramenta de model checking SMV. Na modelação deve começar por usar uma rede colorida e depois fazer a seu expansão para uma rede normal. Nesta operação pode começar por usar capacidades e arcos inibidores, que depois deverão ser eliminados usando as regras de transformação já ensinadas. Para cada problema são enumeradas algumas propriedades que devem ser verificadas pela solução apresentada. Sempre que possível devem ser demonstradas usando técnicas estruturais (como invariantes de lugar), mas também usando model checking. Para tal terão que ser traduzidas em fórmulas CTL equivalentes. Sempre que desejarem, podem enriquecer a especificação adicionando novas características ao modelo ou novas propriedades para verificar. Naturalmente, tal será valorizado na nota final.
O projecto é facultativo. Deverá ser realizado em grupos com o máximo de dois alunos. A apresentação será em data a combinar, devendo na mesma ser entregue um pequeno relatório com a descrição das tarefas realizadas.
ATENÇÃO: esta página será alterada consoante a necessidade de clarificar o enunciado.
Sistema de Transporte
Pretende-se modelar um sistema de transporte de uma linha de produção. Esta é constítuida por uma série de mesas, existindo um braço robotizado entre cada par de mesas. O braço robotizado pode estar em três posições diferentes (A, B e C), podendo mover-se para a esquerda ou para a direita. Também possui uma garra que lhe permtite apanhar uma peça numa mesa e transportá-la para a seguinte. Considere também que existe um produtor que coloca as peças na primeira mesa e um consumidor que as retira da última.
Algumas das propriedades que a sistema modelado deve verificar são:
Cada mesa pode conter no máximo uma peça.
Não deve possível colocar uma peça na mesa i se o robot i está na posição A.
Nomeadamente, nunca deve ser possível o robot i estar na posição C e o robot i+1 na posição A.
Os motores de deslocamento para a esquerda e para a direita não podem estar activos simultaneamente.
Qualquer peça que seja colocada na primeira mesa deve eventualmente chegar à última.
Não existem deadlocks.
Exclusão Mútua Distribuída
Pretende-se implementar um algoritmo de exclusão mútua distribuído, ou seja sem nenhum controlador centralizado. O mesmo será baseado no conceito token ring. As diversas unidades funcionais estão ligadas através de um anel de comunicação onde circula uma marca. Sempre que uma unidade pretende entrar na zona crítica deverá retirar esta marca do anel, devendo a mesma ser propagada para a unidade seguinte quando não for necessária. A seguinte imagem apresenta um esquema da rede de petri que modela este problema, para o caso em que temos três unidades funcionais, estando uma delas detalhada.
Cada unidade é constituída por dois módulos:
O primeiro, cuja rede se encontra detalhada, representa o componente que pretende usar o recurso crítico. Tem três estados possíveis: Idle, quando está a realizar tarefas que não envolvem o recurso crítico; Waiting, quando está à espera de usar o recurso crítico; e Critical, quando está na zona de exclusão mútua.
O segundo é o controlador que irá implementar o protocolo, e cuja especificação é o objectivo deste projecto.
A comunicação entre os dois componentes é feita assincronamente usando os lugares Req (request), Prm (permission), e Rdy (ready). O primeiro é usado para sinalizar a vontade de usar o recurso crítico. O segundo é usado pelo controlador para dar autorização ao outro componente para entrar na zona crítica, e o último serve para este indicar que já terminou a utilização do recurso crítico. O controlador também tem acesso ao anel onde circula a marca. Sempre que deseje, pode retirar a mesma da sua porta de entrada (Tok) ou transferi-la para a unidade funcional que lhe sucede no anel.
Algumas das propriedades que a solução deve verificar são:
Não existem duas unidades simultaneamente na zona crítica.
Não existem deadlocks.
Nunca existe mais do que uma marca a circular no anel.
Qualquer unidade que pretenda utilizar o recurso crítico poderá eventualmente fazê-lo.
Uma unidade não poderá utilizar o recurso crítico duas vezes seguidas se outra unidade também o pretender utilizar.
A marca não deve circular desnecessariamente pelo anel. Só o deverá fazer se alguma unidade requisitar o acesso à zona crítica.
Para poder satisfazer esta última propriedade poderá ser necessário adicionar um segundo anel de comunicação (com sentido inverso) onde circulam pedidos para libertar a marca.
Location: Vrije Universiteit or CWI in Amsterdam, The Netherlands.
In many areas of computing, languages play a central role. Programming languages, data definition languages, scripting languages, mark-up-languages, query languages, etc. Unfortunately, it is common practise in software engineering to apply mostly ad-hoc techniques when dealing with language syntaxes. Grammar Engineering seeks to remedy this situation by regarding grammars as valueable software artifacts, and applying good engineering practises to their development, deployment, and maintenance.
In this project you will implement a tool-suite for Grammar Engineering. The tool-suite will include (i) support for grammar reconstruction from language reference manuals, (ii) a combinator library for reshaping grammars, and (iii) support for generating parsers, XML shema's, transformation libraries, and
other software components from grammars. Your tool-suite will use the Syntax Definition Formalism (SDF) as internal representation format. To design your tool-suite you will take inspiration from published work and previously developed prototypes.
The implementation of this tool-suite will normally require some technology that it is fit to implement all of the above components while this technology
should then also benefit from the provided components. Here are some options:
A Haskell-centric approach with combinator parsing.
An ASF+SDF Meta-Environment approach with its SGLR parsing technology.
General-purpose programming languages and main-stream parser generators like ANTLR.
For example, in the Haskell scenario, the tool-suite is implemented in Haskell and it would
be useful for the Haskell programmer. That is, the tool-suite would then help with deploying
Haskell-based parsers, XML components and others while processing SDF grammars as input.
See also: the Grammar Ware page.
Supervisors: Ralf Laemmel (VU & CWI, The Netherlands), JoostVisser (UMinho)
Benchmarking Generic Programs
Location: Vrije Universiteit or CWI in Amsterdam, The Netherlands.
Generic Programming encompasses programming techniques that allow the construction of programs that work for just about any kind of data type. Examples of generic programming solutions are Strafunski, traversal functions in ASF+SDF, Generic Haskell, Polytypic Programming, and visitor combinators.
In this project you will perform thorough benchmarking of various generic programming approaches, and investigate some options for improving the efficiency of generic programs. To this end, you will develop a benchmark suite of generic programming problems, and corresponding solutions for each approach under scrutiny. You will investigate both time and space consumption by the various approaches. You will publish your benchmark suite and the results of running it on the internet, such that in future others can take advantage of it when comparing and evaluating generic programming approaches in future.
Supervisors: Ralf Laemmel (VU & CWI, The Netherlands), JoostVisser (UMinho)
This project consists of creating a Haskell binding to AT&T's GraphViz library. This involves using a Foreign Function Interface (FFI) to invoke the C functions of the GraphViz library from within Haskell. To simplify the task of writing this FFI invocations, a tool named GreenCard is beeing used. Next, an abstraction layer is introduced to hide all the miscelaneous procedures of GraphViz and to provide a simple, but powerfull interface to the Haskell application.
With a minimal binding it's possible to replace the graph visualization support in the HaLex library (generating DOT) by invocations to the foreign functions specified. Also, new instances are declared of the types witch one wants to visualize. HaLex is an instance, since UMinho's Haskell Libraries uses GraphViz widely. This is of course a incremental work and hopefully in the end one could visualize and interact with data.
Implementation
To be updated soon... need to sleep... (Knock, Knock.... wake up.... :)) (Who's there?) (That's me! :))
Greencard
Graphviz
Core
Attribute
Graphable
Layoyt
Render
UI
Future Work
Download
Checkout module Graphics.Graphviz from Research.PURe CVS repository.
PUReSoftware
An open graph visualization system and its applications to software engineering, Emden R. Gansner and Stephen C. North, Software - Practice and Experience, 1999.
Drawing graphs with Graphviz, Emden R. Gansner, 2004.
The Haskell 98 Foreign Function Interface 1.0: An Addendum to the Haskell 98 Report, Manuel Chakravarty (ed.), 2002,2003.
fornecida por todos
Sobre as ideias básicas de Criptografia (exigindo um pouco de Matemática) um livro importante é o Applied Cryptography de Bruce Schneier.
-- JoseManuelValenca - 08 Mar 2005
Sobre o Liberalismo Político e a Teoria da Justiça consultar o tratado fundamental de John Rawls ou a versão comentada de Jacques Bidet.
-- JoseManuelValenca - 08 Mar 2005
1 de Março início das aulas
-- JoseManuelValenca8 de Março devido à minha presença num júri não é possível dar a aula deste dia; nesta semana funciona só o turno de 4ª feira.
-- JoseManuelValenca22 e 23 de Março devido a uma reunião em Lisboa não posso dar aulas esta semana.
-- JoseManuelValenca21 de Abril foi criada a primeira página de ensaios que pode servir de exemplo para outras páginas.
-- JoseManuelValenca13 de Junho atenção aos critérios de avaliação dos trabalhos; está definida a escala de classificação na gama D .. A
-- JoseManuelValenca30 de Junho tendo em atenção que dificilmente se conseguirá fazer todas as apresentações nos dias 8 e 9 de Julho, continuaremos essas apresentações no dia 14 às 9:00 horas
-- JoseManuelValenca5 de Julho atendendo ao elevado número de possíveis apresentações (cerca de 90) não é logisticamente possível realiza-las como estava acordado. Por isso é necessário alterar as condições de apresentação como se indica nesta página. Ficam sem efeito as datas de apresentação de 8, 9 de Julho; as apresentações serão efectuadas numa dada a combinar com cada um dos alunos interessados.
-- JoseManuelValenca
Componente pratica: dois a cinco ensaios em cada um dos temas de estudo com as seguintes características:
Trabalho de grupo de 2/3 pessoas, versando a análise, levantamento de informação e bibliografia sobre um caso/exemplo referido nas aulas,
limitados a 2000 palavras excluindo bibliografia,
possibilidade (sorteada) de apresentação oral.
O peso relativo das duas componentes da avaliação depende do número de ensaios; o peso da componente pratica é 40% para 2 ensaios, 50% para 3 ensaios, 60% para 4 ensaios e 100% para 5 ensaios.
A avaliação de cada trabalho é feita tendo em atenção 3 parâmetros: FOCUS (a clareza na concretização de um problema ou questão ética), CONTEÚDO (a precisão e relevância dos factos referidos ou das fontes citadas) e POSIÇÂO (a clareza e justificação da posição ética assimida).
Os alunos com avaliação exclusivamente efectuada por trabalhos praticos podem, se assim entenderem e para efeitos de melhoria de nota, apresentar um dos trabalhos que, para o efeito, será seleccionado pelo docente da disciplina.
Os trabalhos são enviados em formato PDF, anexos a uma mensagem de correio electrónico enviada ao docente da disciplina. O endereçp de envio tem de ser o endereço institucional do aluno e o assunto deve conter a string "Informática Jurídica" e o número (ou números) do trabalho submetido.
Ensaios de Ana Ferreira, Alexandra Cruz e Michelle Pinto
A Avaliação de cada trabalho é feita numa escala de D (insatisfatório), C ou C+ (satisfatório), B ou B+ (bom), A, A+, A++ (muito bom, ...)
-- JoseManuelValenca - 11 Jun 2005
Este também é um trabalho expositivo mas está melhor focado e dá alguma informação. Avalio-o como B
-- JoseManuelValenca - 11 Jun 2005
Este também é um trabalho expositivo mas está melhor focado e dá alguma informação. Avalio-o como B
-- JoseManuelValenca - 11 Jun 2005
Este tema só perifericamente toca os objectivos deste curso; a exposição também está um pouco confusa; podia ser melhorado.
-- JoseManuelValenca - 12 Jun 2005
O tema tratatado, apesar de importante, está apresentado nos aspectos que pouco intersectam os objectivos deste curso
-- JoseManuelValenca - 12 Jun 2005
-- JoseManuelValenca - 12 May 2005
-
ATÉ QUE PONTO SERÁ FIÁVEL E RECOMENDÁVEL O RECURSO A ESTA FERRAMENTA?
Trabalho de opinião, bem focado. Não me parece que apresente um argumento suficiente para inviabilizar a escritura electrónica, nem percebo como o factor "tempo" pode influenciar qualquer dos argumentos.
-- JoseManuelValenca - 10 Jun 2005
Trabalho é expositivo mas está razoalvelmente completo. As questões tecnicas do voto são complexas mas alguma coisa poderia ter sido dito.
-- JoseManuelValenca - 10 Jun 2005
A noção de "direito electrónico" parece-me mais adequadamente apresentado na perspectiva das relações que se estabelecem na Sociedade da Informação. O trabalho está interessante e revela esforço.
-- JoseManuelValenca - 10 Jun 2005
-
-- JoseManuelValenca - 18 May 2005
Este trabalho fala dos direitos de propriedade de autor mas, apesar de refeir à divulgação de obras na internet, não me parece que os analise na especificidade deste meio
-- JoseManuelValenca - 11 Jun 2005
bom trabalho mas podia ser mais completo já que não considera casos em que o interesse público tenha precedência sobre o interesse privado
-- JoseManuelValenca - 11 Jun 2005
bom trabalho mas podia ter alguma informação concreta sob a forma de resolver algumas das dificuldades levantadas por este tipo de votação
-- JoseManuelValenca - 11 Jun 2005
uma alegoria da ubiquidade da sociedade da informação mas não é uma análise apropriada da noção de vida virtual pelo menos da forma como ele é aceite nas comunidades da TI's
-- JoseManuelValenca - 11 Jun 2005
-- JoseManuelValenca - 27 May 2005
Bom trabalho apresentando uma visão bastante interessante da noção juridica de documento electronico. Contém porém algumas incorrecções tecnicas
-- JoseManuelValenca - 12 Jun 2005
-
-- JoseManuelValenca - 27 Apr 2005
A Democracia nos dedos dos Cidadãos.
-
Este trabalho é muito extenso (não respeitou os limites indicados) e repete muito do conteúdo da página da UMIC sobre o veoto electrónico. Não é muito original.
-- JoseManuelValenca - 13 Jun 2005
Outros trabalhos
Biometria: mais uma vez o trabalho é extremamente longo e reproduz a informação sobre este tema fornecida pela CNPD
-- JoseManuelValenca - 13 Jun 2005
-- JoseManuelValenca - 28 Apr 2005
Nesta primeira sessão pretende-se familiarizar os alunos com o ambiente de programação que será utilizado nesta unidade curricular. Admite-se que os alunos já dispõem de algum tipo de contacto com a utilização de computadores.
Login e Apresentação do Sistema MacOSX
Após a introdução do login e da password (o docente informará qual é...) o computador exibe
um écran como o apresentado:
A barra no topo do écran - o menu - diz respeito à aplicação activa e contém funcionalidades dessa aplicação (tais como abrir um novo ficheiro, gravar, etc).
Na parte inferior do écran existe a barra de ferramentas que disponibiliza o acesso rápido a algumas aplicações (inicia aplicação com um click; arrastando um ficheiro sobre o icon: inicia a aplicação abrindo imediatamente o ficheiro em causa).
Na barra de ferramentas encontramos (entre outras) as aplicações:
O Finder é a aplicação responsável por manter a sessão do utilizador. O seu aspecto mais visível é a interacção com o sistema de ficheiros. Por seu intermédio podemos aceder/manipular a informação contida no disco (ficheiros, directorias, etc.).
O Terminal é a aplicação que permite interagir, em modo de comando, com o sistema operativo MacOSX (o sistema Unix da Apple). A sua utilização requer portanto o conhecimento de alguns comandos desse sistema, tornando-se menos intuitiva do que a manipulação da interface gráfica do sistema. É no entanto muito mais flexível e permite-nos realizar operações não acessíveis pela interface gráfica.
O Safari é um browser WWW. Permite consultar páginas Web (e.g. a página da disciplina).
O Trash permite remover ficheiros/directorias, arrastando o que se pretende remover para cima do icon.
O Finder
Esta aplicação permite interagir de uma forma visual com o sistema de ficheiros. Algumas
das operações básicas que se podem fazer são acessíveis na barra superior no item File.
Podemos abrir uma nova janela de visualização ou criar uma nova directoria. Note-se que esta directoria será uma sub-directoria da que estamos neste momento a visualizar (se não estiver nenhuma janela do Finder aberta, será criada como uma sub-directoria da Desktop que contém os elementos visíveis no fundo do écran).
Note a existência de uma directoria com icon representando uma casa, que se refere à sua directoria base (Home). A própria Desktop é uma sub-directoria dessa.
Tarefa 1 - Crie na sua Home uma directoria chamada Aula1.
O Terminal
Através do Terminal também podemos interagir, de uma forma textual, com o sistema de ficheiros. Podemos por exemplo listar o conteúdo de uma directoria (ls), remover um ficheiro (rm), visualizar o conteúdo de um ficheiro (cat) ou mover/mudar o nome de um ficheiro (mv).
Podemos além disso efectuar toda uma série de acções, incluindo o início de programas.
Tarefa 2 - Inicie o Terminal e usando o comando cd (change directory) vá para a directoria Aula1 criada atras. Use ainda o comando ls -la para visualizar o conteúdo dessa directoria. Note que o comando cd, quando usado sem argumentos, o posiciona na sua Home.
Vamos agora usar um editor de texto para criar um ficheiro. Nesta primeira fase vamos usar o editor vi, comum a todos os sistemas Unix.
Quando estamos a usar o vi podemos estar em dois modos de funcionamento:
modo comando é o modo inicial e podemos invocar comandos: (a, i, e o) servem para passar a modo inserção; :s guarda as alterações efectuadas; (:q, :x e ZZ) terminam a execução do vi.
modo inserção onde podemos inserir o texto. Para voltar ao modo de comando devemos usar a tecla "Esc".
Emacs
Um outro editor de texto muito utilizado em sistemas Unix é o Emacs. Tal como fizemos para o vi, vamos aqui descrever a utilização mais rudimentar deste editor de texto. Este programa pode ser encontrado na directoria Applications e tem como icon um gnu.
Para abrir um determinado ficheiro usa-se o comando "CTRL-x CTRL-f". Alternativamente, podemos usar o item File da barra superior do ecran. Aqui, uma das opções é abrir um ficheiro (Open File) ou uma nova janela (New). No final da edição devemos guardar o ficheiro editado, usando Save ou Save As, dependendo se o ficheiro já existia ou não.
Tarefa 3: Crie na directoria Aula1 um ficheiro com nome Grupo.txt, com a identificação dos membros do grupo (número e nome). Utilize para o efeito um dos editores de texto referidos atrás (Emacs ou vi).
LaTeX
Para produzir relatórios e outros documentos, vamos utilizar o sistema LaTeX. Este "processador de texto" distingue-se de outros (como o MS Word, do Windows) por promover a separação entre conteúdo e apresentação. Assim, o processo de criação de um documento passa pelas seguintes fases:
o utilizador utiliza um qualquer editor de texto para criar um ficheiro com a informação que irá dar origem ao documento (com a extensão .tex, por exemplo teste.tex)
executa-se o comando pdflatex que processará o documento resultando um ficheiro em formato PDF (Portable Document Format) (seguindo com o exemplo, executando pdflatex teste.tex produziria o ficheiro teste.pdf).
No Mac, está disponível o TexShop - uma aplicação que contém o editor de texto próprio e que facilita a utilização do LaTeX (produzir o documento resume-se a primir no botão typeset).
Naturalmente que o ficheiro .tex que contém a informação para o documento deve adoptar um formato específico. De facto, para além do conteúdo que queremos ver no documento final, teremos de dar indicações ao LaTeX que lho permita produzir o resultado pretendido (qual o título, o autor, quais a várias secções, etc.). Comecemos então por ver um exemplo de um tal ficheiro:
\documentclass[12pt]{article}
\usepackage[portuges]{babel}
\usepackage[mac]{inputenc}
\begin{document}
\title{Um Documento de Exemplo}
\author{Eu}
\date{\today}
\maketitle
\section{Primeira Secção}
Isto é o texto que aparece na primeira secção...
\section{Segunda Secção}
Isto já é a segunda secção. Agora vou referir:
\begin{itemize}
\item Um ponto...
\item Outro ponto...
\end{itemize}
\end{document}
Uma breve explicação do conteúdo apresentado:
Quando uma palavra é precedida pelo carácter \, é um comando para o LaTeX. Os argumentos para estes comando (quando existem) são envolvidos em chavetas.
As linhas até ao \begin{document} são designadas por preâmbulo. Este inicia-se obrigatoriamente com o comando \documentclass que serve para indicar ao LaTeX qual o estilo de documento adoptado (neste caso article, mas existem também book, letter, etc.). Os restantes comandos utilizados no preâmbulo destinam-se a preparar o LaTeX para lidar com os caracteres acentuados presentes no Português.
O conteúdo do documento encontra-se entre as linhas \begin{document} e \end{document} (o que designamos por o ambientedocument).
O comando \maketitle visualiza o título do documento (com a informação previamente registada pelos comandos \title, \author e \date).
O comando \section marca o início de uma secção (como argumento aceita o título da secção)
O ambiente itemize permite enumerar vários pontos (cada um deles é precedido pelo comando \item).
Após o processamento descrito, obteríamos o seguinte documento:
Obviamente que a explicação aqui apresentada é muito incompleta, e o exemplo não ilustra minimamente as enorme potencialidades do LaTeX para produzir documentos de elevada qualidade gráfica. Recomenda-se vivamente a leitura do
pequeno livro Uma não tão pequena introdução ao LaTeX2e.
Tarefa 4: Crie o ficheiro teste.tex com o conteúdo acima apresentado, compile-o (comando pdflatex teste.tex) e visualize-o (comando open teste.pdf, ou com um duplo click no Finder).
Mini-projecto individual
Instale no seu computador pessoal uma distribuição apropriada do LaTeX (veja, na secção "links úteis" da página da disciplina, diferentes alternativas de distribuições para os vários sistemas operativos).
Acompanhe a leitura de "Uma não tão pequena introdução ao LaTeX2e" com experimentações na sua instalação do LaTeX (no sub-título desse livro, lê-se que bastam 137 minutos para a sua leitura. O que podemos afirmar é que vale definitivamente a pena, mesmo que demore um pouco mais...).
Produza um documento contendo o seu curriculum vitae (identificação pessoal, escolas onde obteve os vários graus de ensino, hobbies, etc.)
Envie por email o documento produzido para o (seu) docente da disciplina.
Nesta sessão pretende-se tomar conhecimento com conceitos básicos da linguagem Haskell, nomeadamente:
expressões e sua avaliação,
tipos básicos,
tipos estruturados,
utilização do interpretador ghci e do compilador ghc.
ghci: um interpretador da linguagem Haskell
Ao longo deste curso iremos utilizar o interpretador ghci para executar programas escritos na linguagem Haskell. Este interpretador pode ser invocado a partir do Terminal:
Verificamos então que o ghci avalia as expressões introduzidas apresentando o respectivo resultado. Mesmo sem conhecermos ainda todas as funções apresentadas, podemos desde logo observar que o Haskell não se limita a avaliar expressões numéricas --- na realidade, é capaz de processar dados de natureza muito diversa (diferentes tipos de dados) como números inteiros, decimais, valores de verdade (booleanos), caracteres, sequências, etc. Por outro lado verificamos que dispõe já do conhecimento de algumas funções pré-definidas (como sin, odd, etc.). Estas funções (e muitas outras, naturalmente) estão definidas na biblioteca básica da linguagem, a que se dá o nome de Prelude. Daí o prefixo "=Prelude>=" apresentado no ghci: informa-nos que ele (só) tem carregadas as definições dessa biblioteca. (obs.: biblioteca, em programação, consiste num conjunto de definições disponibilizadas para serem (re)utilizadas pelos programadores.)
Execução de Comandos: para além de avaliar expressões, é-nos também possível executar comandos que controlam o comportamento do ghci (como carregar um ficheiro com definições de novas funções, solicitar informação de tipos, etc.). Os comandos mais utilizados serão:
:l (fich) - carrega ficheiro (fich),
:t (expr) - interroga o interpretador sobre o tipo de (expr),
:b (mod) - visualiza o conjunto de definições de (mod),
:? - comando de ajuda que fornece uma breve explicação dos comandos disponíveis
:q - sai do interpretador
De referir é ainda a integração existente entre o ghci/haskell e o Emacs. De facto, este último dispõe de um modo de edição próprio para a linguagem Haskell, activado automáticamente quando é carregado um ficheiro com extensão .hs, que constitui uma mais valia quando editamos programas nessa linguagem (disponibiliza indentação automática, coloração do texto, etc.).
Tarefa 1 - Verifique qual é o tipo das expressões apresentadas acima.
Tipos básicos e estruturados
O Haskell é uma linguagem fortemente tipada - com isto quer-se dizer que o Haskell força a que todas as expressões da linguagem possuam um tipo.
A linguagem oferece o seguinte conjunto de tipos básicos:
Bool - Booleanos: True e False
Char - Caracteres: 'a', 'x', 'R', '7', '\n', ...
Int - Inteiros de tamanho limitado: 1, -4, 23467, ...
Integer - Inteiros de tamanho ilimitado: 36, 37829938847736292938338283
Float - Números de vírgula flutuante: 3.5, -45.3, 3e-2, ...
Double - Números de vírgula flutuante com precisão dupla
() - Unit: ()
Para além dos tipos básicos, o Haskell disponibiliza formas de construir novos tipos a partir de outros existentes.
produto cartesiano - (a1, a2) :: (t1, t2) - um par cuja primeira componente a1 é do tipo t1 e a segunda componente a2 é do tipo t2. O produto cartesiano generaliza-se par n-tuplos (i.e. (a1, ..., an) :: (t1, ..., tn),
listas - [a1,a2, ..., an] :: [t] - uma lista (sequência) constituída pelos elementos a1, a2, ..., an, todos do tipo t,
funçõesf :: t1 -> t2 - f é uma função que espera um argumento de tipo t1 e cujo resultado é do tipo t2.
Para além dos tipos apresentados, o utilizador pode ainda definir novos tipos (assunto que retomaremos numa próxima sessão).
Tarefa 2:
Verifique o tipo das funções utilizadas nas expressões apresentadas acima (e.g. odd, sin, ...)
Porque é que o Haskell não aceita as seguintes expressões:
3 + 'A'
[1,True]
not (0)
not not
Tarefa 3:
* Teste as definições por compreensão apresentadas na aula teórico prática de Programação Funcional da semana anterior disponível aqui.
Definição de funções
A principa tarefa de um programador na linguagem Haskell consiste na definição de funções que realizem as tarefas pretendidas. As funções são definidas por intermédio de regras de cálculo. A título de exemplo, temos
eZero :: Int -> Bool
eZero x = if x==0 then True else False
Por vezes é conveniente (ou mesmo necessário) separar a definição da função em várias cláusulas. Por exemplo, a mesma função podia ser também ser definida como:
As funções podem ainda possuir mais do que um argumento. Considere:
maior :: Int -> Int -> Int
maior x y = if x>y then x else y
Esta função determina o maior de dois inteiros passados como argumento (e.g. (maior 9 3) resulta em 9).
Note que as definição das funções não deve ser realizada directamente no ghci - devem antes ser definidas num ficheiro (com extensão .hs) que será depois carregado no ghci (comando :l).
Tarefa 4: Defina funções que:
dados dois números inteiros retorne um par onde a primeira componente é o menor número e a segunda o maior,
dado o comprimento dos dois lados catetos de um triângulo retorne o comprimento da hipotenusa.
dado o raio do círculo, retorne o perímetro e a área desse círculo.
Módulos
Um programa em Haskell é formado por um conjunto de módulos. Cada módulo contém um conjunto de definições (declarações de tipos, de funções, de classes, ...) que podem ser utilizados internamente, ou exportados para serem utilizados noutros módulos. Um módulo Haskell é armazenado num ficheiro com extensão .hs, .hs, em que representa o nome do módulo, como declarado na primeira linha do ficheiro. Por exemplo, o ficheiro Teste.hs deverá começar com a declaração seguinte:
module Teste where
...
Para utilizar definições contidas num outro módulo é necessário referencia-lo explicitamente. Este tipo de ligação entre módulos estabelece-se utilizando uma declaração import. Como exemplo, vejamos como podemos ter acesso às funções de manipulação de caracteres e strings (listas
de caracteres) disponíveis no módulo Char.
module Main where
import Char
main = putStrLn ("Isto é o resultado de executar a função "++[toLower x | x <- "MAIN..."])
Uma excepção a esta regra é o módulo Prelude, que constitui a base da linguagem Haskell, e cujas definições estão disponíveis por omissão.
Compilador
Também é possível produzir uma aplicação (ficheiro executável) a partir de um ficheiro em Haskell. Para tal deve-se utilizar o compiladorghc.
O módulo a compilar deve conter a função main, que corresponde ao "ponto de entrada" da aplicação (ou seja, essa função será avaliada quando executarmos o programa). A título de de exemplo, para compilar e executar o programa apresentado atrás, devíamos proceder da seguinte forma:
$ ghc -o teste Main.hs
$ ./teste
Isto é o resultado de executar a função main...
$ _
Tarefa 5:
Compile o programa apresentado e execute-o.
Crie um módulo com as funções definidas atrás (tarefa 3) e modifique o módulo Main para utilizar uma dessas funções.
A recursividade é um recurso fundamental para codificar funções não triviais numa linguagem funcional. A ideia básica consiste em permitir-se codificar uma função com recurso a ela própria, desde que com argumentos mais simples. O exemplo sempre citado é a definição da função factorial: n! = n * (n-1) * ... * 1. Observando que (n-1)!=(n-1) *...*1, verificamos que podemos definir n!=n*(n-1)! para n>0 (em que 0!=1). Em haskell poderiamos então definir:
fact :: Int -> Int
fact 0 = 1
fact n = n * (fact (n-1))
Observe que o argumento da invocação recursiva é estritamente menor do que o parâmetro da função - é por este motivo que o cálculo da função termina. De facto, para o cálculo de (fact 3), o interpretador realiza as seguintes reduções:
Um outro domínio onde a recursividade surge naturalmente é ao realizar funções sobre listas (sequências). Aí, a forma mais natural de definirmos uma função consiste em explicitar qual o resultado para o caso da lista vazia [], e para o caso da lista não vazia (x:xs). Neste último caso, podemos invocar a própria função recursivamente na cauda xs porque esta é necessariamente mais pequena do que lista original. Um exemplo clássico é a função que calcula o comprimento:
len :: [a] -> Int
len [] = 0
len (x:xs) = 1 + (len xs)
Tarefa 1: Defina as seguintes funções que:
dado a e b determine a^b (sem utilizar a operação de exponenciação ^).
dado uma lista de inteiros, conte o número de zeros contidos nessa lista.
dado uma lista de inteiros, calcule o seu somatório.
dado uma lista e um elemento, verifique se esse elemento está contido na lista.
Sinónimos de tipos
O tipos pré-definidos do Haskell são suficientemente poderosos para representarem uma grande variedade de dados. A título de exemplo, considere que se pretende representar e manipular a informação relativa a alunos de um curso e as suas respectivas notas. Assim, para cada aluno pretende-se registar: o número, o nome, e a nota. Essa informação pode ser representada no tipo (Int, String, Float). Para representar a informação de todos os alunos do curso, utilizamos uma lista desse tipo.
Em casos como este, é útil fazer uso da possibilidade oferecida pelo haskell em atribuir sinómimos de tipos (declaração type) - podemos dessa forma atribuir um nome mais informativo ao tipo em questão. Uma função que verifique se o aluno está aprovado pode ficar codificada como:
Nas funções realizadas na última tarefa da sessão anterior é bem patente que algumas delas partilham um mesmo padrão: um exemplo será o cálculo das listas dos alunos aprovados e reprovados - em ambos os casos "filtramos" da lista original os elementos que satisfazem um dado critério. O facto de o Haskell permitir manipular funções como quaisqueres outros valores (e.g. podemos passar funções como argumentos para outras funções) permite-nos criar funções que abstraiam esses padrões comuns. Continuando com o exemplo da lista de aprovados/reprovados, podemos utilizar função pré-definida
filter :: (a->Bool) -> [a] -> [a]
que filtra todos os elementos de uma lista que satisfassam um dado predicado. As funções ficariam então:
Obs.: (not . verifAprov) é a composição de ambas as funções: not após verifAprov.
Outras funções pré-definidas no Prelude que correspondem a padrões repediamente encontrados são:
map::(a->b)->[a]->[b], (map f l) aplica a função f a cada elemento de l retornando a lista de resultados. Exemplo: map verifAprov listaAlunos retorna [True, False, True].
zip::[a]->[b]->[(a,b)], (zip l1 l2) associa os elementos das listas l1 e l2 produzindo uma lista de pares. Exemplo: (zip [1,2,3] ['A','B','C']) retorna [(1,'A'),(2,'B'),(3,'C')].
unzip::[(a,b)]->([a],[b]), (unzip l) separa uma lista de pares duas listas, cada uma contendo cada uma das componentes. Exemplo: (unzip [(1,'A'),(2,'B'),(3,'C')]) retorna ([1,2,3],['A','B','C'])
...
Tarefa 1: Pode fazer uso de alguma(s) destas funções nas funcionalidades pedidas na sessão anterior? Experimente...
Utilização das bibliotecas
Já se referiu que a biblioteca do Haskell dispõe de um vasto conjunto de funções úteis (algumas já tem vindo a ser referidas, muitas outras o serão ao longo do semestre...). A forma última de se conhecer a oferta existente, e de obter informação para a sua utilização consiste em consultar a documentação existente. Para a tarefa que se segue pretende-se utilizar algumas funções dos seguintes módulos (para além das já referidas...):
Tarefa 2: Pretende-se realizar um programa que realize um histograma com a frequência das palavras que ocorrem nesse texto. Assim, o resultado de avaliar
hist "Um texto com palavras... um, com, palavras, palavras, dois,dois"
23/02/2007: Já disponíveis as notas da época de recurso.
19/02/2007: O exame de recurso será realizado na 4ª-feira, às 14:30 no DI0.11. O exame incluirá as componentes de Maple e Haskell. Quem desejar realizar esse exame, deve enviar um email a um docente da disciplina.
19/02/2007: Estão disponíveis as notas finais da disciplina (época normal).
13/02/2007: Já estão disponíveis as notas dos testes de Maple de todos os turnos.
07/02/2007: Foram publicadas as notas dos testes de Maple, com excepção dos alunos que realizaram o teste no dia 5 de Janeiro. Em princípio, no início da próxima semana serão publicadas as notas finais. Os alunos que reprovarem à disciplina poderão requerer um teste de recurso, que será realizado no dia 21 de Fevereiro à tarde.
21/12/2006: EXAMES de MAPLE Os exames de Maple para os turnos de sexta-feira, realizam-se em 4 sessões de 1 hora no dia 5 de Janeiro 2007. Cada sessão admite 13 slots . A inscrição nesses slots realiza-se a partir do dia 3 de Janeiro na recepção do DI.
02/12/2006: Já é possível realizar a inscrição para a apresentação dos trabalhos práticos (na recepção do departamento).
22/11/2006: Já estão disponíveis as instruções para submissão do trabalho prático.
26/10/2006: Já está disponível o enunciado do primeiro trabalho prático.
28/09/2006: Início das aulas.
Acompanhamento dos Projectos: Quartas, 11-13 h, Sala DI 0.04.
SemináriosPURe: Terças, 11-13, Sala de Reuniões do DI.
Objectivos
A disciplina é orientada ao projecto em engenharia de software no contexto das abordagens formais à especificação e desenvolvimento de sistemas. Assim, visa-se
Desenvolver competências específicas no projecto e implementação de sistemas envolvendo diversas plataformas de suporte e requisitos não triviais
Desenvolver um conjunto de `soft-skills' essenciais a qualquer técnico de informática dos dias de hoje: gestão de projecto, organização, comunicação e trabalho colaborativo.
Aprofundar o contacto com ferramentas de suporte ao desenvolvimento formal de software
Oferecer uma iniciação à investigação científica através da integração dos alunos em equipas de projectos de investigação em curso no Grupo de Lógica e Métodos Formais do DI.
Em 2004-05, em particular, os alunos que escolherem esta Opção são convidados a integrar a equipa do projecto PURe e a participar nos correspondentes
seminários de investigação. A apresentação final dos projectos a realizar será igualmente feita no âmbito deste projecto.
Programa Resumido
Estudo e desenvolvimento de técnicas de análise de requisitos e experiência em interface/ coabitação de ferramentas de apoio ao uso de métodos formais (à escala industrial) com as tecnologias tradicionais. Casos de estudo - projectos propostos no contexto do Projecto PURe (FCT):
PURe Camila: re-engenharia do sistema de prototipagem Camila e sua re-implementação sobre Haskell
Métodos e ferremantas para slicing sobre especificações VDM
ProjectosCritérios de Avaliação
Tratando-se de uma disciplina eminentemente práticai, é adoptado o regime de avaliação contínua (sem provas escritas) que terá em conta as seguintes componentes:
Capacidade de organização e gestão de projectos de software
Capacidade de interligação de conhecimentos obtidos ao longo do curso na realização de um projecto de engenharia de software.
23/02/2007: Já disponíveis as notas da época de recurso.
19/02/2007: O exame de recurso será realizado na 4ª-feira, às 14:30 no DI0.11. O exame incluirá as componentes de Maple e Haskell. Quem desejar realizar esse exame, deve enviar um email a um docente da disciplina.
19/02/2007: Estão disponíveis as notas finais da disciplina (época normal).
13/02/2007: Já estão disponíveis as notas dos testes de Maple de todos os turnos.
07/02/2007: Foram publicadas as notas dos testes de Maple, com excepção dos alunos que realizaram o teste no dia 5 de Janeiro. Em princípio, no início da próxima semana serão publicadas as notas finais. Os alunos que reprovarem à disciplina poderão requerer um teste de recurso, que será realizado no dia 21 de Fevereiro à tarde.
21/12/2006: EXAMES de MAPLE Os exames de Maple para os turnos de sexta-feira, realizam-se em 4 sessões de 1 hora no dia 5 de Janeiro 2007. Cada sessão admite 13 slots . A inscrição nesses slots realiza-se a partir do dia 3 de Janeiro na recepção do DI.
02/12/2006: Já é possível realizar a inscrição para a apresentação dos trabalhos práticos (na recepção do departamento).
22/11/2006: Já estão disponíveis as instruções para submissão do trabalho prático.
26/10/2006: Já está disponível o enunciado do primeiro trabalho prático.
28/09/2006: Início das aulas.
Na actual estrutura da Licenciatura em Engenharia Informática, esta é a primeira de uma série de unidades curriculares designadas por Laboratórios de Informática. Como o seu próprio nome sugere, estas unidades curriculares agregam as componentes laboratoriais (de informática) das várias temáticas leccionadas no semestre.
Nesta primeira instância, concentrar-nos-emos nos seguintes tópicos:
Prática de programação na linguagem Haskell.
Utilização do LaTeX na elaboração de relatórios e outros documentos.
Exploração de um sistema de manipulação simbólica (Mapple) como ferramenta na resolução de problemas de engenharia.
Instruções para submissão: O trabalho deverá ser entregue AQUI. O grupo deve registar-se nesse site para poder submeter o trabalho. IMPORTANTE: o sistema só aceitará trabalhos até às 24:00 do dia 26/11/2006 (note que o prazo já foi alargado para permitir que o processo de submissão seja feito atempada e tranquilamente. Não arrisque a deixar a entrega para os últimos instantes...).
Apresentação: Os grupos deverão inscrever-se na recepção do departamento (piso 0) para realizar a apresentação do trabalho prático.
T (2004.09.23): Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação-implementação. Objectivos e programa da disciplina; sua integração no plano curricular do curso.
TP (2004.09.22): Apresentação: marcação de turnos.
TP (2004.09.22): Apresentação: marcação de turnos.
T (2004.09.30): Motivação para a especificação relacional. Introdução ao Cálculo Relacional. Operadores básicos e propriedades.
TP (2004.09.29): Apresentação do VDMTools. Resolução do problema 02 do guião das sessões de laboratório(Modelling with Sequences).
TP (2004.09.30): Apresentação do VDMTools. Resolução do problema 02 do guião das sessões de laboratório (Modelling with Sequences).
T (2004.10.07): Cálculo Relacional: Lei modular; técnicas de prova; exemplos.
TP (2004.10.06): Resolução do problema 03 dos guiões (Modelling with Sets).
TP (2004.10.07): Resolução do problema 03 dos guiões (Modelling with Sets).
T (2004.10.14): Dispensa de aulas concedida pelo Senhor ReitorTP (2004.10.13): Resolução do problema 06 dos guiões (Modelling with Mappings).
TP (2004.10.14): Resolução do problema 06 dos guiões (Modelling with Mappings).
T (2004.10.21): Raciocínio com funções: regras de shunting; especialização de leis. Conexões de Galois: motivação, definição e exemplos. Propriedades básicas associadas a uma conexão de Galois. Prova da preservação de supremos (infimos) pelo adjunto inferior (superior).
TP (2004.10.20): Resolução do problema 07 dos guiões (Multisets "are" Mappings).
TP (2004.10.21): Resolução do problema 07 dos guiões (Multisets "are" Mappings).
T (2004.10.28): Continuação da aula anterior: análise de diversos exemplos de conexões de Galois e derivação de propriedades.
Noção de either e split relacionais.
TP (2004.10.27): Resolução da Ficha 1 (Cálculo Relacional).
TP (2004.10.28): Resolução da Ficha 1 (Cálculo Relacional).
T (2004.11.04): Faltou o docente (por deslocação em serviço). Em substituição foi dada uma aula TP a cargo da Prof. Olga Pacheco.
TP (2004.11.03): Resolução da Ficha 2 (Cálculo Relacional).Resolução do problema 04 dos guiões (Datatype Invariants).
TP (2004.11.04): Resolução da Ficha 2 (Cálculo Relacional).Resolução do problema 04 dos guiões (Datatype Invariants).
T (2004.11.11): Semântica relacional da meta-linguagem de VDM. Definição recursiva de relações. Noção de
hilomorfismo relacional. Incursão na semântica das definições recursivas. Teorema de Knaster-Tarski.
TP (2004.11.10): Faltou a docente (deslocação em serviço).
TP (2004.11.11): Faltou a docente (deslocação em serviço).
T (2004.11.18): Faltou o docente (deslocação em serviço).
Esta aula será reposta no dia 14 Dez (terça-feira) pelas 14.30 h.
TP (2004.11.17): Faltou a docente. (Aula de substituição).
TP (2004.11.18): Faltou a docente. (Aula de substituição).
T (2004.11.25): Cálculo de pontos fixos. Leis básicas e exemplos. Aplicação ao cálculo de hilomorfismos relacionais.
TP (2004.11.24): Resolução da Ficha 3 (Conexões de Galois).Resolução do problema 09 dos guiões (A Toy Production Database model).
TP (2004.11.25): Resolução da Ficha 3 (Conexões de Galois).Resolução do problema 09 dos guiões (A Toy Production Database model).
T (2004.12.02): Propriedades dos hilomorfismos relacionais. Aplicação ao estudo dos tipos colectivos (não indutivos) de VDM (conjuntos e corresponências).
TP (2004.12.01): Feriado Nacional.
TP (2004.12.02): Resolução da Ficha 4 (Conexões de Galois). Continuação da resolução do problema 09 dos guiões.
T (2004.12.09): Relação de acessibilidade e pertença em tipos de dados. Factorização em equações-hilo. Condições para a existência
de soluções únicas. Aplicações.
TP (2004.12.08): Feriado Nacional.
TP (2004.12.09): (Aulas de dúvidas)
T (2004.12.14): (Reposição aula de 18 Nov) Discussão de exercícios de aplicação.
T (2004.12.16): Conclusão da disciplina. Preenchimento do questionário de avaliação.
TP (2004.12.15): (Aulas de dúvidas)
TP (2004.12.16): (Aulas de dúvidas)
-- LuisSoaresBarbosa - 21 Sep 2004
T (2005.02.21): Apresentação da Disciplina. Noção de refinamento.
TP (2005.02.22, 2005.02.24): Apresentação e marcação de turnos. Generalização das construções básicas das funções para as relações (do functor para o relator). A unidade nas relações. O produto de relações. Derivação de algumas das leis referidas como exercício de utilização do cálculo relacional.
T (2005.02.28): JOIN'05.
TP (2005.03.01): JOIN'05.
T (2005.03.07): Introdução ao refinamento de modelos de dados: relações de abstraçao e representação; a ordem de refinamento.
Invariantes induzidos. Exemplos: algumas leis de reificação de conjuntos e correspondências.
TP (2005.03.03, 2005.03.08): Continuação da apresentação de relators: o coproduto de relações; o power relator. Derivação de algumas das leis referidas como exercício de utilização do cálculo relacional.
TP (2005.03.10, 2005.03.22): Catamorfismos relacionais: propriedades e exemplos.
T (2005.03.14): Estudo de algumas situações de refinamento de dados. Propriedades da relação de
refinamento.
Prototipagem: o legado Camila.
TP (2005.03.15): Assistir à apresentação sobre o "PURe Camila" por João Ferreira e Alexandra Mendes.
T (2005.03.21): Não houve aula (ausência do docente em reunião interna).
TP (2005.03.31, 2005.04.5): Especificação de propriedades como Catamorfismos Relacionais.
T (2005.04.04): Relacionadores e o refinamento estruturado. Leis de refinamento de conjuntos finitos, correspondências e representações
por apontador. Introdução ao problema de desrecursivação de modelos de dados.
TP (2005.04.07, 2005.04.12): Utilização do Haskell na especificação do Software (comparação com VDM/Camila): abstração Set e Map; invariantes de tipo; pré e pós-condições nas operações; especificações não executáveis; características não funcionais (estado de objectos e do interpretador; operações IO; etc.). Apresentação dos projectos práticos da disciplina.
T (2005.04.11): Teorema de desrecursivação genérica: Função de abstracção e invariante concreto. Relações de pertença e acessibilidade estrutural.
Cálculo da relação de acessibilidade para diversos exemplos.
TP (2005.04.14, 2005.04.19) Refinamento de Dados: caracterização abstracta; exemplos de refinamentos; exercícios sobre refinamento de dados e utilização da biblioteca CamilaPrelude? .
T (2005.04.18): Introdução ao refinamento algorítmico. Relação de satisfação de uma especificação (implícita) por uma função e sua generalização
à satisfação de uma relação por outra. Enunciação e prova das propriedades básicas desta relação. Refinamento algoritmíco progressivo.
TP (2005.04.21, 2005.04.26) Refinamento de dados - exercício sobre normalização de dados para representação tabular.
T (2005.05.02): Continuação do sumário da aula anterior
TP (2005.04.28, 2005.05.03) Refinamento de dados: exercício sobre desrecursivação de dados.
T (2005.05.09): Noção de simulação. Resolução de equações de refinamento. Soluções funcionais e não funcionais.
TP (2005.05.05, 2005.05.17) Refinamento de algoritmos: Definição da relação "é implementado por". Demonstração de duas leis sobre a relação de implementação. Preenchimento dos inquéritos.
T (2005.05.16): Cálculo de simulações: análise de alguns casos de estudo.
TP (2005.05.19, 2005.05.24) Caso de estudo sobre refinamento de algoritmos: verificação da correcção do "insertion sort".
T (2005.05.23): Inter-combinação de ciclos e eliminação de recursão mútua. Teorema de Fokkinga e seus corolários. Exemplos de aplicação.
TP (2005.05.31, 2005.06.02) Recepção de trabalhos práticos.
T (2005.05.30): Conclusão da aula anterior. Introdução ao cálculo de soluções iterativas. Preenchimento dos inquéritos de avaliação e
fecho da disciplina.
Nota: o contacto com os docentes através de email deve ser sempre feito a partir de contas institucionais da Universidade e com a indicação clara do nome da disciplina no subject.
Programa Resumido
Introdução ao cálculo de programas. Princípio da abstracção dos dados. Relações de abstracção e de representação. Inequações de refinamento.
Cálculo de refinamento formal de dados. Teorema de desrecursivação genérica. Relações de pertença estrutural e acessibilidade estrutural. Implementação de tipos indutivos polinomais em linguagens com gestão de memória dinâmica: Introdução de apontadores em linguagens tipo C/C++. Representação orientada a objectos.
Cálculo de refinamento algorítmico. A eficiência como principal motivação para o refinamento algorítmico. Fases do refinamento algorítmico: simulação, redução do não-determinismo, mudança de estrutura de dados virtual. Lei de refinamento funcional. Lei de refinamento relacional. Leis de fusão «vertical» e «horizontal». Lei de refinamento de simultâneo de dados e algoritmos. Cálculo de ciclos while como hilomorfismos.
Prototipagem rápida e integração com outras tecnologias. Introdução ao VDM++. Integração de protótipos reactivos em arquitecturas cliente-servidor. Emulação de serviços intermédios («middleware») e de serviços de dados («dataware»).
Critérios de Avaliação
Nota final
Componente Teórica (Exame): 70% (nota mínima de 8 valores)
Componente Prática: Facultativa, com um peso de 30%.
No caso não se realizar trabalho prático, o exame teórico conta integralmente para a nota final (100%), mas essa nota fica majorada a 16 valores.
T (2005.02.21): Apresentação da Disciplina. Noção de refinamento.
TP (2005.02.22, 2005.02.24): Apresentação e marcação de turnos. Generalização das construções básicas das funções para as relações (do functor para o relator). A unidade nas relações. O produto de relações. Derivação de algumas das leis referidas como exercício de utilização do cálculo relacional.
T (2005.02.28): JOIN'05.
TP (2005.03.01): JOIN'05.
T (2005.03.07): Introdução ao refinamento de modelos de dados: relações de abstraçao e representação; a ordem de refinamento.
Invariantes induzidos. Exemplos: algumas leis de reificação de conjuntos e correspondências.
TP (2005.03.03, 2005.03.08): Continuação da apresentação de relators: o coproduto de relações; o power relator. Derivação de algumas das leis referidas como exercício de utilização do cálculo relacional.
TP (2005.03.10, 2005.03.22): Catamorfismos relacionais: propriedades e exemplos.
T (2005.03.14): Estudo de algumas situações de refinamento de dados. Propriedades da relação de
refinamento.
Prototipagem: o legado Camila.
TP (2005.03.15): Assistir à apresentação sobre o "PURe Camila" por João Ferreira e Alexandra Mendes.
T (2005.03.21): Não houve aula (ausência do docente em reunião interna).
TP (2005.03.31, 2005.04.5): Especificação de propriedades como Catamorfismos Relacionais.
T (2005.04.04): Relacionadores e o refinamento estruturado. Leis de refinamento de conjuntos finitos, correspondências e representações
por apontador. Introdução ao problema de desrecursivação de modelos de dados.
TP (2005.04.07, 2005.04.12): Utilização do Haskell na especificação do Software (comparação com VDM/Camila): abstração Set e Map; invariantes de tipo; pré e pós-condições nas operações; especificações não executáveis; características não funcionais (estado de objectos e do interpretador; operações IO; etc.). Apresentação dos projectos práticos da disciplina.
T (2005.04.11): Teorema de desrecursivação genérica: Função de abstracção e invariante concreto. Relações de pertença e acessibilidade estrutural.
Cálculo da relação de acessibilidade para diversos exemplos.
TP (2005.04.14, 2005.04.19) Refinamento de Dados: caracterização abstracta; exemplos de refinamentos; exercícios sobre refinamento de dados e utilização da biblioteca CamilaPrelude? .
T (2005.04.18): Introdução ao refinamento algorítmico. Relação de satisfação de uma especificação (implícita) por uma função e sua generalização
à satisfação de uma relação por outra. Enunciação e prova das propriedades básicas desta relação. Refinamento algoritmíco progressivo.
TP (2005.04.21, 2005.04.26) Refinamento de dados - exercício sobre normalização de dados para representação tabular.
T (2005.05.02): Continuação do sumário da aula anterior
TP (2005.04.28, 2005.05.03) Refinamento de dados: exercício sobre desrecursivação de dados.
T (2005.05.09): Noção de simulação. Resolução de equações de refinamento. Soluções funcionais e não funcionais.
TP (2005.05.05, 2005.05.17) Refinamento de algoritmos: Definição da relação "é implementado por". Demonstração de duas leis sobre a relação de implementação. Preenchimento dos inquéritos.
T (2005.05.16): Cálculo de simulações: análise de alguns casos de estudo.
TP (2005.05.19, 2005.05.24) Caso de estudo sobre refinamento de algoritmos: verificação da correcção do "insertion sort".
T (2005.05.23): Inter-combinação de ciclos e eliminação de recursão mútua. Teorema de Fokkinga e seus corolários. Exemplos de aplicação.
TP (2005.05.31, 2005.06.02) Recepção de trabalhos práticos.
T (2005.05.30): Conclusão da aula anterior. Introdução ao cálculo de soluções iterativas. Preenchimento dos inquéritos de avaliação e
fecho da disciplina.
Sessão de esclarecimento de dúvidas na próxima 2ª feira (dia 18) às 14:30 na sala DI 0.02.
-- MariaJoaoFrade - 12 Jul 2005
Os testes poderão ser consultados na Quarta-feira (13 de Julho) às 9:30 na sala DI 0.02 (junto à recepção).
-- MariaJoaoFrade - 12 Jul 2005
Os alunos que vão entregar o trabalho prático apenas a MP2, deverão faze-lo na próxima 2ªfeira, 30 de Maio, da parte da manhã.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
Quem entregar trabalhos a MP2 e a PP4, apenas tem que fazer a marcação de entrega de trabalhos a PP4 (a recepção de MP2 será feita na mesma altura).
-- MariaJoaoFrade - 24 May 2005
Disponíveis as notas práticas do ano lectivo 2004/2004.
-- JoseBacelarAlmeida - 09 Mar 2005
T (2006.02.21): Apresentação da Disciplina. Introdução aos sistemas reactivos. Álgebras e Coalgebras.
Tipos indutivos e coindutivos. Interação e comportamento. Comportamento dos autómatos determinísticos.
-- LuisSoaresBarbosa - 21 Feb 2006
Terão lugar (no anfiteatro A1 do DI) as seguintes sessões de esclarecimento de dúvidas:
2a.fa. 14 Fev 10:00, com possibilidade de consulta dos exames (1a. chamada).
4a.fa. 16 Fev 10:00, com possibilidade de consulta dos exames (2a. chamada).
-- JorgeSousaPinto - 06 Jan 2005
Disponíveis nesta página (com a preciosa ajuda de Nuno Rodrigues) alguns exercícios resolvidos.
-- JorgeSousaPinto - 08 Jan 2005
Já disponível nesta página a versão final dos slides das aulas teóricas.
-- JorgeSousaPinto - 2 Dec 2004
Disponível nesta página a versão 5 dos exercícios da disciplina. A menos de correcções de erros e algum rearranjo de estrutura, esta é a versão final deste documento
-- JorgeSousaPinto - 11 Dec 2004
T (2004.09.23): Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação-implementação. Objectivos e programa da disciplina; sua integração no plano curricular do curso.
TP (2004.09.22): Apresentação: marcação de turnos.
TP (2004.09.22): Apresentação: marcação de turnos.
T (2004.09.30): Motivação para a especificação relacional. Introdução ao Cálculo Relacional. Operadores básicos e propriedades.
TP (2004.09.29): Apresentação do VDMTools. Resolução do problema 02 do guião das sessões de laboratório(Modelling with Sequences).
TP (2004.09.30): Apresentação do VDMTools. Resolução do problema 02 do guião das sessões de laboratório (Modelling with Sequences).
T (2004.10.07): Cálculo Relacional: Lei modular; técnicas de prova; exemplos.
TP (2004.10.06): Resolução do problema 03 dos guiões (Modelling with Sets).
TP (2004.10.07): Resolução do problema 03 dos guiões (Modelling with Sets).
T (2004.10.14): Dispensa de aulas concedida pelo Senhor ReitorTP (2004.10.13): Resolução do problema 06 dos guiões (Modelling with Mappings).
TP (2004.10.14): Resolução do problema 06 dos guiões (Modelling with Mappings).
T (2004.10.21): Raciocínio com funções: regras de shunting; especialização de leis. Conexões de Galois: motivação, definição e exemplos. Propriedades básicas associadas a uma conexão de Galois. Prova da preservação de supremos (infimos) pelo adjunto inferior (superior).
TP (2004.10.20): Resolução do problema 07 dos guiões (Multisets "are" Mappings).
TP (2004.10.21): Resolução do problema 07 dos guiões (Multisets "are" Mappings).
T (2004.10.28): Continuação da aula anterior: análise de diversos exemplos de conexões de Galois e derivação de propriedades.
Noção de either e split relacionais.
TP (2004.10.27): Resolução da Ficha 1 (Cálculo Relacional).
TP (2004.10.28): Resolução da Ficha 1 (Cálculo Relacional).
T (2004.11.04): Faltou o docente (por deslocação em serviço). Em substituição foi dada uma aula TP a cargo da Prof. Olga Pacheco.
TP (2004.11.03): Resolução da Ficha 2 (Cálculo Relacional).Resolução do problema 04 dos guiões (Datatype Invariants).
TP (2004.11.04): Resolução da Ficha 2 (Cálculo Relacional).Resolução do problema 04 dos guiões (Datatype Invariants).
T (2004.11.11): Semântica relacional da meta-linguagem de VDM. Definição recursiva de relações. Noção de
hilomorfismo relacional. Incursão na semântica das definições recursivas. Teorema de Knaster-Tarski.
TP (2004.11.10): Faltou a docente (deslocação em serviço).
TP (2004.11.11): Faltou a docente (deslocação em serviço).
T (2004.11.18): Faltou o docente (deslocação em serviço).
Esta aula será reposta no dia 14 Dez (terça-feira) pelas 14.30 h.
TP (2004.11.17): Faltou a docente. (Aula de substituição).
TP (2004.11.18): Faltou a docente. (Aula de substituição).
T (2004.11.25): Cálculo de pontos fixos. Leis básicas e exemplos. Aplicação ao cálculo de hilomorfismos relacionais.
TP (2004.11.24): Resolução da Ficha 3 (Conexões de Galois).Resolução do problema 09 dos guiões (A Toy Production Database model).
TP (2004.11.25): Resolução da Ficha 3 (Conexões de Galois).Resolução do problema 09 dos guiões (A Toy Production Database model).
T (2004.12.02): Propriedades dos hilomorfismos relacionais. Aplicação ao estudo dos tipos colectivos (não indutivos) de VDM (conjuntos e corresponências).
TP (2004.12.01): Feriado Nacional.
TP (2004.12.02): Resolução da Ficha 4 (Conexões de Galois). Continuação da resolução do problema 09 dos guiões.
T (2004.12.09): Relação de acessibilidade e pertença em tipos de dados. Factorização em equações-hilo. Condições para a existência
de soluções únicas. Aplicações.
TP (2004.12.08): Feriado Nacional.
TP (2004.12.09): (Aulas de dúvidas)
T (2004.12.14): (Reposição aula de 18 Nov) Discussão de exercícios de aplicação.
T (2004.12.16): Conclusão da disciplina. Preenchimento do questionário de avaliação.
TP (2004.12.15): (Aulas de dúvidas)
TP (2004.12.16): (Aulas de dúvidas)
-- LuisSoaresBarbosa - 21 Sep 2004
Nota: o contacto com os docentes através de email deve ser sempre feito a partir de contas institucionais da Universidade e com a indicação clara do nome da disciplina no subject.
Programa Resumido
Introdução ao problema do controlo de qualidade em `software' . Especificação formal -- porquê e para quê? Introdução aos binómio especificação /implementação.
Ciclo de vida do software usando métodos formais. Redução do risco e dos custos. Áreas típicas de aplicação. Sistemas críticos e confiáveis. Qualidade de serviços.
Linguagens e métodos para especificação formal. Antecendentes históricos. Do método de Viena (VDM) ao `standard' ISO/IEC 13817-1 (VDM-SL).
Estudo da notação VDM-SL. Modelação por conjuntos, sequências e funções finitas. Especificação por pré/pós-condições. Invariantes. Sub-especificação e não-determinismo. Relação (especificação) versus função (implementação).
Prototipagem e animação. Experiência com a utilização do ambiente VDMTOOLS.
Introdução ao cálculo relacional. Combinadores relacionais básicos. Taxonomia de relações binárias. Conexões de Galois. Pontos fixos.
Semântica relacional para VDM-SL e cálculo de especificações.
Critérios de Avaliação
Nota final
Componente Teórica (Exame): 80% (nota mínima de 8 valores)
Componente Prática: 20% em avaliação contínua e entrega de relatórios das aulas laboratoriais (nota mínima de 10 valores)
Recorda-se que o estatuto de Trabalhador-Estudante não isenta os alunos nessas condições da obrigatoriedade de realizar a componente experimental da disciplina.
ATENÇÃO: A página oficial da disciplina está alojada em http://www.di.uminho.pt/~jno/html/mpi.html.
Esta página destina-se apenas a fornecer material de estudo adicional e a dar apoio aos trabalhos práticos.
As apresentações do 2º trabalho prático decorrerão nos dias 4, 5 e 6 de Janeiro. Já se encontram disponíveis na recepção do DI as folhas para as marcações das apresentações orais dos trabalhos práticos.
Apresentações do 1º Trabalho Prático
As apresentações do 1º trabalho prático decorrerão nos dias 21, 22 e 23 de Novembro. Já se encontram disponíveis na recepção do DI as folhas para as marcações das apresentações orais dos trabalhos práticos.
É obrigatório a elaboração de um pequeno relatório (1 ou 2 páginas),
explicando as principais decisões tomadas na resolução dos problemas
propostos. Este relatório deve também ser submetido ao sistema de recepção
de trabalhos práticos. Aquando da apresentação oral, os grupos devem-se fazer acompanhar
pelos respectivos relatórios impressos.
Submissão Electrónica
Siga este link. Os trabalhos têm de ser submetidos em formato .zip ou .tgz
Para efectuar a entrega do trabalho é necessário registar primeiro o grupo, registo este que so deve acontecer uma única vez. Para isso devem seleccionar a opção Registar e introduzir um username e uma password para o grupo; Depois de registado o grupo, devem fazer login com o username e password escolhidos; Uma vez dentro do sistema, devem selecionar a opção "Elementos do Grupo" e registar todos os elementos do grupo um por um; Por fim, para submeter o trabalho selecionem a opção "Submeter Trabalho" e escolham qual o trabalho a submeter bem como o ficheiro contendo o trabalho, fazendo "Submit" no final.
Se algum grupo perder a password contacte NunoRodrigues. Não tentem nunca registarem-se mais do que uma vez.
FAQ dos Trabalhos Práticos
Disponível nesta página
(faça login como TWikiGuest e coloque as suas questões)
Terão lugar (no anfiteatro A1 do DI) as seguintes sessões de esclarecimento de dúvidas:
2a.fa. 14 Fev 10:00, com possibilidade de consulta dos exames (1a. chamada).
4a.fa. 16 Fev 10:00, com possibilidade de consulta dos exames (2a. chamada).
-- JorgeSousaPinto - 06 Jan 2005
Disponíveis nesta página (com a preciosa ajuda de Nuno Rodrigues) alguns exercícios resolvidos.
-- JorgeSousaPinto - 08 Jan 2005
Já disponível nesta página a versão final dos slides das aulas teóricas.
-- JorgeSousaPinto - 2 Dec 2004
Disponível nesta página a versão 5 dos exercícios da disciplina. A menos de correcções de erros e algum rearranjo de estrutura, esta é a versão final deste documento
-- JorgeSousaPinto - 11 Dec 2004
Ficheiros contendo definições e exemplos de utilização dos padrões de recursividade de listas e árvores binárias: MP1-Libraries.tgz
Trabalhos Práticos
Submissão Electrónica
Siga este link. Os trabalhos têm de ser submetidos em formato .zip ou .tgz
Para efectuar a entrega do trabalho é necessário registar primeiro o grupo, registo este que so deve acontecer uma única vez. Para isso devem seleccionar a opção Registar e introduzir um username e uma password para o grupo; Depois de registado o grupo, devem fazer login com o username e password escolhidos; Uma vez dentro do sistema, devem selecionar a opção "Elementos do Grupo" e registar todos os elementos do grupo um por um; Por fim, para submeter o trabalho selecionem a opção "Submeter Trabalho" e escolham qual o trabalho a submeter bem como o ficheiro contendo o trabalho, fazendo "Submit" no final.
Se algum grupo perder a password contacte NunoRodrigues. Não tentem nunca registarem-se mais do que uma vez.
Enunciados
Trabalho 1, a ser submetido electronicamente até às 24:00 do dia 10 de Outubro.
Trabalho 2, a ser submetido electronicamente até às 24:00 do dia 7 de Novembro.
Trabalho 3, a ser submetido electronicamente até às 24:00 do dia 12 de Dezembro.
Pré-Requisitos
Não havendo pré-requisitos formais, assume-se que os alunos possuem o seguinte conjunto de conhecimentos:
familiaridade com conceitos básicos de Programação Funcional
familiaridade com a linguagem de programação Haskell
Critérios de Avaliação
Nota final
Componente Teórica (Exame): 60% (nota mínima de 8 valores)
Componente Prática (Trabalhos Práticos): 40% (nota mínima de 10 valores)
Avaliação prática
A componente prática da nota resulta da avalição de três trabalhos práticos.
Os trabalhos serão realizados extra-aulas, por grupos de exactamente 3 alunos.
Datas para a entrega dos trabalhos práticos: 10 de Outubro, 7 de Novembro, e 12 de Dezembro.
Aqueles alunos que obtiveram classificação prática positiva no ano anterior poderão congelar essas notas para o ano corrente. O CONGELAMENTO IMPLICA QUE O ALUNO NÃO SERÁ AVALIADO NA VERTENTE PRÁTICA ESTE ANO, NÃO PODENDO POR ISSO ENTREGAR QUALQUER TRABALHO.
Programa Resumido
Motivação. Teoria e método em programação. Cálculo e raciocínio sobre programas. Composicionalidade. Combinadores de programas. Modularidade e reutilização.
Programação funcional: sua motivação e antecendentes históricos. Composição de funções. Noções de abstracção e de isomorfismo.
Iniciação à estruturação de dados. Combinadores básicos e suas propriedades estruturais (reflexão, fusão, absorção, cancelamento e de functorialidade). Álgebra de um tipo de dados. Lei da troca.
Introdução às estruturas de dados indutivas regulares. Álgebras de functores. A triologia «cata-ana-hilo». Recursividade polinomial. Caso de estudo: algoritmos de ordenação.
Parametrização e polimorfismo. Programação genérica. Functores de tipo. Introdução ao politipismo.
Programação funcional com mónadas. `Input/output'. Excepções
Bibliografia
Textos de referência sobre Programação Funcional e Haskell:
R. Bird, Introduction to Functional Programming Using Haskell. Prentice-Hall International, 2nd edition, 1998
J.M. Valença e J.B. Barros, Fundamentos da Computação II: Programação Funcional. Universidade Aberta, 2000
Recomenda-se ainda, como apoio específico aos temas tratados na disciplina:
Devemos nos restringir unicamente aos operadores Pointfree indicados no enunciado (não há o Either, por exemplo)?
Claro que não! Faltam todos os operadores das somas e dos exponenciais. Quanto mais provar melhor!!
No ponto 4 para a calculadora quantas expressões simplificadas são para devolver? É que tendo a função "reescreve" a devolver várias simplificações as hipóteses de aplicar novas regras vão aumentando progressivamente. Se é para devolver apenas uma simplificação qual devemos escolher?
Essa decisão fica ao vosso critério.
Na função "reescreve" pede para devolver todas as expressões possiveis resultantes da reescrita. A pergunta é: é necessário devolver expressões em que a substituião foi feita apenas num termo de nivel n? Isto é a substituição feita apenas dentro de um termo que por sua vez está dentro de outro e assim sucessivamente? Ou é necessário devolver apenas as substituições que fazem matching no primeiro nivel do termo?
Tem que devolver todas, independentemente do nível em que se encontrem na árvore. Por exemplo,
reescreve (Term Comp [Var ´f´, Term Id []], Var ´f´) (Term Comp [Term Comp [Term Fst [], (Term Comp [Term Snd [], Term Id []]], Term Id []])
deverá devolver a seguinte lista (não necessariamente na ordem apresentada). Note que existem duas subexpressões que fazem match com o lado esquerdo da regra.
[Term Comp [Term Fst [], (Term Comp [Term Snd [], Term Id []]], Term Comp [Term Comp [Term Fst [], Term Snd []], Term Id []]]
O enunciado faz referência à necessidade de definir a orientação em que vamos aplicar a equação.
Na practica, a que se refere essa orientação? Isso quer dizer que uma vez que assumimos que a orientação é sempre feita da
esquerda para a direita, a substituição vai ser sempre feita na equação (PF1,PF2)? Isto é, fazendo match com PF1, devolve sempre
PF2 (partindo do principio que as condicoes se verificam)?
Exactamente. Definir a orientação é decidir qual dos lados de uma equação vai ficar do lado esquerdo e qual vai ficar do lado direito.
Quanto às expressões genéricas, a noçao de subexpressão refere-se a todos os membros da lista de Expressões de cada termo? ou seja..
data Exp v c = Term c [SubExp v c] | Var v
data SubExp v c = Term c [SubExp v c] | Var v
e se assim é qual a vantagem da criaçao deste tipo? sendo que uma subexpressão é em si mesma uma expressão.
Na versão mais simplista uma subexpressão é efectivamente igual a uma expressão, ou seja,
type TWiki.SubExp v c = Exp v c
Assumindo esta definição, a função que enumera as subexpressões deverá devolver para o exemplo
assocr :: Pointfree
assocr = Term Split [Term Comp [Term Fst [], Term Fst []], Term Prod [Term Snd [], Term Id []]]
a seguinte lista de subexpressões (não necessariamente nesta ordem).
[Term Split [Term Comp [Term Fst [], Term Fst []], Term Prod [Term Snd [], Term Id []]],
Term Comp [Term Fst [], Term Fst []], Term Prod [Term Snd [], Term Id []], Term Fst [], Term Snd [], Term Id []]
Por vezes pode ser conveniente distinguir subexpressões iguais, mas que ocorrem em posições diferentes da expressão original, como é o caso da subexpressão Term Fst [] do exemplo acima. Quem desejar enveredar por esta alternativa deverá incluir no tipo das subexpressões uma indicação da posição ocupada pela subexpressão em causa. Essa posição deverá ser o caminho necessário para encontrar a subexpressão na expressão original.
Achei a explicaçao da função update um tanto confusa, é possivel dar um exemplo concreto de uma invocaçao e do resultado?
Vamos supor que uma substituição s (do tipo Subst Char PF) contém as seguintes associações entre variáveis e expressões (note que não estamos a assumir nenhuma impementação concreta para este tipo):
'x' --> Term Fst [] 'y' --> Term Comp [Term Snd [], Term Fst []]
Se fizermos update s 'z' (Term Snd []) será devolvida uma nova substituição que para além das expressões associadas a 'x' e 'y' contém uma nova associação entre 'z' e Term Snd []. Se fizermos update s 'x' (Term Fst []) devolve a mesma substituição sem alterações. No entanto, se fizermos update s 'x' (Term Snd []) o update falha devolvendo Nothing pois 'x' já estava associado a uma expressão diferente.
Como colocar questões?
Faça login como TWikiGuest e coloque a sua questão no topo da página em bold. Logo que possível um dos docentes responderá às suas dúvidas.
Em principio quando é que sairão as notas da primeira chamada?
Seria possivel disponibilizarem na página o exame da primeira chamada? Seria bastante util para quem o vai fazer na segunda chamada.
Não, o exame será publicado apenas no fim da época de exames.
-- JorgeSousaPinto - 19 Jan 2005
Haverão mais sessoes de duvidas, nomeadamente mais perto do exame da segunda chamada? É que, visto ainda faltar muito tempo pra este, ainda nao comecamos a estudar para ele, logo nao temos muitas duvidas aínda...
É uma boa pergunta, axo que era mais vantajoso uma das sessoes de duvidas ser na semana antes do exame da 2ª chamada.
Sim, claro, As desta semana destinam-se a quem vai à primeira chamada.
-- JorgeSousaPinto - 11 Jan 2005
Porque não fomos avaliados ao primeiro trabalho? Qual foi então o seu propósito? Perdermos tempo?
Temos diversas disciplinas com vários trabalhos cada. Agora, perdermos tempo com um, que não serviu-nos de nada... é no mínimo absurdo
O primeiro trabalho foi avaliado indirectamente. Uma vez que se tratou de um trabalho preparatório para o terceiro trabalho, entendemos avaliá-lo apenas como cumprindo ou não a funcionalidade básica; esta informação será tida em conta no cálculo da nota final.
-- JorgeSousaPinto - 06 Jan 2005
Absurda é a pergunta. Se no exame não aparecer nenhuma pergunta sobre a propriedade universal do produto, aprendê-la foi uma perda de tempo? Se a sua resposta é afirmativa então devia reconsiderar a sua opção de se inscrever num curso superior.
-- JoseBarros - 11 Jan 2005
No ponto 3.3, devemos fazer operaçoes n-árias ou dar uma aridade a cada operação? por exemplo a soma continuará a ser binária ou será n-ária?
Como não é especificado no enunciado quais os operadores n-ários a utilizar, devem apresentar uma solução genérica válida para operadores arbitrários, e exemplificá-la com alguns operadores de aridades diferentes (ver também enunciado do 1o. TP). Claro que podem incluir para este fim também operadores binários, bem como generalizar um operador binário para ternário, por exemplo.
-- JorgeSousaPinto - 11 Dec 2004
Na valorização 3 pede para fazer parser do tipo Expressao? Mas este nao da pra instanciar pk ta defenido a custa de type e nao data consequentemente da erro. Podemos redefenir atraves do data?
Nas valorizações, "the sky is the limit". Desde que seja em benefício do vosso trabalho sem introduzir novas limitações, alterem o que for necessário.
-- JorgeSousaPinto - 11 Dec 2004
Podiam dar um exemplo de um catamorfismo de ordem superior, é que não estou a perceber a ecencia da questao.
Aqui vai, para quem teve o azar de não estar presente nas muitas aulas em que isto foi exemplificado. A função de inversão de listas com acumulador,
rev [] y = y rev (x:xs) y = rev xs (x:y)
pode ser escrita como
foldr aux id where aux h r = \y -> r(h:y)
-- JorgeSousaPinto - 11 Dec 2004
Na verdade o tipo Tree é muito traiçoeiro pois tnato podemos ter árvores: Node 1 [Node 2[Node 3[]]] como tambem podemos ter Node 1 [Node 2 [], Node 3 []]. Qual a versão correcta?
Ambos os exemplos são expressões (diferentes) do tipo Tree Int.
-- JorgeSousaPinto - 11 Dec 2004
Um Tree é por exemplo: Node 1[Node 2[Node 3[Node 4 []]]] Como fazemos uma travessia preorder disso? Nao vejo Node k [a1, a2, a3] como foi respondido numa das pergundas desta faq
O resultado da travessia pré-order desta árvore é a lista [1,2,3,4]: o conteúdo da raíz da árvore seguido (da concatenação) das travessias das sub-árvores, tal como explicado em baixo.
Na 1 da valorização qd criamos a função stExecPN é suposto dar o resultado logo tipo o função aplicada ao prog dado como exemplo no enunciado de PN deve dar logo [15]?
Como é normal neste tipo de funções com estado, haverá uma função de topo que invoca a função monádica inicializando o estado com o valor inicial. A função de topo não calcula um valor monádico, apenas a outra o faz.
-- JorgeSousaPinto - 11 Dec 2004
É necessario fazer relatorio? não é dito nada no enunciado.Se sim, é para submeter tambem? ou é para levar apenas na apresentação?
Tal como no trabalho anterior,
"é necessário a elaboração de um relatório sucinto acerca do trabalho desenvolvido. Este relatório não deve ser submetido ao sistema de submissão dos trabalhos, mas sim entregue em papel na apresentação oral do trabalho."
-- JorgeSousaPinto - 11 Dec 2004
Na 3.3 pede para fazer com os tipos dados o que se fez na 3.1 e na 3.2 mas o ponto 3.2.3 é a mesma coisa pois o tipo de prog é o mesmo em ambos os casos. Estarei enganado?
O tipo é de facto o mesmo, mas os operadores são diferentes. Por exemplo, um operador ternário necessitará de extraír 3 argumentos da stack. Sendo assim, as funções de execução serão generalizações das funções definidas para o caso binário.
-- JorgeSousaPinto - 11 Dec 2004
Referente à valorização 1
para executar programas em PN ou em RPN como catamorfismos temos de distinguir duas associações diferentes, devido à diferente construção do pograma (PN/RPN). esta distinção é marcada pela utilização de foldr/foldl para cada caso.
Correcto. Mas: não se deve utilizar foldl mas sim foldr também para o segundo caso, um catamorfismo de ordem superior.
implementando estas funçoes com monads ST como respondido em baixo será usada a função sequence_ que faz uma dada associação das monads. esta associação funciona correctamente para um caso e como é obvio n funciona para o outro.
existe alguma função que faça o ke faz a sequence_ mas associe de forma inversa as monads?
Há que investigar! Será difícil, caso esta função não exista, escrevê-la?
-- JorgeSousaPinto - 11 Dec 2004
No ponto 3.2.3 b) é suposto fazer a função execRPNt em total point free? E o que devemos entender por um catamorfismo de ordem superior. Também penso que existe uma gralha no enunciado onde diz: "definindo execRPN :: Prog -> [Int] -> [Int] como um catamorfismo de listas (de ordem superior)."
Em todo o trabalho devem tentar definir funções o mais point free possivel. O catamorfismo a definir é de ordem superior, pois o seu gene tem de consumir um a parâmetro extra, i.e. o acumulador ([Int]) que simula a stack. Existe realmente uma gralha em
"definindo execRPN :: Prog -> [Int] -> [Int] como um catamorfismo de listas (de ordem superior)."
devendo ler-se
"definindo execRPNt :: Prog -> [Int] -> [Int] como um catamorfismo de listas (de ordem superior)."
-- NunoRodrigues - 09 Dec 2004
Na valorização 1 é pedido para utilizar a monad ST para executar um programa. Será suficiente ter um monad ST cujo estado é um [Instr] e cuja unica computaçao será executar execPN ou execRPN sobre o seu estado e devolver o resultado da computação??
Não. O estado deverá ser um tipo de dados que simule uma stack (p.e. [Int]). Pretende-se que façam a conversão de uma instânica de Instr para uma instância de Monad ST, que simule correctamente a operação em causa. No final desta operação irão obter uma lista de monad ST. Ai podem aplicar sequence a essa lista e executar correctamente a monad resultante.
-- NunoRodrigues - 09 Dec 2004
No ponto 2 das valorizações é necessário mostrar o estado interno da stack, que so é criado quando se faz catamorfismo de execução. Para conseguir mostrar a stack interna é necessário monades como genes do catamorfismo??
-- TWikiGuest - 09 Dec 2004
Não. Para irem mostrando o conteúdo da stack á medida que vão executando um programa, têm de trabalhar com a monad STIO. Posto isto, devem fazer a tradução de instruções (Instr) para monades STIO, monades estas que já podem efectuar IO mostrando assim o resultado interno da stack ao longo da execução do programa.
-- NunoRodrigues - 09 Dec 2004
Como posso ligar a opcao de trace de um calculo no ghc?
Podiam dar um exemplo de uma FTree com uma operação. Não é uma FBtree só com um lado, tipo uma lista, com o operador no fim???
é isto k pedem como FBTree : ftree = (FNode 1 [FNode 3 [FNode 4 [FNode 5 [FLeaf 2]]]])
Tree : tree = (Node 1 [Node 3 [Node 2 [Node 4 [Node 5[]]]]]), é isto?
Representação da expressão envolvendo um operador ternário g e um operador binário f
g(2,3,f(10,20))FNode g [Leaf 2, Leaf 3, FNode f [Leaf 10, Leaf 20]]
-- JorgeSousaPinto - 08 Dec 2004
Tive o mesmo problema na pergunta 3.3, nao faz muito sentido pedir um preorder e um postorder de uma RTree, ou faz ?
Sim, faz, cfr. resposta à questão seguinte. Não faria sentido, isso sim, falar de uma travessia inorder de uma destas árvores.
-- JorgeSousaPinto - 08 Dec 2004
Na questão 3.3 que pede para fazer o preorder e o postorder é para o fazer do tipo Tree.?
Podiam dar o exemplo do resultado, dada uma Tree, de fazer preorder e postorder.
Sim. Por exemplo, para a árvore Node k [a1,a2,a3] (com a1, a2, a3 do tipo Tree), o resultado será uma lista com k à cabeça, seguida, por esta ordem, dos elementos resultantes das travessias de a1, a2, e a3. Na travessia pós-ordem a diferença é que k aparece no fim da lista.
-- Main.Jorg
Sessão de esclarecimento de dúvidas na próxima 2ª feira (dia 18) às 14:30 na sala DI 0.02.
-- MariaJoaoFrade - 12 Jul 2005
Os testes poderão ser consultados na Quarta-feira (13 de Julho) às 9:30 na sala DI 0.02 (junto à recepção).
-- MariaJoaoFrade - 12 Jul 2005
Os alunos que vão entregar o trabalho prático apenas a MP2, deverão faze-lo na próxima 2ªfeira, 30 de Maio, da parte da manhã.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
Quem entregar trabalhos a MP2 e a PP4, apenas tem que fazer a marcação de entrega de trabalhos a PP4 (a recepção de MP2 será feita na mesma altura).
-- MariaJoaoFrade - 24 May 2005
Disponíveis as notas práticas do ano lectivo 2004/2004.
-- JoseBacelarAlmeida - 09 Mar 2005
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein.
Introduction to Algorithms. MIT Press, Cambridge,Mass., second edition,
2001.
Robert L. Kruse, Bruce P. Leung, and Clovis L. Tondo. Data Structures and
Program Design in C. Prentice Hall, second edition, 1997.
Donald E. Knuth. The Art of Computer Programming : (1) Fundamental
Algorithms, (2) Seminumerical Algorithms, (3) Sorting and Searching.
Addison/Wesley, third edition, 1997/98. 3 volumes.
Nas pautas que saíram relativamente ao ano 2004/05, alguns alunos têm como nota '*'. Em termos práticos, a que se resume esta nota?... Que nota mínima no exame escrito precisam os alunos em questão para obter aprovação à disciplina?
Visto q o exame é na proxima semana, e existe nota prática obrigatoria, para quando a pauta da avaliação prática?
Durante os exames os horarios de atendimento dos docentes vai ser o mesmo?
Para quem congela a nota do trabalho do ano anterior, os 10% dos trabalhos das TP podem ser contabilizados?
Qualquer aluno inscrito na disciplina de Métodos de Programação II.
Se quiser contribuir e não estiver registado use o login TWikiGuest com password guest.
-- JoseBacelarAlmeida - 19 Feb 2005
Gostaria de saber se os alunos que já efectuaram os trabalhos práticos da disciplina em anos anteriores necessitam de o fazer novamente este ano. Caso não seja necessário quais os procedimentos a seguir?
-- AlexandreCarvalho? - 28 Feb 2005
Os alunos que realizaram a componente prática da disciplina no ano passado (2003/2004) podem optar por congelar a nota prática. Para isso deverão
enviar um email ao docente responsável pela disciplina ou ao docente das aulas teórico-práticas.
-- JoseBacelarAlmeida - 02 Mar 2005
Já agora, para quem é trabalhador, a nota prática é congelada por dois anos?
Não.
E já agora, quem é trabalhador não precisa de congelar a nota; nem sequer por um ano.
-- JoseBarros - 16 Mar 2005
Para "defesa" do colega que escreveu isto, deixe-me dizer-lhe que para bom entendedor meia palavra basta. Trabalhador já é uma e (neste caso) = trabalhador estudante. Às vezes nem sequer são precisas palavras para compreender certas situações. Mas para isso é preciso ser-se ainda mais inteligente. Enfim, é pena que o sr.JBB tenha sempre de mandar o seu (infeliz) comentario para o ar.
Qualquer trabalhador estudante tem direito a um regime especial de frequência de todas as disciplinas de uma licenciatura! Se este regime especial não permite o congelamento de uma nota prática durante 2 anos então qual é a diferença em relação a um regime normal?? Há professores que permitem o congelamento durante 2 anos, mas pelos vistos outros têm a mania que pode fazer tudo o que lhe apetece!
--
Mais uma vez os docentes de lesi pretendem ser diferentes... não é negando direitos aos alunos que contribuimos para que o curso seja cada vez melhor, devemos apoiar aqueles que já se encontram a trabalhar pois são eles que dão visibilidade e prestigio ao nosso curso permitindo abrir novas portas para os recem licenciados. Mas parece que alguns docentes não partilham desta opinião... não se preocupem, não estamos atrás dos vossos empregos, existe mercado para todos...
--
O trabalho não vai ser em conjunto com PPIV?? Na página de PPIV tinha isto relativamente ao congelamento de nota:
CONGELAMENTO DE NOTAS PRATICAS - PPIV 2004/2005
Todos os alunos que pretendam congelar as suas notas praticas obtidas EM ANOS ANTERIORES, devem enviar um email para o endereço congelamentos_PPIV_0405@di.uminho.pt com SUBJECT: Congelamento de Nota e contendo apenas a sua identificação, ou seja, NUMERO, NOME e CURSO. A data limite para tal indicação será o dia 31 de Maio de 2005.
-- M.Ferreira - 16 Mar 2005
--
Uma vez que que este assunto parece interessar alguns dos alunos, vou tentar repetir aqui o argumento apresentado na primeira aula sobre o congelamento das notas práticas.
É da minha opinião que a componente prática da disciplina não se trata de mais um obstáculo à aprovação mas antes uma ajuda na consolidação dos conhecimentos e competências que se pretende que os alunos adquiram ao frequentar (com sucesso) esta disciplina.
Daí que as notas das várias componentes não devam ser consideradas em separado mas como parte de um todo.
A situação excepcional consagrada no RIAPA dos trabalhadores estudantes efectuarem uma disciplina com duas componentes em dois anos consecutivos pode ser justificado pela falta de recursos (neste caso, disponibilidade destes alunos) para poderem frequentar a disciplina tal como ela foi desenhada.
No caso da disciplina de Métodos de Programação II, nesta edição de 2004/2005 e face à inexistência de recursos docentes suficientes, resolvi alargar a excepcionalidade desta situação aos outros alunos.
Esta decisão tem custos associados. Estou convencido de estar a contribuir para que alguns alunos tomem a decisão (errada no meu ponto de vista) de congelar a nota prática do ano anterior, dificultando-lhes por isso mesmo a tarefa de atingirem os objectivos desta disciplina.
Quanto à discrepância entre os critérios usados em MP2 e PP4, apesar de o trabalho prático ser comum, esta partilha tem como objectivos: (1) pela parte dos alunos que vão apresentar os trabalhos de PP4 e de MP2, concentrarem-se apenas num enunciado, (2) pela parte das equipas docentes das duas disciplinas, poupar os poucos recursos que temos para as recepções dos trabalhos.
Pelo que, para os alunos inscritos apenas numa das disciplinas ou que não pretendam realizar a parte prática de alguma delas, esta partilha é irrelevante.
Finalmente, a minha participação nesta discussão, apesar da falta de educação de algumas intervenções acima, deve-se à convicção que tenho que se tratam de excepções que não devem privar a maioria dos alunos da utilidade desta FAQ.
-- JoseBarros - 17 Mar 2005
Será possível colocarem as notas práticas do ano passado online?
Já estão na página. Em breve também estará a lista dos alunso que pediram para congelar a nota.
-- JoseBarros - 16Mar2005
Quantos trabalhos práticos vão existir este ano, para quando (+/-)? E relativamente ás apresentações para quando estão programadas?
-- AlexandreCalisto? - 16 Mar 2005
Vai existir apenas 1. Para ser entregue no final do ano. Com apresentação conjunta com o trabalho de PP4.
Adicionalmente, serão pedidos pequenos trabalhos (facultativos) para serem entregues nas aulas TPráticas.
O peso desta componente facultativa é de 10% da nota final.
-- JoseBarros - 16-Marco-2005
Sendo esta componente facultativa (mas que vale 10%), porquê prejudicar quem não pode assistir às aulas práticas e fazer os respectivos trabalhos - por exemplo alunos com sobreposição de horários ou trabalhadores estudante? Porque não considerar 40% o valor do trabalho prático nestes casos?
A professora das teórico-práticas disse que irá haver um trabalho para o qual teremos 3 semanas para fazer, que será para entregar nas tp e no qual terá-se de aplicar tudo o que se aprendeu nessas aulas. Gostaria de saber se haverá mais alguma informação disponibilizada na página da cadeira sobre esse trabalho e se sim, quando mais ou menos é que estará disponível.
Quanto ao Trabalho Prático, como vêm expressas as horas de partida? 4 digitos seguidos (por exemplo, 1659) ? separados por 2 pontos (16:59) ?
-- AlexandreCarvalho?
Qualquer uma das alternativas. Isto é, fica ao vosso critério.
-- JoseBarros - 06 May 2005
As durações dos voos serão expressas em minutos ou horas:minutos?
-- AlexandreCarvalho?
Idem.
-- JoseBarros - 06 May 2005
No ponto 3, quando assume que a ordem da lista estabelece a prioridade das cargas o que é que devemos inferir disto? que as capacidades de peso e volume dos voos vão-se alterando consoante a alocação das cargas?
-- AlexandreCarvalho?
Não. O que quer dizer é que se eu tiver a alternativa de colocar uma de duas cargas, coloco aquela que aparece em primeiro lugar na lista.
-- JoseBarros - 06 May 2005
Os dois ficheiros de texto que serão usados nos testes vão ser disponibilizados pelo professor?
... ou seremos nós a criar um exemplo? Digo isto porque o volume de dados que o meu ficheiro tem neste momento
é pequeno para testar o desempenho da aplicação.
Já agora uma dúvida simples para o meu caso de testes: podemos ter voos com a mesma origem e mesmo destino, nas mesmas horas, com designações diferentes? Por exemplo TP1201 e TP1202 ??
-- Alvaro Silva - 06 May 2005
No ponto 3, a lista de cargas dada, como sabemos qual é a origem da carga?
Suponho que a origem será comum para todas as cargas.
Eu não sei como os professores pretendem, por aqui a origem está a ser especificada na linha de comandos.
Exemplo: ./mp2 -origem=Lisboa ...
-- AlexandreCarvalho? - 16 May 2005
Quando não é dito nada, e como se trata de uma extensão do trabalho de PP4, estamos a falar de uma mesma origem -- aquela cuja gestão é proposta em PP4.
Mas a sugestão de isso ser feito da linha de comando também me parece reazoável.
-- JoseBarros - 25 May 2005
Um Voo pode comportar mais que uma carga, isto é, se o avião tiver espaço pode levar 1+ cargas? ou apenas uma unica?
Pode e deve levar as cargas que lá couberem.
-- JoseBarros - 25 May 2005
Será que podiam disponibilizar o exame da primeira chamada?
T (2006.02.21): Apresentação da Disciplina. Introdução aos sistemas reactivos. Álgebras e Coalgebras.
Tipos indutivos e coindutivos. Interação e comportamento. Comportamento dos autómatos determinísticos.
-- LuisSoaresBarbosa - 21 Feb 2006
Aula Extra
Em substituição das aulas da semana 22-26, será realizada uma sessão de dúvidas/exercícios no dia 13 de Junho
(terça-feira) às 14.30. Ponto de encontro na sala de atendimento do DI.
Questões a Abordar
Como se caracteriza o paradigma de computação reactivo e qual o interesse do seu estudo?
Como modelar sistemas reactivos e estudar a sua composicionalidade?
Em que condições dois sistemas reactivos podem ser considerados equivalentes ou similares?
Como captar as noções de mobilidade e reconfiguração dinâmica de sistemas reactivos?
Como analisar e prototipar modelos de sistemas reactivos?
Qual a relevância deste paradigma e cálculos associados para a Engenharia do Software?
Programa Resumido
Interação e Comportamento
a.
Introdução aos sistemas reactivos. Noção de interacção e comportamento.
b.
Caso 1: sequências infinitas (de acções) como tipo dos comportamento de autómatos determinísticos.
c.
Noção de tipo coindutivo. Definição e prova por coindução. Cálculo de estruturas coindutivas. Comparação com os tipos indutivos.
d.
Cálculo de sequências infinitas. Codificação em Haskell.
e.
Caso 2: comportamento de autómatos não determinísticos e sistemas de transição de estados.
f.
Definição de morfismo, simulação e bissimulação. Propriedades da bissimulação
g.
Caso 3: dos autómatos aos processos.
Sistemas Reactivos
a.
Estado, interação e concorrência. Noção de processo, traço e comportamento.
b.
Operadores sobre processos. O cálculo CCS: sintaxe e semântica operacional.
c.
Equivalência estrita, equivalência observacional e igualdade de processos. Leis.
d.
Concorrência e não determinismo: o teorema da expansão.
e.
Discussão de exemplos. Modelação e análise de problemas no CWB
f.
Prototipagem funcional de sistemas reactivos
* Sistemas Reactivos com Mobilidade
a.
Noção de mobilidade e reconfiguração dinâmica de processos. Exemplos e aplicações.
b.
Introdução ao cálculo Pi: sintaxe, semântica.
c.
Equivalências para processos móveis. Leis.
f.
Discussão de exemplos. Modelação e análise de problemas no MWB
Communicating and Mobile Processes: the Pi-Calculus, Robin Milner, Cambridge University Press, 1999. Trata-se do livro base para a disciplina. A primeira parte introduz o cálculo base de sistemas reactivos, popularizado sob a designação de Ccs, enquanto a segunda parte aborda o problema da mobilidade e reconfiguração dinâmica de sistemas, constituindo a referência base para o Pi-calculus.
Communication and Concurrency. Robin Milner,Prentice Hall (Hoare Series in Computer Science), 1989. Obra anterior do mesmo autor, é suficiente como introdução a Ccs, mas omissa no que concerne à mobilidade. Se consultar a primeira edição deste livro (1989), tenha à mão a seguinte errata (ps.gz)
The Pi-calculus: A theory of mobile processes, Sangiorgi, D. and Walker, D., Cambridge University Press, 2001.
An Introduction to the _Pi-calculus. J. Parrow, draft (ps.gz) de capítulo análogo no Handbook of Process Algebra, Elsevier, 2001.
O Concurrency Workbench será uma das ferramentas de suporte à disciplina. Neste site pode obter executáveis para Linux e Windows. Ao utilizar o CWB-NC, poderá ainda fazer uso do ccs2dot (tar.gz) paravisualização dos grafos de transição sobre GraphViz por alunos desta disciplina (João Ferreira, Alexandra Mendes e José Proença) em 2002-03.
Supõe-se familiaridade com a linguagem Haskell e com o cálculo de programas funcionais estudado em Métodos de Programação 1. A primeira parte do livro Algebra of Programming (R. Bird e O. de Moor, Prentice-Hall, 1997) é uma excelente introdução a esse cálculo.
Critérios de Avaliação
Componente Teórica (Exame): 70% (nota mínima de 8 valores)
Componente Prática: 30%
A componente prática da nota resulta da avaliação do desempenho nas aulas TP e da realização de uma Ficha de Trabalho, de resolução individual e fora do tempo lectivo, de acordo com o calendário seguinte:
Resultados da Avaliação (26 Julho 2006)
Classificações dos Exames, Prática e Nota Final (Época Normal) (pdf)
Classificações dos Exames, Prática e Nota Final (Época Recurso) (pdf)
-- LuisSoaresBarbosa - 26 Jul 2006
Os exames de recurso podem ser consultados no próximo dia 10 de Março (6ªfeira) das 15h00 às 16h00 no anfiteatro DI A1 (piso 0, junto à recepção).
-- MariaJoaoFrade - 08 Mar 2006
Os exames estarão disponíveis para consulta, 4ªfeira (8 Fev.) entre as 14h30 e as 15h30, no anfitiatro DI A1.
-- MariaJoaoFrade - 07 Feb 2006
Já sairam as notas dos exames da Época Normal.
-- MariaJoaoFrade - 06 Feb 2006
AVISO DE PROVAS ORAIS (para melhoria de nota)
Os exames orais para melhoria de nota serão realizados no dia 8 de Fevereiro (4ª feira), às 9h30. Os alunos deverão esperar na recepção do DI (piso 0).
-- MariaJoaoFrade - 03 Feb 2006
Está aqui (zip) a resolução da ficha 9 (aula prática).
-- MariaJoaoFrade - 05 Dec 2005
Já está disponível o enunciado do 2º trabalho prático.
As apresentações dos trabalhos serão feitas, na semana de 12 Dezembro a 16 de Dezembro, no horário dos turnos práticos.
-- MariaJoaoFrade - 17 Nov 2005
Já está disponível o enunciado do projecto prático para melhoria de nota.
Ver secção Melhorias de Nota.
-- MariaJoaoFrade - 25 Oct 2005
Já está disponível o enunciado do 1º trabalho prático.
As apresentações dos trabalhos serão feitas, na semana de 31 Outubro a 4 de Novembro, no horário dos turnos práticos. Exceptuam-se os turnos de 3ª feira (feriado), que terão que apresentar o trabalho na quarta-feira em horário a marcar. Para os grupos destes turnos, existirá uma folha de marcação de horário na recepção do DI.
-- MariaJoaoFrade - 18 Oct 2005
4ªfeira (dia 28) às 10h00 aula de apresentação no CP1 A3.
-- MariaJoaoFrade - 23 Sep 2005
As aulas práticas começam no dia 3 de Outubro.
-- MariaJoaoFrade - 20 Sep 2005
AVISO PROVAS ORAIS
As provas orais irão realizar-se na 6ªfeira dia 4 de Março, às 10:00. Ponto de encontro: junto à secretaria do DI (piso 2).
AVISO TURNOS 6 e 7 (MBB)
Alteração nas datas de entrega para os turnos 6 e 7. Ficheiro actualizado: Datas das entregas para os alunos dos Turnos 2,3,6 e 7 (MBB)
-- ManuelBernardoBarbosa - 3 Jan 2004
Informações sobre entrega dos trabalhos
A entrega de trabalhos para os alunos dos Turnos 4 e 5 (OMP) será nos dias 3,4 e 5 Jan 2005.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
-- OlgaPacheco - 16 Dec 2004
A entrega de trabalhos para os alunos repetentes que pretendem subir a nota prática, será no dia 3 Jan 2005.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
-- MariaJoaoFrade - 13 Dec 2004
Está já disponível o enunciado dos trabalhos práticos para os alunos inscritos para melhoria de nota.
-- ManuelBernardoBarbosa - 4 Nov 2004
As inscrições nos turnos práticos para os alunos repetentes, serão 3a feira (dia 28 Set) às 11:00 na recepção do DI (piso 0).
A inscrição é individual e por ordem de chegada.
-- MariaJoaoFrade - 23 Sep 2004
AVISO PROVAS ORAIS
As provas orais irão realizar-se na 6ªfeira dia 4 de Março, às 10:00. Ponto de encontro: junto à secretaria do DI (piso 2).
AVISO TURNOS 6 e 7 (MBB)
Alteração nas datas de entrega para os turnos 6 e 7. Ficheiro actualizado: Datas das entregas para os alunos dos Turnos 2,3,6 e 7 (MBB)
-- ManuelBernardoBarbosa - 3 Jan 2004
Informações sobre entrega dos trabalhos
A entrega de trabalhos para os alunos dos Turnos 4 e 5 (OMP) será nos dias 3,4 e 5 Jan 2005.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
-- OlgaPacheco - 16 Dec 2004
A entrega de trabalhos para os alunos repetentes que pretendem subir a nota prática, será no dia 3 Jan 2005.
Está na recepção do DI a folha com os horários disponíveis, para os alunos se inscreverem.
-- MariaJoaoFrade - 13 Dec 2004
Está já disponível o enunciado dos trabalhos práticos para os alunos inscritos para melhoria de nota.
-- ManuelBernardoBarbosa - 4 Nov 2004
As inscrições nos turnos práticos para os alunos repetentes, serão 3a feira (dia 28 Set) às 11:00 na recepção do DI (piso 0).
A inscrição é individual e por ordem de chegada.
-- MariaJoaoFrade - 23 Sep 2004
Na actual estrutura da Licenciatura em Engenharia de Sistemas e
Informática, esta é a primeira disciplina de Informática. Por esta
razão, o primeiro grande objectivo desta disciplina é a introdução à
programação de computadores.
Dos vários paradigmas de programação (imperativo, funcional, lógico e
orientado a objectos) apresentados ao longo da licenciatura, nesta
disciplina estuda-se o paradigma funcional, tendo por base a linguagem
de programação Haskell.
Esta abordagem tem a vantagem de não exigir dos alunos grandes
conhecimentos prévios sobre a arquitectura física dos computadores,
para poderem entender e escrever programas funcionais, permitindo, por
esse motivo, trabalhar mais facilmente com turmas heterogéneas em
conhecimentos de informática.
A linguagem Haskell é uma linguagem puramente funcional fortemente
tipada e com um sistema de tipos extremamente rico, o que permite não
só ensinar os conceitos fundamentais da programação (funcional), onde
se incluem tópicos tais como:
tipos de dados, estruturas de controlo, e recursividade;
como também ensinar conceitos avançados, como por exemplo:
funções de ordem superior, polimorfismo, classes, modularidade, e monades.
Programa detalhado
Bibliografia
Fundamentos da Computação, Livro II: Programação Funcional. José Manuel Valença e José Bernardo Barros. Universidade Aberta, 1999.
Introduction to Functional Programming using Haskell. Richard Bird. Prentice-Hall, 1998.
Haskell: the craft of functional programming. Simon Thompson. Addison-Wesley.
Introduction to Functional Programming. Richard Bird and Philip Wadler. Prentice-Hall, 1988.
A avaliação tem uma componente teórica e uma componente prática, ambas
obrigatórias. A nota final será calculada com base na seguinte
fórmula:
Nota Final = NT * 0.6 + NP * 0.4
sendo
NT a nota teórica (nota mínima de 9 valores), obtida através da realização de uma prova individual escrita;
NP a nota prática (nota mínima de 10 valores), resultante da avaliação obtida ao longo das aulas laboratoriais e que terá por base a realização de trabalhos práticos.
Regime de Avaliação Prática
Alunos inscritos para melhoria de nota
A avaliação prática será efectuada através de um trabalho prático a entregar no final do semestre em data a agendar.
O enunciado correspondente está disponível aqui (Enunciado para alunos inscritos para melhoria).
Novos alunos e alunos repetentes sem nota prática.
A inscrição nos turnos laboratoriais é obrigatória (e será feito controlo de
presenças nas aulas). A nota prática resulta da avaliação obtida ao
longo das aulas laboratoriais (avaliação contínua) e terá por base a
realização de 3 fichas de trabalho e 2 trabalhos práticos.
Estudantes trabalhadores.
A inscrição destes alunos nos turnos
laboratoriais é opcional. Caso o aluno opte por não se inscrever
nas aulas laboratoriais, a nota prática será obtida através da
realização de um trabalho prático global (e as aulas laboratorias
poderão ser frequentadas em regime livre).
Alunos repetentes com nota prática positiva.
Os alunos que obtiveram classificação prática positiva no ano anterior
poderão congelar essas notas para o ano corrente.
Para os alunos nestas condições que optem por
não congelar a nota prática, a (nova) nota prática será
obtida através da realização de um trabalho prático global. As aulas
laboratorias poderão ser frequentadas em regime livre.
O ficheiro seguinte contém a lista de alunos em condições de
congelar a nota prática obtida em 2003-2004 (LESI).
A decisão de congelar a nota deverá ser comunicada por e-mail a ManuelBernardoBarbosa.
Metodologia de Inscrições e Formação de Grupos de Trabalho
Cada turno prático terá no máximo 36 alunos inscritos (em regime de avaliação contínua), havendo ainda 3 máquinas (9 lugares) que poderão ser usados (em regime livre) pelos alunos sem inscrição obrigatória nos turnos.
As inscrições dos alunos nos turnos são individuais.
Dentro de cada turno serão formados grupos de 3 alunos.
O trabalho na aula é feito em grupo (fora da aula é como quizerem).
Os exames de recurso podem ser consultados no próximo dia 10 de Março (6ªfeira) das 15h00 às 16h00 no anfiteatro DI A1 (piso 0, junto à recepção).
-- MariaJoaoFrade - 08 Mar 2006
Os exames estarão disponíveis para consulta, 4ªfeira (8 Fev.) entre as 14h30 e as 15h30, no anfitiatro DI A1.
-- MariaJoaoFrade - 07 Feb 2006
Já sairam as notas dos exames da Época Normal.
-- MariaJoaoFrade - 06 Feb 2006
AVISO DE PROVAS ORAIS (para melhoria de nota)
Os exames orais para melhoria de nota serão realizados no dia 8 de Fevereiro (4ª feira), às 9h30. Os alunos deverão esperar na recepção do DI (piso 0).
-- MariaJoaoFrade - 03 Feb 2006
Está aqui (zip) a resolução da ficha 9 (aula prática).
-- MariaJoaoFrade - 05 Dec 2005
Já está disponível o enunciado do 2º trabalho prático.
As apresentações dos trabalhos serão feitas, na semana de 12 Dezembro a 16 de Dezembro, no horário dos turnos práticos.
-- MariaJoaoFrade - 17 Nov 2005
Já está disponível o enunciado do projecto prático para melhoria de nota.
Ver secção Melhorias de Nota.
-- MariaJoaoFrade - 25 Oct 2005
Já está disponível o enunciado do 1º trabalho prático.
As apresentações dos trabalhos serão feitas, na semana de 31 Outubro a 4 de Novembro, no horário dos turnos práticos. Exceptuam-se os turnos de 3ª feira (feriado), que terão que apresentar o trabalho na quarta-feira em horário a marcar. Para os grupos destes turnos, existirá uma folha de marcação de horário na recepção do DI.
-- MariaJoaoFrade - 18 Oct 2005
4ªfeira (dia 28) às 10h00 aula de apresentação no CP1 A3.
-- MariaJoaoFrade - 23 Sep 2005
As aulas práticas começam no dia 3 de Outubro.
-- MariaJoaoFrade - 20 Sep 2005
Na actual estrutura da Licenciatura em Matemática e Ciências de Computação, esta é a primeira disciplina de Informática. Por esta razão, o primeiro grande objectivo desta disciplina é a introdução à programação de computadores.
Dos vários paradigmas de programação (imperativo, funcional, lógico e orientado a objectos) apresentados ao longo da licenciatura, nesta disciplina estuda-se o paradigma funcional, tendo por base a linguagem de programação Haskell.
Esta abordagem tem a vantagem de não exigir dos alunos grandes conhecimentos prévios sobre a arquitectura física dos computadores, para poderem entender e escrever programas funcionais, permitindo, por esse motivo, trabalhar mais facilmente com turmas heterogéneas em conhecimentos de informática.
A linguagem Haskell é uma linguagem puramente funcional fortemente tipada e com um sistema de tipos extremamente rico, o que permite não só ensinar os conceitos fundamentais da programação (funcional), onde se incluem tópicos tais como: tipos de dados, estruturas de controlo, e recursividade; como também ensinar conceitos avançados, como por exemplo: funções de ordem superior, polimorfismo, classes, modularidade, e monades.
Programa detalhado
A avaliação desta disciplina tem duas componentes obrigatórias.
A componente teórica tem um peso de 60% e consiste na realização de uma prova individual escrita (exame)
A componente prática, com um peso de 40%, consiste na realização de dois trabalhos e na avaliação do desempenho nas aulas laboratoriais.
A nota mínima em cada uma das componentes é de 9,5 valores.
Os trabalhos práticos são resolvidos em grupos de 3 alunos (todos do mesmo turno prático).
Os alunos com aprovação na componente prática no ano anterior, podem pedir para essa nota ser congelada.
O ficheiro seguinte contém a lista de alunos em condições de
congelar a nota prática obtida em 2004-2005 (LMCC).
A decisão de congelar a nota deverá ser comunicada por e-mail a Maria João Frade, até ao dia 31 de Outubro de 2005.
Melhorias de Nota
Os alunos que pretendam melhorar a nota a esta disciplina terão de se inscrever nos SAUM para o efeito e realizar um trabalho cujo enunciado está disponível AQUI (ou aqui: enunciado e ficheiros de exemplo). Este trabalho é individual.
A avaliação destes alunos será feita através de um exame oral, onde será apresentado o trabalho e onde serão colocadas questões sobre a generalidade da matéria.
Estes exames orais decorrerão na data prevista para os restantes exames orais da disciplina, i.e., depois das duas chamadas da época normal (data a anunciar nesta página). Até 3 dias antes da oral deverá ser entrege um relatório do trabalho com a listagem do código do programa em anexo, e deverá também ser enviado por mail o .zip do trabalho. AVISO: Estes exames orais serão realizados no dia 8 de FEvereiro (4ª feira), às 9h30. Os alunos deverão esperar na recepção do DI (piso 0).
As apresentações dos trabalhos serão feitas, na semana de 31 Outubro a 4 de Novembro, no horário dos turnos práticos. Exceptuam-se os turnos de 3ª feira (feriado), que terão que apresentar o trabalho na 4ª feira em horário a marcar. Para os grupos destes turnos, existirá uma folha de marcação de horário na recepção do DI.
Na actual estrutura da Licenciatura em Matemática e Ciências de Computação, esta é a primeira disciplina de Informática. Por esta razão, o primeiro grande objectivo desta disciplina é a introdução à programação de computadores.
Dos vários paradigmas de programação (imperativo, funcional, lógico e orientado a objectos) apresentados ao longo da licenciatura, nesta disciplina estuda-se o paradigma funcional, tendo por base a linguagem de programação Haskell.
Esta abordagem tem a vantagem de não exigir dos alunos grandes conhecimentos prévios sobre a arquitectura física dos computadores, para poderem entender e escrever programas funcionais, permitindo, por esse motivo, trabalhar mais facilmente com turmas heterogéneas em conhecimentos de informática.
A linguagem Haskell é uma linguagem puramente funcional fortemente tipada e com um sistema de tipos extremamente rico, o que permite não só ensinar os conceitos fundamentais da programação (funcional), onde se incluem tópicos tais como: tipos de dados, estruturas de controlo, e recursividade; como também ensinar conceitos avançados, como por exemplo: funções de ordem superior, polimorfismo, classes, modularidade, e monades.
Bibliografia
Fundamentos da Computação, Livro II: Programação Funcional. José
Manuel Valença e José Bernardo Barros. Universidade Aberta, 1999.
Introduction to Functional Programming using Haskell. Richard
Bird. Prentice-Hall, 1998.
Haskell: the craft of functional programming. Simon Thompson.
Addison-Wesley.
Introduction to Functional Programming. Richard Bird and Philip
Wadler. Prentice-Hall, 1988.
A Gentle Introduction to Haskell. Paul Hudak, John Peterson and
Joseph Fasel.
Critérios de Avaliação
A avaliação tem uma componente teórica e uma componente prática, ambas
obrigatórias. A nota final será calculada com base na seguinte
fórmula:
Nota Final = NT * 0.6 + NP * 0.4
sendo
NT a nota teórica (nota mínima de 9 valores), obtida através da realização de uma prova individual escrita;
NP a nota prática (nota mínima de 10 valores), resultante da avaliação obtida ao longo das aulas laboratoriais e que terá por base a realização de trabalhos práticos.
Regime de Avaliação Prática
Alunos inscritos para melhoria de nota
A avaliação prática será efectuada através de um trabalho prático a entregar no final do semestre em data a agendar.
O enunciado correspondente está disponível aqui (Enunciado para alunos inscritos para melhoria).
Novos alunos e alunos repetentes sem nota prática.
A inscrição nos turnos laboratoriais é obrigatória (e será feito controlo de
presenças nas aulas). A nota prática resulta da avaliação obtida ao
longo das aulas laboratoriais (avaliação contínua) e terá por base a
realização de 3 fichas de trabalho e 2 trabalhos práticos.
Estudantes trabalhadores.
A inscrição destes alunos nos turnos
laboratoriais é opcional. Caso o aluno opte por não se inscrever
nas aulas laboratoriais, a nota prática será obtida através da
realização de um trabalho prático global (e as aulas laboratorias
poderão ser frequentadas em regime livre).
Alunos repetentes com nota prática positiva.
Os alunos que obtiveram classificação prática positiva no ano anterior
poderão congelar essas notas para o ano corrente (deverão
avisar os docentes). Para os alunos nestas condições que optem por
não congelar a nota prática, a (nova) nota prática será
obtida através da realização de um trabalho prático global. As aulas
laboratorias poderão ser frequentadas em regime livre.
O ficheiro seguinte contém a lista de alunos em condições de
congelar a nota prática obtida em 2003-2004 (LMCC).
A decisão de congelar a nota deverá ser comunicada por e-mail a ManuelBernardoBarbosa.
Metodologia de Inscrições e Formação de Grupos de Trabalho
Cada turno prático terá no máximo 36 alunos inscritos (em regime de avaliação contínua), havendo ainda 3 máquinas (9 lugares) que poderão ser usados (em regime livre) pelos alunos sem inscrição obrigatória nos turnos.
As inscrições dos alunos nos turnos são individuais.
Dentro de cada turno serão formados grupos de 3 alunos.
O trabalho na aula é feito em grupo (fora da aula é como quizerem).
Student: Cupertino Miranda
In this project you will develop a tool for spreadsheet
assessment. Spreadsheet tools can be viewed as programming
environments for non-programmers. Their language of cell references
and formulas offers only low-level expressiveness compared to regular
programming languages. Still, huge numbers of large and often complex
spreadsheets are created and maintained every day in all companies
around the world. You will apply program understanding techniques to
uncover the secrets of spreadsheets, and their potential flaws.
The UMinho Haskell Libraries already provide support for:
a. reading and parsing spreadsheets
b. analyzing the data flow in a spreadsheet
c. program understanding algorithms, such as slicing,formal concept analysis, and type reconstruction.
You will combine and extend this functionality into a tool that
provides insight into spreadsheets beyond Excel's capabilities.
Presentations
Presentation from Cupertino Miranda about following papers:
Header and Unit Inference for Spreadsheets Through Spatial Analyses, Robin Abraham and Martin Erwig. 2004
A User-Centred Approach to Functions in Excel, Simon Peyton-Jones, Alan Blackwell and Margaret Burnett, 2003
Slicing Spreadsheets: An Integrated Methodology for Spreadsheet Testing and Debugging, James Reichwein, Gregg Rothermel, Margaret Burnett, 1999
Spreadsheet Under Scrutiny - Project Report
Under construction
Introduction
Spreadsheet tools can be viewed as programming environments for non-programmers. Their language of cell references and formulas offers only low-level expressiveness compared to regular programming languages.
Still, huge numbers of large and often complex spreadsheets are created and maintained every day in all companies around the world.
In this project i have developed a few tools and respective API for Spreadsheet Analysis.
Project Objectives
Completely read and create a data structure to Spreadsheet understanding.
Add more capabilities to Data-flow graph
Add slicing and chopping analysis
Implement a type inference system using the already implemented algorithm.
Data Structure
Basic Notions
At the beginning of the project there already exist a Schema for the Gnumeric XML file, and a little of this was already been converted to DTD.
With this DTD file was already being generated (by DTDtoHaskell) a Haskell Structure for representation of the Gnumeric content.
In this structure the cell content was represented as a String, and for that reason it was converted to a type Formula.
data Formula
= Var String -- ^ Variables
| Fun String [Formula] -- ^ Function applications
| Ref TWiki.CellRef (Maybe TWiki.CellRef) -- ^ Cell or cell block reference
This modification to the data structure is made in the Makefile that generates the file with all the structure and that instances for XmlContent? (Syntax.hs).
Equally in the make file is possible to generate the file SyntaxTermInstances.hs that contains instances for Term and Typeable.
For reading gnumeric files there is the function
readGnumeric :: (Term a, TWiki.XmlContent a) => TWiki.FilePath -> IO a
that given the file name it returns the Gmr'Workbook (root element) with cells content as Formulas
This conversion is made by a type unifying strategic function that applies to every cell content the function 'parseFormula'.
In this part of the project i have totally (expected) convert the Schema to DTD and now every possible element of the Gnumeric file is represented in the data structure.
All this processed can be reverted so we can pretty print all the structure. For that already HaXML? already has the function showXML and Formula is instance of Show.
Dataflow Graph
The data-flow graph was one of the things that were previously made.
This graph is generated by a traversal function that for every Reference it creates a relation between the cell that contains the formula and the element referenced.
This was the first approach to data-flow graph, but it has a few problems because it doesn't support References to elements in diferent Sheets. I have resolved the problem by adding Sheet notion to
data TWiki.CellRef
= TWiki.CellRef {
sheet :: String, -- ^ Sheet name
colNr :: Int, -- ^ Column index
rowNr :: Int -- ^ Row index
}
and creating a new traversal function that for every Gmr'Sheet runs the previous explained data-flow function.
For the next slicing and chopping was important to have a expanded data-flow graph. For that reason i generalised the previous explained functions to accept as parameter the following functions
collectBlockRefs :: Term a => a -> [CellBlock]
collectCellRefs :: Term a => a -> [CellRef]
that will be applied in all the formulas generating a Gph CellBlock? or a Gph CellRef? respectively.
Results
(under Construction)
Slicing and Chopping
For the slicing and chopping i already had generic functions and the only thing i have implemented was the filtering functions. This functions
filterExpandedDataflow :: Set TWiki.CellRef -> Gmr'Workbook -> Gmr'Workbook
filterCells :: Set TWiki.CellBlock -> Gmr'Workbook -> Gmr'Workbook
were created to filter Spreadsheets by some list of cells. This two functions were created so it would be possible to filter by CellRef? and CellBlock? for expanded and normal graphs respectively.
Slicing
Forward - group of cells that contribute to a specified group of cells.
Backward - group of cells that have value contribution from a specified group of cells.
Chopping - Is the interception between a Forward and Backward Slice.
For building the slicing/chopping already exist the sliceOrChopWith function that given a list of elements for sources and sinks and the dataflow graph it returns the list of elements that represent the slice/chop.
This function was already defined in the Haskell Uminho Library.
This report presents the developed work on the project "Strategic Querying of XML Documents".
The results of this project are based on two generic traversal functions, based on Strafunski. One of this functions traverses the child nodes, while the other is a deep traversal function.
One Level Traversal
Deep Traversal
XPath: /X/A
XPath: /X//A
Yellow circles represent collected 'A' items.
Mapping from XPATH, we have "/" as child traversing, and "//" as a deep traversal function. What as done was to create haskell functions (using Strafunski) to represent "/" and "//".
Traversal Functions
As explained before, the solution of te problem was mostly obtained defining twa major functions, as show next:
One Level Traversal Function
taagg cond a= maybe [] id (applyTU strategy a)
where
strategy = allTU (++) [] (adhocTU (constTU []) flp)
flp x = if (cond x) then (return [x]) else (mzero)
Deep Traversal Function
deep:: (Term a, Term [a]) => (Element -> Bool) -> [a] -> [Element]
deep cond = runIdentity.applyTU strategy
where
strategy= collect (adhocTU (constTU []) flp)
flp x=if (cond x) then (return [x]) else (return [])
Query Types
As you can see on the traversal functions defitinion, we only have to define the filtering function for each datatype that a Query can have. The filtering function behaves according to the Query data type received.
Query datatypes are defined as follows:
Student: VitorRodrigues?
In this project you will develop a set of combinators for querying XML
documents expressed in the strafunski library. In particular we would
like to embed the HaQuery language - devoled in the DI/UM - as a set
of strafunski library. As a result, we will be able to define queries
directly in Haskell/Strafunski whithout having to define/update a
language processor for HaQuery as done before.
The Strafunski library already provides support for:
a. Parse/Unparse XML documents via the HaXml library
b. A set of basic combinators to express traversal functions over any data type
c. A prototype implementation of HaQuery and a library of Query combinators (defined by a group of AFP students last year).
You will express the existant HaQuery combinators directly in Strafunski.
The first step will be to express the HaXml cmbinators in Strafusnki, using the HaQuery combinators to generate the query tree.
The second step is to express the HaQuery combinators, directly with Strafunski, avoind the unnecessary creation of the query tree structure.
Recomended Literature
XQuery: a typed functional language for querying XML, Philip Wadler, 2002
A Strafunski Application Letter, Joost Visser and Ralf Laemmel, 2003 This paper presents the Strafunski libraries, and explains how it works, presenting some examples of Strafunski utilization, namely, in Haskell to Cobol reverse engineering, Java code metrics and Haskell re-engineering.
The XQuery Formal Semantics: A Foundation for Implementation and Optimisation, Byron Choi, Mary Fernandez and Jrme Simon, 2002
Sessão Laboratorial 2 Nesta sessão pretende se tomar conhecimento com conceitos básicos da linguagem Haskell , nomeadamente: expressões e sua avaliação, ...
Sessão Laboratorial 1 Nesta primeira sessão pretende se familiarizar os alunos com o ambiente de programação que será utilizado nesta unidade curricular. Admite se ...
Notícias Laboratórios Informática I em Engenharia Informática 1º Ano 1º Semestre Ano lectivo 2006/2007 Apresentação Na actual estrutura da Licenciatura ...
T (2005.02.21) : Apresentação da Disciplina. Noção de refinamento. TP (2005.02.22, 2005.02.24) : Apresentação e marcação de turnos. Generalização das construções ...
Em principio quando é que sairão as notas da primeira chamada? Seria possivel disponibilizarem na página o exame da primeira chamada? Seria bastante util para quem ...
Métodos de Programação I 2005 2006 (anexo) ATENÇÃO: A página oficial da disciplina está alojada em http://www.di.uminho.pt/~jno/html/mpi.html . Esta página destina ...
XML to SQL Conversion Tool Student : RicardoVilaca Project Introduction In this project I have to develop a tool to XML SQL Conversion based on Haskell/Strafunski ...
The following is a list of Undergraduate Project Proposals in the context of the Research.PURe project Grammar Engineering Location: Vrije Universiteit or CWI ...
Haskell Biding to GraphViz Student : João Paulo Barbosa Overview This project consists of creating a Haskell binding to AT T's library. This involves using a Foreign ...
TWiki.Education/Archive Web Preferences The following settings are web preferences of the TWiki.Education/Archive web. These preferences overwrite the site level ...
Strategic Querying of XML Documents Student : VitorRodrigues In this project you will develop a set of combinators for querying XML documents expressed in the strafunski ...
News Welcome to our Education.Archive Wiki! This Wiki is maintained by the LMF research group. If you need help using the Wiki goto the TWiki Web. If you want to ...
Terão lugar (no anfiteatro A1 do DI) as seguintes sessões de esclarecimento de dúvidas: 2a.fa. 14 Fev 10:00, com possibilidade de consulta dos exames (1a. chamada ...
Sessão Laboratorial 3 Assuntos abordados nesta sessão: Obs.: Este guião tem seguimento no da próxima sessão. Definição de funções recursivas A recursividade é um ...
Sessão Laboratorial 4 Este Guião é a continuação do da sessão anterior. Assuntos abordados nesta sessão: Funções de ordem superior simples Nas funções realizadas ...
Os exames de recurso podem ser consultados no próximo dia 10 de Março (6ªfeira) das 15h00 às 16h00 no anfiteatro DI A1 (piso 0, junto à recepção). MariaJoaoFrade ...
Devemos nos restringir unicamente aos operadores Pointfree indicados no enunciado (não há o Either, por exemplo)? Claro que não! Faltam todos os operadores das somas ...
18 Out Já saíram as notas do exame da época especial. 27 Jul Já saíram as notas das orais. 22 Jul Já saíram as notas do exame de recurso. As orais serão no dia ...
Notícias Elementos Lógicos da Programação 3 Licenciatura em Matemática e Ciências da Computação 3º Ano 2º Semestre Ano lectivo 2004 2005 Responsável ...
Notícias Métodos de Programação II 2004 2005 Sugestão de Leitura Robert Floyd, um grande Cientista da Computação, recordado aqui nas palavras de outro grande cientista ...
Ensaios de Jeana Costa, Pedro Bastos e Ana Nunes A criminalidade Informática nos tribunais Gestão do Conhecimento Pay Pal Voto Electrónico Segurança da Informa ...
Ensaios de Elisa Faria, Susana Dourado e Vanessa Silva Sindicância de Dados Pessoais Formas de sindicância do cidadão comum sob os seus dados pessoais constantes ...
Ensaios de Claudio Carvalho, Elsa Barbosa e Silvia Silva A ASSINATURA DIGITAL Cartões Inteligentes Voto Electrónico Protecção dos Dados Pessoais Correio Electr ...
Ensaios de Silvia Vilas Boas Dias, Ana Rita Freitas e Angélica Sofia Campos Preservação da Proriedade Industrial Privacidade dos Dados Clínicos Voto Electrónico ...
Ensaios de Bruno Silva Voto Electrónico A Democracia nos dedos dos Cidadãos. Este trabalho é muito extenso (não respeitou os limites indicados) e repete muito ...
Ensaios de Andreia Leite, Angela Santos e Vera Silva Base de Dados de Recolha Genética (2ª versão) Trabalho bem apresentado focando os argumentos essenciais deste ...
Ensaios de Ana Pereira e Daniela Seixas Ética Hacker trabalho interessante mas acaba por dar pouca informação mesmo sobre eventuais pricípios éticos JoseManuelValenca ...
Ensaios de Albina Pinheiro A INTERNET NA REALIZAÇÃO DE ESCRITURAS E OUTROS ACTOS NOTARIAIS ATÉ QUE PONTO SERÁ FIÁVEL E RECOMENDÁVEL O RECURSO A ESTA FERRAMENTA ...
Ensaios de Henrique Cunha, Cristina Ferreira e Mafalda Magalhães Esteganografia no Processo Civi MafaldaMagalhaes 08 Jun 2005 MafaldaMagalhaes 08 Jun 2005 ...
Ensaios de Eva Sousa, Pedro Miguel Sousa e Manuela Silva Cartão Único AngelicaCampos 06 Jun 2005 Assinatura Digital Voto Electrónico O avanço tecnológico no ...
Ensaios de Susana Dias Tecnologias da Informação e Comunicação na Saúde A Progressiva Informatização no Direito (RE) PENSAR A SOCIEDADE DE INFORMAÇÃO E COMUNICA ...
Ensaios de Bebiana Rafaela Ribeiro, Carla Aguiar e Filipa Martins A informática na saúde Assinatura Digital Cartão Único do Cidadão Criptografia O perfil gen ...
Ensaios de Carla Moreira, Silvia Fonseca e Vera Casto Identificação de dados pessoais sob o ponto vista financeiro Cartão Único Voto Electrónico Violação de Direitos ...
Ensaios de Adelaide Cerqueira e Sandra Pereira Criptografia e Assinatura Digital AdelaideCerqueira 23 May 2005 Segurança Informática Dados Pessoais Escritura ...
Ensaios de Casimiro Rosa e Abilio Ribeiro A INternet e os Direitos de Autor Assinatura Digital Internet: Meio de Ultrapassar Barreiras Phishing: Alerta Máximo ...
Ensaios de Vitor Novo, Manuel Almeida e João Varela Privacidade dos Dados Clínicos Agentes e Eventos A Questão Humana na Segurança da Informacão (parte 1) Faz ...
Ensaios de Jorge Serralheiro, Pedro Lima e Luis Cantanhede Bilhete de Identidade Electrónico BIOMETRIA: “SERÃO MESMO OS OLHOS O ESPELHO DA ALMA” OS DIREITOS DE ...
Ensaios de Catia Matos, Cecilia Cerqueira e Lucia Fernandes Criptografia de Chave Pública: Confidencialidade e Autenticação A Internet: Um Espaço de Comunicação ...
Ensaios de Karina Silva e Eva Mendes Privacidade dos dados clínicos O voto electrónico A assinatura digital O correio electrónico A sociedade da informação ...
Elementos Lógicos da Programação III Projecto Prático Pretende se que modele e analise os dois problemas seguintes usando redes de petri e a ferramenta de model ...
Feb. 17, 2004
May 14, 2004 is the deadline for submission to CoLogNet / Formal Methods Europe Symposium on Teaching Formal Methods 2004Feb 6, 2004
Students interested in the Overture Project please contact to JNO. (NB: the Overture Modelling Language has great resemblance with
VDM++)
Jan 31, 2004
Novas propostas para estágios curriculares em EstagiosProfisionaisJanuary 29, 2004
Invitation to Wiki.
January 21, 2004
We have a new Wiki server for educational purposes!
Welcome to our Education.Archive Wiki!
This Wiki is maintained by the LMF research group.
If you need help using the Wiki goto the TWiki Web. If you want to contribute please register here (this is the case, for instance, for students who have been invited to maintain the pages of a course).
To navigate this Wiki use the links in the side bar.
Programação Funcional Avançada 2004 / 2005 AKA: Advanced Functional Programming General information Advanced Functional Programming is an optional course made available ...
Notas da época de recurso disponibilizadas nesta página JorgeSousaPinto 04 Mar 2006 Notas da época normal disponibilizadas nesta página JorgeSousaPinto ...
The Attack On The Clones project is about the creation of a software clone detection portal. Phase 1 (Opção 3, sep 2003 feb 2004) The first edition of the Attack ...
ChopaChops: view and manipulate Java program graphs Powered by Chocapic! Student : Patrick Machado In this project you will develop an interactive tool to view ...
Chopachops Report This page is under construction... Introdution !ChopaChops is a project for slicing and chopping in program graphs. Starting from the Java program ...
Home Page for the AdvancedFunctionalProgramming Project "Clone Detection in Haskell". To be filled with abundant and pertinent information. Work in progress ...
Aula 1 23 de Fevereiro Não houve aula. Motivo: Simpósio doutoral do DI. Aula 2 2 de Março Apresentação da disciplina. Apresentação do trabalho prático ...
Embedding Disambiguation Rules in the HaGLR System Student : Luís Pedro Machado In this project we will embed a domain specific language to express disambiguation ...
T (2006.10.21a) : Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação implementação ...
Feb. 17, 2004 May 14, 2004 is the deadline for submission to CoLogNet / Formal Methods Europe Symposium on Teaching Formal Methods 2004 Feb 6, 2004 Students interested ...
Notícias Elementos Lógicos da Programação 3 Licenciatura em Matemática e Ciências da Computação 3º Ano 2º Semestre Ano lectivo 2004 2005 Responsável ...
Elementos Lógicos da Programação III Licenciatura de Matemática e Ciências da Computação 3º Ano 2º Semestre Ano lectivo 2003/2004 Ùltima alteração: 12 ...
18 Out Já saíram as notas do exame da época especial. 27 Jul Já saíram as notas das orais. 22 Jul Já saíram as notas do exame de recurso. As orais serão no dia ...
Elementos Lógicos da Programação III Projecto Prático Pretende se que modele e analise os dois problemas seguintes usando redes de petri e a ferramenta de model ...
The following is a list of Undergraduate Project Proposals in the context of the Research.PURe project Grammar Engineering Location: Vrije Universiteit or CWI ...
body { background color : lightgray; font family: Verdana, Arial, Helvetica, sans serif; font size: 12px ; } a:link { text decoration : none ; color : darkblue ...
Haskell Biding to GraphViz Student : João Paulo Barbosa Overview This project consists of creating a Haskell binding to AT T's library. This involves using a Foreign ...
fornecida por todos Sobre as ideias básicas de Criptografia (exigindo um pouco de Matemática) um livro importante é o Applied Cryptography de Bruce Schneier. ...
1 de Março início das aulas JoseManuelValenca 8 de Março devido à minha presença num júri não é possível dar a aula deste dia; nesta semana funciona só o turno ...
Informática Jurídica Licenciatura em Direito 4º Ano 2º Semestre Ano lectivo 2005/2006 Programa Segurança Informática Programa detalhado Bibliografia ...
Ensaios de Helena Ribeiro, Arlindo Barros e Liliana Correia Sociedade de Informação – Cartão Único de Saúde Voto Electrónico Digitaliação de Livros Comércio Electr ...
Ensaios de Regina Fernandes, Teresa Bizarro e Monica Lourenço Operações bancárias on line: insegurança ou desconfiança TeresaBizarro 07 Jun 2005 Declarações ...
Ensaios de Ana Ferreira, Alexandra Cruz e Michelle Pinto A Avaliação de cada trabalho é feita numa escala de D (insatisfatório), C ou C (satisfatório), B ou B (bom ...
Ensaios de Claudio Carvalho, Elsa Barbosa e Silvia Silva A ASSINATURA DIGITAL Cartões Inteligentes Voto Electrónico Protecção dos Dados Pessoais Correio Electr ...
Ensaios de Joana Vilas Boas e Ana Daniela Barbosa Que força probatória terá uma mensagem de correio electrónico? O Voto Electrónico eCash Cifra Cartão Único do ...
Ensaios de Rosa Ribeiro, Claudia Cunha e Eva Fanzeres Assinatura Digital Bases de Dados Genéticos Partilha de Dados Pessoais Novas tecnologias: impacto na sociedade ...
Ensaios de Ana Peixoto e Paula Lopes O Uso das Tecnologias de Informação no âmbito do Direito Processual Penal A Utilização das Novas Tecnologias no Local de Trabalho ...
Ensaios de Jorge Serralheiro, Pedro Lima e Luis Cantanhede Bilhete de Identidade Electrónico BIOMETRIA: “SERÃO MESMO OS OLHOS O ESPELHO DA ALMA” OS DIREITOS DE ...
Ensaios de Ana Araújo Silva e Filipe Macedo Vigilância electrónica: Ponderação de princípios Este tema só perifericamente toca os objectivos deste curso; a exposi ...
Ensaios de Silvia Vilas Boas Dias, Ana Rita Freitas e Angélica Sofia Campos Preservação da Proriedade Industrial Privacidade dos Dados Clínicos Voto Electrónico ...
Ensaios de Vitor Novo, Manuel Almeida e João Varela Privacidade dos Dados Clínicos Agentes e Eventos A Questão Humana na Segurança da Informacão (parte 1) Faz ...
Ensaios de Albina Pinheiro A INTERNET NA REALIZAÇÃO DE ESCRITURAS E OUTROS ACTOS NOTARIAIS ATÉ QUE PONTO SERÁ FIÁVEL E RECOMENDÁVEL O RECURSO A ESTA FERRAMENTA ...
Ensaios de Adelaide Cerqueira e Sandra Pereira Criptografia e Assinatura Digital AdelaideCerqueira 23 May 2005 Segurança Informática Dados Pessoais Escritura ...
Ensaios de Eva Sousa, Pedro Miguel Sousa e Manuela Silva Cartão Único AngelicaCampos 06 Jun 2005 Assinatura Digital Voto Electrónico O avanço tecnológico no ...
Ensaios de Ana Pereira e Daniela Seixas Ética Hacker trabalho interessante mas acaba por dar pouca informação mesmo sobre eventuais pricípios éticos JoseManuelValenca ...
Ensaios de Gloria Soares, Joana Carvalho e Raquel Gomes A Sociedade da Informação A segurança informática A criptografia ... ... JoseManuelValenca 31 May ...
Ensaios de Henrique Cunha, Cristina Ferreira e Mafalda Magalhães Esteganografia no Processo Civi MafaldaMagalhaes 08 Jun 2005 MafaldaMagalhaes 08 Jun 2005 ...
Ensaios de Manuel Ferreira, Vania Rodrigues e Helena Silva O problema dos direitos de autor no mundo informático.. Software LIvre CRIMINALIDADE INFORMÁTICA: SPAM ...
Ensaios de Casimiro Rosa e Abilio Ribeiro A INternet e os Direitos de Autor Assinatura Digital Internet: Meio de Ultrapassar Barreiras Phishing: Alerta Máximo ...
Ensaios de Bebiana Rafaela Ribeiro, Carla Aguiar e Filipa Martins A informática na saúde Assinatura Digital Cartão Único do Cidadão Criptografia O perfil gen ...
Ensaios de Jeana Costa, Pedro Bastos e Ana Nunes A criminalidade Informática nos tribunais Gestão do Conhecimento Pay Pal Voto Electrónico Segurança da Informa ...
Ensaios de Elisa Faria, Susana Dourado e Vanessa Silva Sindicância de Dados Pessoais Formas de sindicância do cidadão comum sob os seus dados pessoais constantes ...
Ensaios de Isabel Nunes, Claudia Pereira e Ana Tavares Voto Electrónico Vantagens da implementação de um sistema de voto alternativo ao tradicional sistema de voto ...
Ensaios de Silvia Pinto e Tania Costa Informática Jurídica Voto Electrónico Assinaturas Digitais Teoria dos Sistemas Cartão Único do Cidadão JoseManuelValenca ...
Ensaios de Karina Silva e Eva Mendes Privacidade dos dados clínicos O voto electrónico A assinatura digital O correio electrónico A sociedade da informação ...
Ensaios de Alvaro Amorim, Carla Costa e Simone Marreiros Bases de Dados com Informação Genética Bom trabalho; claramente exposto e defendido; não tenho a certeza ...
Ensaios de Andreia Leite, Angela Santos e Vera Silva Base de Dados de Recolha Genética (2ª versão) Trabalho bem apresentado focando os argumentos essenciais deste ...
Ensaios de Carla Moreira, Silvia Fonseca e Vera Casto Identificação de dados pessoais sob o ponto vista financeiro Cartão Único Voto Electrónico Violação de Direitos ...
Ensaios de Bruno Silva Voto Electrónico A Democracia nos dedos dos Cidadãos. Este trabalho é muito extenso (não respeitou os limites indicados) e repete muito ...
Ensaios de Helder Oliveira e Luis OLiveira Pirataria Informática (doc) Cartão Comum do Cidadão Contratos na Internet O Preço da Segurança Violação da Correspond ...
Ensaios de Catia Matos, Cecilia Cerqueira e Lucia Fernandes Criptografia de Chave Pública: Confidencialidade e Autenticação A Internet: Um Espaço de Comunicação ...
Ensaios de Susana Dias Tecnologias da Informação e Comunicação na Saúde A Progressiva Informatização no Direito (RE) PENSAR A SOCIEDADE DE INFORMAÇÃO E COMUNICA ...
Sessão Laboratorial 1 Nesta primeira sessão pretende se familiarizar os alunos com o ambiente de programação que será utilizado nesta unidade curricular. Admite se ...
Sessão Laboratorial 2 Nesta sessão pretende se tomar conhecimento com conceitos básicos da linguagem Haskell , nomeadamente: expressões e sua avaliação, ...
Sessão Laboratorial 3 Assuntos abordados nesta sessão: Obs.: Este guião tem seguimento no da próxima sessão. Definição de funções recursivas A recursividade é um ...
Sessão Laboratorial 4 Este Guião é a continuação do da sessão anterior. Assuntos abordados nesta sessão: Funções de ordem superior simples Nas funções realizadas ...
23/02/2007 : Já disponíveis as notas da época de recurso. 19/02/2007 : O exame de recurso será realizado na 4ª feira, às 14:30 no DI0.11. O exame incluirá as componentes ...
Notícias Laboratórios Informática I em Engenharia Informática 1º Ano 1º Semestre Ano lectivo 2006/2007 Apresentação Na actual estrutura da Licenciatura ...
T (2004.09.23) : Apresentação da Disciplina. Introdução aos métodos formais de especificação e desenvolvimento de software. O binómio especificação implementação. ...
T (2005.02.21) : Apresentação da Disciplina. Noção de refinamento. TP (2005.02.22, 2005.02.24) : Apresentação e marcação de turnos. Generalização das construções ...
Sessão de esclarecimento de dúvidas na próxima 2ª feira (dia 18) às 14:30 na sala DI 0.02 . MariaJoaoFrade 12 Jul 2005 Os testes poderão ser consultados na ...
T (2006.02.21) : Apresentação da Disciplina. Introdução aos sistemas reactivos. Álgebras e Coalgebras. Tipos indutivos e coindutivos. Interação e comportamento. Comportamento ...
Terão lugar (no anfiteatro A1 do DI) as seguintes sessões de esclarecimento de dúvidas: 2a.fa. 14 Fev 10:00, com possibilidade de consulta dos exames (1a. chamada ...
Métodos de Programação I 2005 2006 (anexo) ATENÇÃO: A página oficial da disciplina está alojada em http://www.di.uminho.pt/~jno/html/mpi.html . Esta página destina ...
Devemos nos restringir unicamente aos operadores Pointfree indicados no enunciado (não há o Either, por exemplo)? Claro que não! Faltam todos os operadores das somas ...
Em principio quando é que sairão as notas da primeira chamada? Seria possivel disponibilizarem na página o exame da primeira chamada? Seria bastante util para quem ...
Notícias Métodos de Programação II 2004 2005 Sugestão de Leitura Robert Floyd, um grande Cientista da Computação, recordado aqui nas palavras de outro grande cientista ...
FAQ de Métodos de Programação II Índice: Nas pautas que saíram relativamente ao ano 2004/05, alguns alunos têm como nota ' '. Em termos práticos, a que se resume ...
Os exames de recurso podem ser consultados no próximo dia 10 de Março (6ªfeira) das 15h00 às 16h00 no anfiteatro DI A1 (piso 0, junto à recepção). MariaJoaoFrade ...
AVISO PROVAS ORAIS As provas orais irão realizar se na 6ªfeira dia 4 de Março, às 10:00 . Ponto de encontro: junto à secretaria do DI (piso 2). AVISO TURNOS ...
Notícias Programação Funcional em Matemática e Ciências de Computação 1º Ano 1º Semestre (7001N7) Ano lectivo 2005/2006 (anterior) Programa Na actual ...
Resultados do Trabalho Prático nº 1 Grupo Trabalho nº1 G1 de Informação do Centro de Saúde de Amares G2 de Informação da Câmara Municipal de Braga G3 ...
SpreadSheet under Scrutiny Student : Cupertino Miranda In this project you will develop a tool for spreadsheet assessment. Spreadsheet tools can be viewed as programming ...
Spreadsheet Under Scrutiny Project Report Under construction Introduction Spreadsheet tools can be viewed as programming environments for non programmers. Their ...
Project Report This report presents the developed work on the project "Strategic Querying of XML Documents". The results of this project are based on two generic traversal ...
Strategic Querying of XML Documents Student : VitorRodrigues In this project you will develop a set of combinators for querying XML documents expressed in the strafunski ...
News Welcome to our Education.Archive Wiki! This Wiki is maintained by the LMF research group. If you need help using the Wiki goto the TWiki Web. If you want to ...
This is a subscription service to be automatically notified by e mail when topics change in this Education/Archive web. This is a convenient service, so you do not ...
TWiki.Education/Archive Web Preferences The following settings are web preferences of the TWiki.Education/Archive web. These preferences overwrite the site level ...
TWiki's Education/Archive web /view/Education/Archive The web for users, groups and offices. TWiki is a Web Based Collaboration Platform for the Corporate World ...
XML to SQL Conversion Tool Student : RicardoVilaca Project Introduction In this project I have to develop a tool to XML SQL Conversion based on Haskell/Strafunski ...
This is a subscription service to be automatically notified by e-mail when topics change in this Education/Archive web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:
Format: <space><space><space>, followed by: * Main.yourWikiName (if you want that the e-mail address in your home page is used) * Main.yourWikiName - yourEmailAddress (if you want to specify a different e-mail address) * Main.anyTWikiGroup (if you want to notify all members of a particular TWikiGroup)
Related topics:TWikiUsers, TWikiRegistration
The following settings are web preferences of the TWiki.Education/Archive web. These preferences overwrite the site-level preferences in TWikiPreferences, and can be overwritten by user preferences (your personal topic, i.e. TWikiGuest in the TWiki.Main web)
Preferences:
List of topics of the TWiki.Education/Archive web:
Set WEBTITLE = Education.Archive
Set WEBBGCOLOR = %6699CC
Web specific background color: (Pick a lighter one of the StandardColors)
If yes, Set SITEMAPLIST = on, and add the "what" and "use to..." description for the site map. Make sure to list only links that include the name of the web, e.g. Education/Archive.Topic links.
Set SITEMAPLIST = on
Set SITEMAPWHAT = Education.Archive Wiki.
Set SITEMAPUSETO = ...collaborate on
Exclude web from a web="all" search: (Set to on for hidden webs)
Set NOSEARCHALL =
Default template for new topics and form(s) for this web:
WebTopicEditTemplate? : Default template for new topics in this web. (Site-level is used if topic does not exist)
Web preferences that are not allowed to be overridden by user preferences:
Set FINALPREFERENCES = WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME
Notes:
A preference is defined as: 6 spaces * Set NAME = value Example:
Set WEBBGCOLOR = #FFFFC0
Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
When you write variable %WEBBGCOLOR% , it gets expanded to #6699CC .
The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
You can introduce new preferences variables and use them in your topics and templates. There is no need to change the TWiki engine (Perl scripts).
TWiki's Education/Archive web
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive
The web for users, groups and offices. TWiki is a Web-Based Collaboration Platform for the Corporate World.en-usCopyright 2020 by contributing authorsTWiki Administrator [webmaster@di.uminho.pt]The contributing authors of TWikiTWikiDIUM.Education/Archive
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive
/twiki/pub/Main/LocalLogos/um_eengP.jpgMenuTopics
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/MenuTopics
AeC AFP CA CriptoBio EDFS EC DSI ELP1 ELP2 ELP3 IJ LAD LabMF LI1 LC MFP1 MFP2 MP1 MP2 MP4 Opcao III PF PP1 PP2 Estágios Projectos PhD@DI (last changed by JoseBacelarAlmeida)2008-09-19T13:37:28ZJoseBacelarAlmeidaLI1Aula2
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/LI1Aula2
Sessão Laboratorial 2 Nesta sessão pretende se tomar conhecimento com conceitos básicos da linguagem Haskell , nomeadamente: expressões e sua avaliação, ... (last changed by JoseBarros)2007-10-09T12:28:47ZJoseBarrosLI1Aula1
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/LI1Aula1
Sessão Laboratorial 1 Nesta primeira sessão pretende se familiarizar os alunos com o ambiente de programação que será utilizado nesta unidade curricular. Admite se ... (last changed by OlgaPacheco)2007-10-04T11:06:18ZOlgaPachecoLaboratoriosInformatica1
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/LaboratoriosInformatica1
Notícias Laboratórios Informática I em Engenharia Informática 1º Ano 1º Semestre Ano lectivo 2006/2007 Apresentação Na actual estrutura da Licenciatura ... (last changed by JoseBarros)2007-10-03T09:39:08ZJoseBarrosWebSearchAdvanced
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/WebSearchAdvanced
(last changed by TWikiGuest)2007-05-17T14:51:41ZguestProgramacaoFuncional
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/ProgramacaoFuncional
Notícias Programação Funcional em Matemática e Ciências de Computação 1º Ano 1º Semestre (7001N7) Ano lectivo 2005/2006 (anterior) Programa Na actual ... (last changed by MariaJoaoFrade)2007-02-23T17:59:36ZMariaJoaoFradeWebLeftBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/WebLeftBar
Topics: (last changed by JoseBacelarAlmeida)2007-02-13T02:58:01ZJoseBacelarAlmeidaXMLtoSQLConversionToolAFPProject
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/XMLtoSQLConversionToolAFPProject
XML to SQL Conversion Tool Student : RicardoVilaca Project Introduction In this project I have to develop a tool to XML SQL Conversion based on Haskell/Strafunski ... (last changed by JoseBacelarAlmeida)2007-02-12T19:32:09ZJoseBacelarAlmeidaWebPreferences
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/WebPreferences
TWiki.Education/Archive Web Preferences The following settings are web preferences of the TWiki.Education/Archive web. These preferences overwrite the site level ... (last changed by JoseBacelarAlmeida)2007-02-12T19:20:19ZJoseBacelarAlmeidaWebHome
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/WebHome
News Welcome to our Education.Archive Wiki! This Wiki is maintained by the LMF research group. If you need help using the Wiki goto the TWiki Web. If you want to ... (last changed by JoseBacelarAlmeida)2007-02-12T19:20:18ZJoseBacelarAlmeidaStrategicXMLQueryingAFPProject
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/StrategicXMLQueryingAFPProject
Strategic Querying of XML Documents Student : VitorRodrigues In this project you will develop a set of combinators for querying XML documents expressed in the strafunski ... (last changed by JoseBacelarAlmeida)2007-02-12T19:20:18ZJoseBacelarAlmeidaProgramacaoFuncional0405
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/ProgramacaoFuncional0405
Programação Funcional em Matemática e Ciências de Computação 1º Ano 1º Semestre Ano lectivo 2004/2005 Notas Notas do exame de Recurso Notas ... (last changed by JoseBacelarAlmeida)2007-02-12T19:15:22ZJoseBacelarAlmeidaParadigmasProgramacaoI0405
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/ParadigmasProgramacaoI0405
Notícias Paradigma da Programação I em Engenharia de Sistemas e Informática 1º Ano 1º Semestre (5301P3) Ano lectivo 2004/2005 (anteriores) Notas ... (last changed by JoseBacelarAlmeida)2007-02-12T19:15:21ZJoseBacelarAlmeidaRTp1
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/RTp1
Resultados do Trabalho Prático nº 1 Grupo Trabalho nº1 G1 de Informação do Centro de Saúde de Amares G2 de Informação da Câmara Municipal de Braga G3 ... (last changed by OlgaPacheco)2005-04-07T11:08:21ZOlgaPachecoSpreadsheetUnderScrutinyAFPProjectReport
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/SpreadsheetUnderScrutinyAFPProjectReport
Spreadsheet Under Scrutiny Project Report Under construction Introduction Spreadsheet tools can be viewed as programming environments for non programmers. Their ... (last changed by CupertinoMiranda)2005-03-05T16:45:42ZCupertinoMirandaSpreadsheetUnderScrutinyAFPProject
http://wiki.di.uminho.pt/twiki/bin/view/Education/Archive/SpreadsheetUnderScrutinyAFPProject
SpreadSheet under Scrutiny Student : Cupertino Miranda In this project you will develop a tool for spreadsheet assessment. Spreadsheet tools can be viewed as programming ... (last changed by CupertinoMiranda)2005-03-04T11:43:25ZCupertinoMiranda
In this project I have to develop a tool to XML <-> SQL
Conversion based on Haskell/Strafunski. The conversion scheme is based
on the refinement calculus proposed in
link
Objectives
Define the datatypes of XMLSchema in Haskell
Convert XML Schema datatypes to VDM-SL type definitions, using the datatypes defined in VooDooMFront.
XMLSchema
The purpose of an XML Schema is to define the legal building blocks of an XML document, just like a DTD.
An XML Schema:
defines elements that can appear in a document
defines attributes that can appear in a document
defines which elements are child elements
defines the order of child elements
defines the number of child elements
defines whether an element is empty or can include text
defines data types for elements and attributes
defines default and fixed values for elements and attributes
Purpose of XML Schemas
The XML have many schema languages. This languages specify the structure of instance documents (e.g this element contains these elements, which contains these other elements, etc) and the datatype of each element/attribute (e.g this element shall hold an integer with the range 0 to 12,000).
Motivation for XML Schemas
The main motivation for the XMLSchema is that people are dissatisfied with DTDs:
The DTD it's in a different syntax. The XML (instance) document is writing using one syntax and the DTD using another syntax
Limited datatype capability.
DTDs support a very limited capability for specifying datatypes.
People desire a set of built-in datatypes compatible with those found in databases. DTD supports only 10 datatypes and XML Schemas supports 44+ datatypes
VDM-SL
VDM-SL Data Types
Basic Data Types
The Boolean Type
The Numeric Types: The five numeric types denote a hierarchy where real is the most general type followed by rat, int, nat and nat1.
Reals
Rationals
Integers
Naturals
Positive Naturals
The Character Type
The Quote Type: The quote type corresponds to enumerated types in a typical programming language.
Compound Types
Set Types: A set is an unordered collection of values, all of the same type, which is treated as a whole. All sets are finite, i.e. they contain only a finite number of elements. The elements of a set type can be arbitrarily complex, they could for example be sets themselves.
Sequence Types: A sequence value is an ordered collection of elements of some type indexed by 1, 2, ..., n; where n is the length of the sequence. A sequence type is the type of nite sequences of elements of a type, either including the empty sequence (seq0 type) or excluding it (seq1 type). The elements of a sequence type can be arbitrarily complex; they could e.g. be sequences themselves.
Map Types: A map type from a type A to a type B is a type that associates with each element of A (or a subset of A) an element of B. A map value can be thought of as an unordered collection of pairs. The first element in each pair is called a key, because it can be used as a key to get the second element (called the information part) in that pair. All key elements in a map must therefore be unique. All maps in VDM-SL are finite. The domain and range elements of a map type can be arbitrarily complex, they could e.g. be maps themselves. A special kind of map is the injective map. An injective map is one for which no element of the range is associated with more than one element of the domain. For an injective map it is possible to invert the map.
Product Types: The values of a product type are called tuples. A tuple is a xed length list where the i'th element of the tuple must belong to the i'th element of the product type
Composite Types: Composite types correspond to record types in programming languages. Thus, elements of this type are somewhat similar to the tuples described in the section about product types above. The di erence between the record type and the product type is that the di erent components of a record can be directly selected by means of corresponding selector functions. In addition records are tagged with an identi er which must be used when manipulating the record.
Union and Optional Types: The union type corresponds to a set-theoretic union, i.e. the type de ned by means of a union type will contain all the elements from each of the components of the union type. The optional type [T] is a kind of shorthand for a union type T | nil, where nil is used to denote the absence of a value.
Datatype Definition of XMLSchema in Haskell
For accomplish the first step I tried the following alternatives:
UUXML (A Type-Preserving XML Schema Haskell Data Binding): Not a real tool (no implementation), just a theorethical conversion defined by Frank Atanassow, Dave Clarke and Johan Jeuring
Haifa : Mapping of XML Schema data-types to Haskell by Simon Foster. This is a very simple data-type mapper, just for very simple XML Schema data-types. It also needs GHC 6.3/6.4 with full Generics.
DtdToHaskell - HaXml: Download of the DTDs that define XMLSchema from W3C (http://www.w3.org/2001/XMLSchema.dtd and http://www.w3.org/2001/datatypes.dtd).The DtdToHaskell has a bug on parsing of Parameter Entity entities. Because of that I change the original DTDs using AltovaXMLSpy DTD Editor, replacing the entities by their definition, obtaining a equivalent version of the DTDs. Then using the DtdToHaskell tool from HaXml I define the datatypes from the changed version of the DTDs (XMLSchema.dtd and datatypes.dtd).
Conversion
Conversion of the Built-in Datatypes
string: A regular string. It is converted to seq of char
normalizedString: A string without tabs, line feeds, or carriage returns. It is converted to seq of char
token: String without tabs, l/f, leading/trailing spaces, consecutive spaces. It is converted to seq of char
integer: A regular integer. It is converted to int
int: -2147483648 to 2147483647. It is converted to int
unsignedInt: 0 to 4294967295. It is converted to nat
long: -9223372036854775808 to 9223372036854775807. It is converted to int
unsignedLong: 0 to 18446744073709551615. It is converted to nat
positiveInteger: 1 to infinity. It is converted to nat1
nonNegativeInteger: 0 to infinity. It is converted to nat
time: format: hh:mm:ss.sss Conversion ToDo
dateTime: format: CCYY-MM-DDThh:mm:ss Conversion ToDo
duration: Example P1Y2M3DT10H30M12? .3S Conversion ToDo
date: format: CCYY-MM-DD Conversion ToDo
gMonth: format: --MM-- Conversion ToDo
gYear: format: CCYY Conversion ToDo
gYearMonth: format: CCYY-MM Conversion ToDo
gDay: format: ---DD Conversion ToDo
gMonthDay: format: --MM-DD Conversion ToDo
Name: Conversion ToDo
byte: -127 to 128 Conversion ToDo
unsignedByte: 0 to 255 Conversion ToDo
base64Binary: a base64 string Conversion ToDo
hexBinary: a hex string Conversion ToDo
nonPositiveInteger: negative infinity to 0 Conversion ToDo
negativeInteger: negative infinity to -1 Conversion ToDo
Qname: a namespace qualified name Conversion ToDo
NCName: Conversion ToDo
anyURI: An URL. Conversion ToDo
language: Any valid xml:lang value, e.g., EN, FR, .. Conversion ToDo
ID: must be used only with attributes. Conversion ToDo
IDREF: must be used only with attributes. Conversion ToDo
IDREFS: must be used only with attributes. Conversion ToDo
ENTITY: must be used only with attributes. Conversion ToDo
ENTITIES: must be used only with attributes. Conversion ToDo
NOTATION: a NOTATION from the XML spec. Conversion ToDo
NMTOKEN: must be used only with attributes. Conversion ToDo
NMTOKENS: must be used only with attributes. Conversion ToDo
All the components have a type associated with it and some of them will define new type definitions.
Conversion of the components of XML Schema
Primary Schema Components
XML namespaces: ToDo
Simple Types Definitions:
Complex Type Definitions:
Element Declarations:
Attribute Declarations:
Secondary Schema Components: ToDo
Model Group Definitions
Attribute Group Definitions
Identity-constraint Definitions - Similar to ID / IDREF
In this project I have to develop a tool to XML <-> SQL
Conversion based on Haskell/Strafunski. The conversion scheme is based
on the refinement calculus proposed in
link
Objectives
Define the datatypes of XMLSchema in Haskell
Convert XML Schema datatypes to VDM-SL type definitions, using the datatypes defined in VooDooMFront.
XMLSchema
The purpose of an XML Schema is to define the legal building blocks of an XML document, just like a DTD.
An XML Schema:
defines elements that can appear in a document
defines attributes that can appear in a document
defines which elements are child elements
defines the order of child elements
defines the number of child elements
defines whether an element is empty or can include text
defines data types for elements and attributes
defines default and fixed values for elements and attributes
Purpose of XML Schemas
The XML have many schema languages. This languages specify the structure of instance documents (e.g this element contains these elements, which contains these other elements, etc) and the datatype of each element/attribute (e.g this element shall hold an integer with the range 0 to 12,000).
Motivation for XML Schemas
The main motivation for the XMLSchema is that people are dissatisfied with DTDs:
The DTD it's in a different syntax. The XML (instance) document is writing using one syntax and the DTD using another syntax
Limited datatype capability.
DTDs support a very limited capability for specifying datatypes.
People desire a set of built-in datatypes compatible with those found in databases. DTD supports only 10 datatypes and XML Schemas supports 44+ datatypes
VDM-SL
VDM-SL Data Types
Basic Data Types
The Boolean Type
The Numeric Types: The five numeric types denote a hierarchy where real is the most general type followed by rat, int, nat and nat1.
Reals
Rationals
Integers
Naturals
Positive Naturals
The Character Type
The Quote Type: The quote type corresponds to enumerated types in a typical programming language.
Compound Types
Set Types: A set is an unordered collection of values, all of the same type, which is treated as a whole. All sets are finite, i.e. they contain only a finite number of elements. The elements of a set type can be arbitrarily complex, they could for example be sets themselves.
Sequence Types: A sequence value is an ordered collection of elements of some type indexed by 1, 2, ..., n; where n is the length of the sequence. A sequence type is the type of nite sequences of elements of a type, either including the empty sequence (seq0 type) or excluding it (seq1 type). The elements of a sequence type can be arbitrarily complex; they could e.g. be sequences themselves.
Map Types: A map type from a type A to a type B is a type that associates with each element of A (or a subset of A) an element of B. A map value can be thought of as an unordered collection of pairs. The first element in each pair is called a key, because it can be used as a key to get the second element (called the information part) in that pair. All key elements in a map must therefore be unique. All maps in VDM-SL are finite. The domain and range elements of a map type can be arbitrarily complex, they could e.g. be maps themselves. A special kind of map is the injective map. An injective map is one for which no element of the range is associated with more than one element of the domain. For an injective map it is possible to invert the map.
Product Types: The values of a product type are called tuples. A tuple is a xed length list where the i'th element of the tuple must belong to the i'th element of the product type
Composite Types: Composite types correspond to record types in programming languages. Thus, elements of this type are somewhat similar to the tuples described in the section about product types above. The di erence between the record type and the product type is that the di erent components of a record can be directly selected by means of corresponding selector functions. In addition records are tagged with an identi er which must be used when manipulating the record.
Union and Optional Types: The union type corresponds to a set-theoretic union, i.e. the type de ned by means of a union type will contain all the elements from each of the components of the union type. The optional type [T] is a kind of shorthand for a union type T | nil, where nil is used to denote the absence of a value.
Datatype Definition of XMLSchema in Haskell
For accomplish the first step I tried the following alternatives:
UUXML (A Type-Preserving XML Schema Haskell Data Binding): Not a real tool (no implementation), just a theorethical conversion defined by Frank Atanassow, Dave Clarke and Johan Jeuring
Haifa : Mapping of XML Schema data-types to Haskell by Simon Foster. This is a very simple data-type mapper, just for very simple XML Schema data-types. It also needs GHC 6.3/6.4 with full Generics.
DtdToHaskell - HaXml: Download of the DTDs that define XMLSchema from W3C (http://www.w3.org/2001/XMLSchema.dtd and http://www.w3.org/2001/datatypes.dtd).The DtdToHaskell has a bug on parsing of Parameter Entity entities. Because of that I change the original DTDs using AltovaXMLSpy DTD Editor, replacing the entities by their definition, obtaining a equivalent version of the DTDs. Then using the DtdToHaskell tool from HaXml I define the datatypes from the changed version of the DTDs (XMLSchema.dtd and datatypes.dtd).
Conversion
Conversion of the Built-in Datatypes
string: A regular string. It is converted to seq of char
normalizedString: A string without tabs, line feeds, or carriage returns. It is converted to seq of char
token: String without tabs, l/f, leading/trailing spaces, consecutive spaces. It is converted to seq of char
integer: A regular integer. It is converted to int
int: -2147483648 to 2147483647. It is converted to int
unsignedInt: 0 to 4294967295. It is converted to nat
long: -9223372036854775808 to 9223372036854775807. It is converted to int
unsignedLong: 0 to 18446744073709551615. It is converted to nat
positiveInteger: 1 to infinity. It is converted to nat1
nonNegativeInteger: 0 to infinity. It is converted to nat
time: format: hh:mm:ss.sss Conversion ToDo
dateTime: format: CCYY-MM-DDThh:mm:ss Conversion ToDo
duration: Example P1Y2M3DT10H30M12? .3S Conversion ToDo
date: format: CCYY-MM-DD Conversion ToDo
gMonth: format: --MM-- Conversion ToDo
gYear: format: CCYY Conversion ToDo
gYearMonth: format: CCYY-MM Conversion ToDo
gDay: format: ---DD Conversion ToDo
gMonthDay: format: --MM-DD Conversion ToDo
Name: Conversion ToDo
byte: -127 to 128 Conversion ToDo
unsignedByte: 0 to 255 Conversion ToDo
base64Binary: a base64 string Conversion ToDo
hexBinary: a hex string Conversion ToDo
nonPositiveInteger: negative infinity to 0 Conversion ToDo
negativeInteger: negative infinity to -1 Conversion ToDo
Qname: a namespace qualified name Conversion ToDo
NCName: Conversion ToDo
anyURI: An URL. Conversion ToDo
language: Any valid xml:lang value, e.g., EN, FR, .. Conversion ToDo
ID: must be used only with attributes. Conversion ToDo
IDREF: must be used only with attributes. Conversion ToDo
IDREFS: must be used only with attributes. Conversion ToDo
ENTITY: must be used only with attributes. Conversion ToDo
ENTITIES: must be used only with attributes. Conversion ToDo
NOTATION: a NOTATION from the XML spec. Conversion ToDo
NMTOKEN: must be used only with attributes. Conversion ToDo
NMTOKENS: must be used only with attributes. Conversion ToDo
All the components have a type associated with it and some of them will define new type definitions.
Conversion of the components of XML Schema
Primary Schema Components
XML namespaces: ToDo
Simple Types Definitions:
Complex Type Definitions:
Element Declarations:
Attribute Declarations:
Secondary Schema Components: ToDo
Model Group Definitions
Attribute Group Definitions
Identity-constraint Definitions - Similar to ID / IDREF