Engenharia da Informação

[ Home Page | Fabricare | Publicações | Bookmarks | Disciplinas | Download ]


Notas/Novidades:

  • A edição de 2006/2007 funcionará em moldes semi-presenciais. Consultem o vosso email do departamento para saber as regras de funcionamento.
  • Log de emails

    1. A disciplina funcionará em modo semi-presencial
    2. A avaliação da disciplina será efectuada de acordo com as regras publicadas na ficha de disciplina
      1. 50% prova escrita + 50% nota de frequencia
      2. Para os alunos com dispensa de avaliação continua a nota de frequencia é substituida pela nota de um trabalho. Notem que o trabalho é OBRIGATÓRIO e será entregue e avaliado no dia 6 de Junho às 18h00 (sala B310)
      3. Para os alunos sem dispensa de avaliação continua a nota de frquencia é obtida através da realização de três provas escritas presencias (80%) e um comentário critico a entregar por email até dia 25/4 (20%)
    3. Haverá a realização de três sessões presencias para esclarecimento de dúvidas e apoio nas seguintes datas (sala B408, 20h40-23h30)
      1. 26 Abril
      2. 17 Maio
      3. 31 de Maio
    4. As provas escritas serão realizadas nos dias (sala B202, 19h10-20h00)
      1. 3 Maio
      2. 24 Maio
      3. 6 Junho
    5. Todas as componentes de avaliação tem nota mínima de 9 (nove) valores
    6. Qualquer esclarecimento de dúvidas da disciplina pode ser colocado por email ao docente da cadeira através do email psousa@dei.isep.ipp.pt ou através da lista de distribuição da disciplina einf@dei.isep.ipp.pt As dúvidas serão esclarecidas por email ou em caso de necessidade/vontade do aluno por uma sessão presencial a combinar com o docente

Sobre a Disciplina (2005/2006)

1.      Objectivos, Programa, Avaliação

2.      Bibliografia

3.      enunciado do exame época normal; resolução alínea 3a (diagrama, código), 3b (diagrama, código ) e 4b

4.      Material de base/revisão

1.      Metodologia OO Simplified (slides P&B) (documentação) - Prof. António Rocha

2.      Recapitulação de conceitos OO

3.      Componentes e interfaces: consultar guião de componentes na página da disciplina de ADAV

4.      ADO.net: consultar guia de referência rápida e guião ADAV
 

5.      Material Teórico

1.      Arquitectura de aplicações & modelo 3 camadas

2.      Padrões de Aplicações Empresariais

1.      Introdução aos Padrões

2.      Entidades de negócio

3.      Lógica de negócio e acesso a dados

4.      Aplicação exemplo (download: código fonte)

1.      TM + TDG

2.      TM + TDG (CC)

3.      DM + AR

4.      DM + DM

5.      Possíveis melhorias

1.      tratamento de concorrência

2.      suporte a múltiplas BD

3.      extensibilidade/flexibilidade

5.      Lógica de apresentação

6.      Sinopse e discussão

3.      Geração de código

1.      Code Generation Network

2.      MyGeneration

3.      Using Table Adapters in Visual Studio 2005

4.      WinShop usando TableAdapters

4.      Padrões GoF

5.      Temas para discussão

1.      Lógica de negócio e SQL Domain Logic and SQL, Martin Fowler

§         Why shouldn't I put my business logic in the database?
 

2.      Simplicidade e a computação para Web

§         ISCOC04, Adam Bosworth
 

3.      Refactoring

§         Refactoring, WikiPedia

§         Refactoring Catalog

§         Smells to Refactorings 
 

4.      Object-Relational Mapping

§         ORM, WikiPedia, 

§         Mapping Objects to Relational Databases: O/R Mapping In Detail

§         An Introduction to Object-Relational Mapping with Hibernate, Olexiy & Alexander Prokhorenko, 
 

5.      Metodologias e boas práticas I

§         The Joel Test: 12 Steps to Better Code, Joel Spolsky

§         Daily Builds Are Your Friend, Joel Spolsky 
 

6.      Metodologias e boas práticas II

§         Don’t live with Broken windows

§         Seven habits of highly effective programmers
 

7.      Tratamento de excepções

§         Java's checked exceptions were a mistake (and here's what I would like to do about it), Rod Waldhoff, 

§         Uncked exceptions - the controversy
 

8.      Open source como estratégia

§         Strategy Letter V, Joel Spolsky
 

9.      Projectos informáticos

§         Why Software Fails, Robert N. Charette
 

10.  Conceitos OO

§         Why extends is evil, Allen Holub

§         Why getter and setter methods are evil, Allen Holub
 

11.  Desenho de interfaces (de classes OO)

§         Humane Interface, Martin Fowler

§         Minimal Interface, Martin Fowler

§         Public versus Published interfaces, Martin Fowler
 

6.      Material Prático

1.      Exercício #1: Utilizando a aplicação de exemplo Banco de ADAV

1.      crie componentes separados para a GUI e Processamento

2.      crie a interface correspondente ao serviço prestado pelo componente

3.      implemente um novo componente que utilize ficheiros XML em vez de BD para persistência dos dados

4.      Permitir carregamento dinâmico das várias implementações

§         para relembrar o que aprenderam sobre carregamento dinâmico consultem o capítulo 7 (e anexo 3.3 para Java) do guião de introdução aos componentes de ADAV

5.      Resolução do exercício #1
 

2.      Exercício #2: utilizando a aplicação de exemplo Shop de ADAV, permita a atribuição de um brinde surpresa a cada 100 vendas efectuadas

1.      defina as alterações necessárias em termos de BD

2.      indique as alterações em termos de interface dos componentes

3.      como alteraria a aplicação cliente e o componente para indicar visualmente ao utilizador este facto?

§         para teste pode optar por atribuir o brinde a cada 3 vendas
 

3.      Exercício #3 (para entrega e avaliação): para o problema do sistema de Portagens (Relatório de 4-5 páginas):

1.      Defina uma arquitectura global para o sistema identificando os principais blocos constituintes

2.      Para cada sub-sistema elabore a lista de features a implementar e se necessário faça uma pequena descrição dos respectivos use cases

3.      Apresente as justificações para as decisões tomadas em termos de desenho do sistema
 

4.      Exercício #4: utilizando a aplicação de exemplo Shop de ADAV e aplicando os padrões Table Module e Table Data Gateway:

1.      transforme a classe Customer existente

2.      transforme a classe Product existente (ignore por enquanto o método interno ShopStatus InStock(OleDbConnection conn, OleDbTransaction tx, int ProductID, int Quant) )

3.      transforme a classe User existente

§         os métodos auxiliares que existiam na classe UtilDB para autenticação de utilizadores devem ser passados para a classe User para organizar o código de forma lógica e manter coerente as responsabilidades de cada classe

4.      utilize uma classe de excepção proprietária para encapsular as excepções do provider ADO.net para a camada de negócio

5.      divida a aplicação em dois componentes separados para lógica de negócio e lógica de acesso a dados

§         por enquanto ignore a situação da classe Sale, mantendo a lógica de acesso a dados e de negócio misturados nessa classe.

§         para tal pode ser necessário manter, por enquanto, uma cópia da classe UtilDB nos dois componentes

6.      Resolução do exercício #4 usando Table Data Gateways codificados manualmente
 

5.      Exercício #5 (para entrega e avaliação na última aula da semana): utilizando a aplicação Shop em três camadas do exercício #4, e com base no problema enunciado:

1.      elabore um relatório (2-3 páginas) de como poderia criar uma classe TransactionalContext que permita solucionar este problema sem violar as regras de encapsulamento OO nem as regras de separação de responsabilidades do modelo 3 camadas

2.      implemente a sua solução em código para a classe Sale

§         criando o Table Module e Table Data Gateway correspondente

§         eliminando a classe UtilDB e os métodos auxiliares InStock que se mantinham da implementação original

3.      Resolução do exercício
 

6.      Exercício #6 (para entrega e avaliação no dia 12/4):  com base no exercício de modelação do sistema de portagens (exercício #3):

1.      desenhe o modelo conceptual de dados correspondente à configuração da rede de auto-estradas (preçario)

2.      desenhe o modelo conceptual de dados correspondente à exploração da auto-estrada (para dar suporte ao módulo de portageiro e sistema de pagamento automático proprietário)

3.      implemente o modelo relacional para a alínea 1) e 2)

4.      usando os padrões Domain Model e Active Record codifique o modelo relacional correspondente à alínea 1) não se preocupando para já em identificar/codificar toda a lógica de negócio do problema.

5.      elabore um programa de teste para o código anterior que permita obter o preço de uma viagem entre Maia (A3) e Guimarães (A7)
 

7.      Exercício #7: baseado-se no conceito de interface, desenvolva uma classe que possa trabalhar genericamente com uma colecção objectos do tipo Movimentavel (isto é, que implementem a interface IMovimentavel), por exemplo,

8.                  
9.                         interface IMovimentavel
10.                     {
11.                            int Move(); // efectua uma deslocação para um ponto aleatório e retorna o número de segundos que demorou
12.                            int MoverPara(Posicao pos); // efectua a deslocação e retorna o número de segundos que demorou    
13.                            Posicao OndeEsta { get; }
14.                     }
15.                     
16.                     class Mundo
17.                     {
18.                            int Add(IMovimentavel obj); // retorna um identificador único para o objecto acabado de adicionar
19.                            int Move(int obj, Posicao pos);
20.                            void MoveTodos();
   }

1.      experimente a sua classe com objectos do tipo Carro, Pessoa e Bicicleta.

2.      utilizando o padrão observer implemente um mecanismo que permita notificações de alteração de posição de um objecto.

3.      utilizando o mecanismo da alínea anterior crie ou modifique as classes existentes por forma a permitir que um objecto "siga" outro.

4.      utilizando o padrão strategy, permita associar a cada objecto uma estratégia de deslocação (exemplo, condutor prudente, condutor "acelera")
 

21.  Exercício #8 (para entrega e avaliação até dia 20/5): pretende-se a criação de um componente para gestão de entidades e moradas. como requisito foi especificado que uma entidade pode ter mais que uma morada e que as moradas são conceitos autónomos podendo não estar associadas a nenhuma entidade. o sistema deve permitir gerir entidades do tipo indivíduo ou organização (ex., empresa).
Definiu-se a seguinte interface de negócio para o componente (esta interface corresponde aos requisitos da aplicação; os métodos a criar nas diversas classes que implementar no seu domain model devem dar resposta a esses requisitos, mas esta interface não é vinculativa):

22.              
23.                     interface IEntityManagement
24.                     {
25.                            // funcionalidades básicas
26.                            int AddPerson(PersonData p);
27.                            int AddOrganization(OrganizationData o);
28.                            EntityData GetEntity(int key);
29.                            IList<PersonData> GetPersons(string nameFilter);
30.                            IList<OrganizationData> GetOrganizations(string nameFilter);
31.                            int AddAddress(AddressData a, int? keyToEntity);
32.                            AddressData GetAddress(int key);      
33.                            IList<AddressData> GetAddressesForEntity(int keyEntity);
34.                            void AttachAddressToEntity(int keyAddress, int keyEntity, bool isPrimary);
35.                            
36.                            // pontos de contactos
37.                            int AttachContactPointToEntity(int keyEntity, ContactPointData c, ContactPreferenceData pref);
38.                            int SetContactPreference(int keyEntity, int keyContactPoint, ContactPreferenceData pref);
39.                            IList<ContactPointData> GetContactPointsForEntity(int keyEntity);
40.                            IList<ContactPointData> GetContactPointsAccordingToPreference(int keyEntity, DayOfWeek p1, TimeOfDay p2);
41.              
42.                            // outras funcionalidades
43.                            EntityData GetEntity(string nif);
44.                            IList<EntityData> GetEntities(string nameFilter);
45.                            IList<AddressData> GetAddresses(string streetFilter, string localFilter);
46.                            void SetPrimaryAddress(int keyEntity, int keyAddress);         
   }

1.      implemente as funcionalidades básicas do sistema usando os padrões Domain Model e Active Record. pode usar como base o seguinte projecto e base de dados.

2.      bónus: estenda o sistema por forma a suportar múltiplos pontos de contacto (ex., telefone casa, telefone emprego, telemóvel, correio electrónico) para uma entidade.

3.      bónus: implemente as restantes funcionalidades

4.      Resolução do exercício
 

47.  Exercício # 9: Partindo do exercício #8,

1.      Aplique o padrão Data Mapper em vez de Active Record

2.      Implemente a interface de negócio EntityManagement.BusinessInterface (funcionará como uma Façade para o sistema)
 

48.  Exercício #10 (para entrega e avaliação até dia 3/6): Suponha que é um programador e que o seu director de unidade lhe atribuiu a tarefa de desenvolver um sistema de avaliação de expressão matemáticas simples (apenas as operações básicas) escritas na notação reversa (RPN - Reverse Polish Notation), por forma a que o utilizador escolha as fórmulas que pretende calcular, introduza os valores da variáveis e seja confrontado com o resultado.
O sistema base já foi "arquitectado" pela equipa de análise e interacção, tendo um primeiro programador já implementado a prova de conceito do motor de cálculo (download). As suas tarefas são:

1.      implementar o mecanismo de persistência usando os padrões Domain Model e Data Mapper

2.      documentar o sistema com um diagrama de classes UML (note que o class diagram do Visual Studio 2005 não é UML)
 

7.      Trabalho - para alunos com dispensa de avaliação contínua

1.      Enunciado

Bibliografia recomendada

 

Padrões e Arquitectura de Aplicações

1.      Application Architecture for .NET: designing applications and services.

2.      GoF Design patterns (in C#)

3.      GoF & POSA Design patterns (in Java)

4.      Patterns of Enterprise Application Architecture

5.      PatternShare.org

6.      Acerca da Lógica de acesso a dados...

1.      Designing Data Tier Components and Passing Data Through Tiers

2.      Domain logic and SQL.

3.      Microsoft Data Patterns

7.      Sítios adicionais...

1.      Core J2EE Patterns

2.      Enterprise Solution Patterns Using Microsoft .NET

3.      Patterns of Enterprise Application Integration

4.      Enterprise Java Patterns @ The Server Side 


Anos Anteriores

1.      Ano lectivo 2004/2005

o        Objectivos, Programa, Avaliação

o        enunciados de exame (normal, recurso)

o        Trabalho

1.      Enunciado

2.      Lista de grupos de trabalho - o trabalho é obrigatório; alunos sem grupo não serão avaliados

3.      Perguntas a responder na 2ª fase

4.      Escala de apresentação dos trabalhos

o        Material Lectivo (acetatos) Teóricas

1.      Metodologia Simplified (slides P&B) (documentação) - Prof. António Rocha

2.      Arquitectura de aplicações & modelo 3 camadas

3.      Recapitulação de conceitos OO

4.      Introdução aos Padrões e Padrões Base (GoF, ...)

5.      Padrões de Aplicações Empresariais

1.      introdução, entidades de negócio e lógica de negócio

2.      lógica de acesso a dados

3.      lógica de apresentação e concorrência na BD

6.      sinopse e discussão

7.      bibliografia

8.      Descrição técnica PetShop.net

9.      conjunto de slides e uma aplicação de teste que implementa a aplicação exemplo para cálculo de receitas futuras usando várias combinações de estilos arquitecturais (com ênfase nos padrões de lógica de negócio e de acesso a dados).

o        Material Lectivo (acetatos e guiões de trabalho) teórico-práticas

1.      UML

2.      XDE (v1.25 de 5 de abril)

2.      Ano lectivo 2003/2004

o        correcção parte prática do recurso

o        correcção parte prática do exame

3.      Ano lectivo 2002/2003

o        Enunciado 1º Trabalho 2003

o        Teste Diagnóstico #1 (resolução)

o        Resolução do Projecto Tarefas

o        Enunciado 2º Trabalho

o        Resolução do exame de 2002.06.14

UML

1.      O meu Pequeno Guia da Notação UML

2.      Acetatos UML

3.      Teste Diagnóstico

4.      Dicionário de UML

5.      Site UML do Prof. António Rocha

6.      UML.org

7.      UML na OMG

8.      Links sobre UML (Cetus)

9.      Técnicas de OOAD usando UML

Rational XDE

1.      Guião da Disciplina

1.      base de dados tarefas [ZIP]

2.      projecto tarefas completo

2.      Rational XDE Center

3.      XDE Resources

4.      Rational XDE evaluation guide [Doc ZIP]

5.      XDE Design Guidelines for .NET [PDF - ZIP]

Bases de Dados Orientadas a Objectos

1.      FastObjects 

2.      Acetatos FastObjects  

3.      Aplicação exemplo  


[ Home Page | Fabricare | Publicações | Bookmarks | Disciplinas | Download ]

comentários e sugestões

Ultima Alteração: 22 de Fevereiro de 2006