Difference between revisions of "Programação com Objectos/Projecto de Programação com Objectos/Repositório CVS"

From Wiki**3

< Programação com Objectos‎ | Projecto de Programação com Objectos
(Conteúdo e Estrutura do Repositório)
(Conteúdo e Estrutura do Repositório)
 
(48 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{PRJPOAvisosEN20182019}}
+
{{PRJPOAvisosEN20222023}}
<!--{{PRJPOAvisosEE20172018}}-->
+
<!--{{PRJPOAvisosEE20222023}}-->
{{PRJPOMandatory20172018}}
+
{{PRJPOMandatory20222023}}
 
{{TOCright}}
 
{{TOCright}}
<!--'''<font color="red">A DISPONIBILIZAR BREVEMENTE</font>'''-->
+
<!--
 +
'''<font color="red">A DISPONIBILIZAR BREVEMENTE</font>'''
 +
-->
 +
Os repositórios CVS para os projectos (um por grupo) já contêm versões iniciais do projecto.
 +
 
 +
{{Aviso|'''O USO DO REPOSITÓRIO CVS É OBRIGATÓRIO.'''}}
  
Os repositórios CVS para os projectos (um por grupo) já contêm versões iniciais do projecto.
+
{{Aviso|'''NÃO SERÃO CONSIDERADOS PROJECTOS QUE NÃO ESTEJAM NO CVS.'''}}
  
{{Suggestion|Guia para leitores perplexos: [[CVS Crash Course]].}}
+
{{Suggestion|Pequeno guia para leitores perplexos: [[CVS Crash Course]].}}
  
 
== Localização ==
 
== Localização ==
Line 13: Line 18:
 
Os repositórios estão disponíveis no AFS em:
 
Os repositórios estão disponíveis no AFS em:
  
* '''<nowiki>/afs/ist.utl.pt/groups/leic-po/po18/cvs</nowiki>'''
+
* '''<nowiki>/afs/ist.utl.pt/groups/leic-po/po22/cvs</nowiki>'''
  
 
O conteúdo do repositório pode ser manipulado com o comando '''cvs''' ou com qualquer outro cliente compatível (e.g. ''[http://www.eclipse.org/ eclipse]'').
 
O conteúdo do repositório pode ser manipulado com o comando '''cvs''' ou com qualquer outro cliente compatível (e.g. ''[http://www.eclipse.org/ eclipse]'').
Line 22: Line 27:
  
 
No texto que se segue:
 
No texto que se segue:
* '''<nowiki>###</nowiki>''' designa o [https://fenix.tecnico.ulisboa.pt/disciplinas/PO6517957/2018-2019/1-semestre/grupos número de grupo] com três dígitos, e.g., 012
+
* '''<nowiki>###</nowiki>''' designa o [https://fenix.tecnico.ulisboa.pt/disciplinas/PO/2022-2023/1-semestre/grupos número de grupo] com três dígitos, e.g., 012
 
* '''<nowiki>ISTID</nowiki>''' designa o identificador de aluno, no formato "ist123456"
 
* '''<nowiki>ISTID</nowiki>''' designa o identificador de aluno, no formato "ist123456"
  
 
Assim, os valores possíveis para a variável de ambiente '''CVSROOT''' (ou pela opção '''-d''' do comando "cvs") são:
 
Assim, os valores possíveis para a variável de ambiente '''CVSROOT''' (ou pela opção '''-d''' do comando "cvs") são:
  
* '''<nowiki>/afs/ist.utl.pt/groups/leic-po/po18/cvs/###</nowiki>''' (disponível em clientes AFS e utilizador com token válido para a célula ist.utl.pt)
+
* '''<nowiki>/afs/ist.utl.pt/groups/leic-po/po22/cvs/###</nowiki>''' (disponível em clientes AFS e utilizador com token válido para a célula ist.utl.pt)
* '''<nowiki>:ext:ISTID@sigma.ist.utl.pt:/afs/ist.utl.pt/groups/leic-po/po18/cvs/###</nowiki>''' (disponível via SSH; verificar que CVS_RSH=ssh)
+
* '''<nowiki>:ext:ISTID@sigma.ist.utl.pt:/afs/ist.utl.pt/groups/leic-po/po22/cvs/###</nowiki>''' (disponível via SSH; verificar que CVS_RSH=ssh)
  
{{Aviso|Alunos que ainda não visitaram o [https://ciist.ist.utl.pt/servicos/self_service/ self-service do CIIST (DSI)], devem fazê-lo, para activação dos serviços relevantes (AFS e Shell, pelo menos). Sem isso, não conseguirão desenvolver ou entregar o projecto, reprovando à disciplina.}}
+
{{Aviso|Alunos que ainda não visitaram o [https://selfservice.dsi.tecnico.ulisboa.pt/ self-service da DSI], devem fazê-lo, para activação dos serviços relevantes (AFS e Shell, pelo menos). Sem isso, não conseguirão desenvolver ou entregar o projecto, reprovando à disciplina.}}
  
 
== Conteúdo e Estrutura do Repositório ==
 
== Conteúdo e Estrutura do Repositório ==
  
Cada projecto é constituído por dois módulos: <!-- (por exemplo, no eclipse, são projectos independentes):-->
+
O código fornecido é de uso obrigatório e deve ser completado.
  
* '''project/sth-core'''
+
Cada projecto é constituído por dois módulos: '''project/prr-core''' e '''project/prr-app'''.
* '''project/sth-app'''
+
{{CollapsedCode|Conteúdo inicial do repositório CVS para o módulo prr-core|<source lang="text">
{{CollapsedCode|Conteúdo inicial do repositório CVS para o módulo sth-core|<text>
+
prr-core
sth-core
 
 
├── Makefile
 
├── Makefile
 +
├── README.md
 
└── src
 
└── src
     └── sth
+
     └── prr
 
         ├── exceptions
 
         ├── exceptions
        │   ├── BadEntryException.java
 
 
         │   ├── ImportFileException.java
 
         │   ├── ImportFileException.java
         │   └── NoSuchPersonIdException.java
+
        │   ├── MissingFileAssociationException.java
         ├── School.java
+
        │   ├── UnavailableFileException.java
         └── SchoolManager.java
+
         │   └── UnrecognizedEntryException.java
</text>
+
         ├── Network.java
 +
         ├── NetworkManager.java
 +
        └── terminals
 +
            └── Terminal.java</source>
 
}}
 
}}
{{CollapsedCode|Conteúdo inicial do repositório CVS para o módulo sth-app|<text>
+
{{CollapsedCode|Conteúdo inicial do repositório CVS para o módulo prr-app|<source lang="text">
sth-app
+
prr-app
 
├── Makefile
 
├── Makefile
├── people.import
+
├── README.md
 
└── src
 
└── src
     └── sth
+
     └── prr
 
         └── app
 
         └── app
 
             ├── App.java
 
             ├── App.java
 +
            ├── clients
 +
            │   ├── DoDisableClientNotifications.java
 +
            │   ├── DoEnableClientNotifications.java
 +
            │   ├── DoRegisterClient.java
 +
            │   ├── DoShowAllClients.java
 +
            │   ├── DoShowClient.java
 +
            │   ├── DoShowClientPaymentsAndDebts.java
 +
            │   ├── Label.java
 +
            │   ├── Menu.java
 +
            │   ├── Message.java
 +
            │   └── Prompt.java
 
             ├── exceptions
 
             ├── exceptions
             │   ├── ClosingSurveyException.java
+
             │   ├── DuplicateClientKeyException.java
             │   ├── DuplicateProjectException.java
+
             │   ├── DuplicateTerminalKeyException.java
             │   ├── DuplicateSurveyException.java
+
             │   ├── FileOpenFailedException.java
             │   ├── FinishingSurveyException.java
+
             │   ├── InvalidTerminalKeyException.java
 
             │   ├── Message.java
 
             │   ├── Message.java
             │   ├── NonEmptySurveyException.java
+
             │   ├── UnknownClientKeyException.java
            │   ├── NoSuchDisciplineException.java
+
             │   └── UnknownTerminalKeyException.java
            │   ├── NoSuchPersonException.java
+
             ├── lookups
            │   ├── NoSuchProjectException.java
+
             │   ├── DoShowAllCommunications.java
            │   ├── NoSurveyException.java
+
             │   ├── DoShowClientsWithDebts.java
            │   ├── OpeningSurveyException.java
+
             │   ├── DoShowClientsWithoutDebts.java
             │   └── SurveyFinishedException.java
+
             │   ├── DoShowCommunicationsFromClient.java
             ├── main
+
             │   ├── DoShowCommunicationsToClient.java
             │   ├── DoOpen.java
+
             │   ├── DoShowTerminalsWithPositiveBalance.java
             │   ├── DoOpenPersonnelMenu.java
+
             │   ├── DoShowUnusedTerminals.java
             │   ├── DoOpenRepresentativeMenu.java
 
            │   ├── DoOpenStudentMenu.java
 
            │   ├── DoOpenTeachingMenu.java
 
            │   ├── DoSave.java
 
            │   ├── Label.java
 
            │   ├── MainMenu.java
 
            │   └── Message.java
 
            ├── person
 
            │   ├── DoChangePhoneNumber.java
 
             │   ├── DoLogin.java
 
             │   ├── DoSearchPerson.java
 
             │   ├── DoShowAllPersons.java
 
             │   ├── DoShowPerson.java
 
 
             │   ├── Label.java
 
             │   ├── Label.java
 +
            │   ├── Menu.java
 
             │   ├── Message.java
 
             │   ├── Message.java
             │   └── PersonnelMenu.java
+
             │   └── Prompt.java
             ├── representative
+
             ├── main
             │   ├── DoCancelSurvey.java
+
             │   ├── DoOpenFile.java
             │   ├── DoCloseSurvey.java
+
             │   ├── DoSaveFile.java
             │   ├── DoCreateSurvey.java
+
             │   ├── DoOpenMenuClient.java
             │   ├── DoFinishSurvey.java
+
             │   ├── DoOpenMenuTerminals.java
             │   ├── DoOpenSurvey.java
+
             │   ├── DoOpenMenuLookups.java
             │   ├── DoShowDisciplineSurveys.java
+
             │   ├── DoShowGlobalBalance.java
 
             │   ├── Label.java
 
             │   ├── Label.java
 +
            │   ├── Menu.java
 
             │   ├── Message.java
 
             │   ├── Message.java
             │   └── RepresentativeMenu.java
+
             │   └── Prompt.java
             ├── student
+
             ├── terminal
             │   ├── DoAnswerSurvey.java
+
             │   ├── DoAddFriend.java
             │   ├── DoDeliverProject.java
+
             │   ├── DoEndInteractiveCommunication.java
             │   ├── DoShowSurveyResults.java
+
             │   ├── DoPerformPayment.java
 +
            │   ├── DoRemoveFriend.java
 +
            │   ├── DoSendTextCommunication.java
 +
            │   ├── DoShowOngoingCommunication.java
 +
            │   ├── DoShowTerminalBalance.java
 +
            │   ├── DoSilenceTerminal.java
 +
            │   ├── DoStartInteractiveCommunication.java
 +
            │   ├── DoTurnOffTerminal.java
 +
            │   ├── DoTurnOnTerminal.java
 
             │   ├── Label.java
 
             │   ├── Label.java
 +
            │   ├── Menu.java
 
             │   ├── Message.java
 
             │   ├── Message.java
             │   └── StudentMenu.java
+
             │   ├── Prompt.java
             └── teaching
+
             │   └── TerminalCommand.java
                ├── DoCloseProject.java
+
            └── terminals
                ├── DoCreateProject.java
+
                 ├── DoOpenMenuTerminalConsole.java
                 ├── DoShowDisciplineStudents.java
+
                 ├── DoRegisterTerminal.java
                 ├── DoShowProjectSubmissions.java
+
                 ├── DoShowAllTerminals.java
                 ├── DoShowSurveyResults.java
 
 
                 ├── Label.java
 
                 ├── Label.java
 +
                ├── Menu.java
 
                 ├── Message.java
 
                 ├── Message.java
                 └── TeachingMenu.java
+
                 └── Prompt.java</source>
</text>
 
 
}}
 
}}
  
Estes módulos podem ser obtidos em conjunto fazendo checkout de '''project''' (ver abaixo). <!-- (não recomendado, pois podem aparecer interferências indesejáveis -- configurações de eclipse, por exemplo).-->
+
Estes módulos podem ser obtidos em conjunto fazendo checkout de '''project''' (ver abaixo).
 
   
 
   
 
O repositório já tem a seguinte estrutura:
 
O repositório já tem a seguinte estrutura:
<!--* '''Makefile''' (makefile "principal" -- repete as acções sobre as makefiles secundárias)-->
+
* '''prr-core''' (directoria principal da biblioteca com a funcionalidade sem interface com o utilizador)
* '''sth-core''' (directoria principal da biblioteca com a funcionalidade sem interface com o utilizador)
+
* '''prr-core/Makefile''' (makefile secundária, semelhante à disponibilizada na aplicação bancária)
* '''sth-core/Makefile''' (makefile secundária, semelhante à disponibilizada na aplicação bancária)
+
* '''prr-core/src''' (directoria onde reside o código do "core", à semelhança do que acontece na aplicação bancária)
* '''sth-core/src''' (directoria onde reside o código do "core", à semelhança do que acontece na aplicação bancária)
+
* '''prr-app''' (directoria correspondente à aplicação; contém a interface com o utilizador)
* '''sth-app''' (directoria correspondente à aplicação; contém a interface com o utilizador)
+
* '''prr-app/Makefile''' (makefile secundária, semelhante à disponibilizada na aplicação bancária)
* '''sth-app/Makefile''' (makefile secundária, semelhante à disponibilizada na aplicação bancária)
+
* '''prr-app/src''' (directoria onde já reside o código da interface textual, tal como na biblioteca equivalente da aplicação bancária)
* '''sth-app/src''' (directoria onde já reside o código da interface textual, tal como na biblioteca equivalente da aplicação bancária)
 
  
Esta estrutura já contém algumas classes parcialmente implementadas ('''sth-core''') (que devem ser adaptadas) e outras completamente implementadas ('''sth-app''') (que não podem ser alteradas). <!--Estas implementações devem ser adaptadas ao código particular de cada projecto.-->
+
Esta estrutura já contém algumas classes parcialmente implementadas ('''prr-core''') (que devem ser adaptadas) e outras parcial ou completamente implementadas ('''prr-app''') (algumas das quais não podem ser alteradas).
  
 
{{Aviso|A estrutura do repositório não pode ser alterada.}}
 
{{Aviso|A estrutura do repositório não pode ser alterada.}}
  
{{Aviso|Os nomes das classes fornecidas em '''sth-core''' não podem ser alterados.}}
+
{{Aviso|O código fornecido em '''prr-core''' e '''prr-app''' tem de ser completado.}}
  
{{Aviso|O código fornecido em '''sth-app''' tem de ser completado, mas os nomes das classes não podem ser alterados.}}
+
{{Aviso|Os nomes das classes fornecidas em '''prr-core''' e '''prr-app''' não podem ser alterados.}}
 +
 
 +
{{Aviso|As seguintes classes e interfaces não podem ser alteradas: '''App.java''', todos as '''Label.java''', todos as '''Menu.java''', todos as '''Message.java''', todos os '''Prompt.java''' e todas as excepções fornecidas.}}
  
 
== Cuidados a ter na Utilização do Repositório CVS ==
 
== Cuidados a ter na Utilização do Repositório CVS ==
Line 145: Line 161:
 
* '''cvs init''' (não é necessário: o repositório já existe)
 
* '''cvs init''' (não é necessário: o repositório já existe)
 
* '''cvs import''' (não é necessário: o projecto já existe)
 
* '''cvs import''' (não é necessário: o projecto já existe)
* '''cd /afs/ist.utl.pt/groups/leic-po/po18/cvs''' (ou qualquer outra manipulação directa dos ficheiros do repositório: toda a interacção com o repositório deve ser limitada ao comando "cvs")
+
* '''cd /afs/ist.utl.pt/groups/leic-po/po22/cvs''' (ou qualquer outra manipulação directa dos ficheiros do repositório: toda a interacção com o repositório deve ser limitada ao comando "cvs")
  
 
=== <font color="forestgreen">FAZER</font> ===
 
=== <font color="forestgreen">FAZER</font> ===
Line 162: Line 178:
  
 
* No ponto 3 acima, é importante notar que quando se quer adicionar o conteúdo de uma (sub)directoria, deve ser primeiro adicionada a própria directoria e, só depois, o seu conteúdo.
 
* No ponto 3 acima, é importante notar que quando se quer adicionar o conteúdo de uma (sub)directoria, deve ser primeiro adicionada a própria directoria e, só depois, o seu conteúdo.
* Não adicionar a biblioteca '''po-uuilib''' ao projecto (serão removidas e quaisquer alterações perdidas -- isto pode causar problemas de compilação e perda de nota).
+
* Não adicionar a biblioteca '''po-uilib''' ao projecto (serão removidas e quaisquer alterações perdidas -- isto pode causar problemas de compilação e perda de nota).
 
* Pessoas sem área no AFS, ou sem login activado, não poderão aceder ao conteúdo do repositório: para activar estes acessos, consultar o self-service do CIIST (DSI). Em caso de dificuldade, consultar o corpo docente.
 
* Pessoas sem área no AFS, ou sem login activado, não poderão aceder ao conteúdo do repositório: para activar estes acessos, consultar o self-service do CIIST (DSI). Em caso de dificuldade, consultar o corpo docente.
 
* A estrutura do projecto no CVS deve ser mantida como apresentado e cada biblioteca do projecto deve ser, em geral, semelhante, em estrutura, às apresentadas para a aplicação bancária.
 
* A estrutura do projecto no CVS deve ser mantida como apresentado e cada biblioteca do projecto deve ser, em geral, semelhante, em estrutura, às apresentadas para a aplicação bancária.
Line 168: Line 184:
  
 
Agradece-se a comunicação de eventuais problemas.
 
Agradece-se a comunicação de eventuais problemas.
 +
 +
== "Receita" para a Entrega de Diagramas UML ==
 +
 +
Tal como indicado no [[Programação com Objectos/Projecto de Programação com Objectos/Avaliação do Projecto (Época Normal)|método de avaliação]], os 3 diagramas a entregar -- '''UML-po-uilib.pdf''', '''UML-prr-app.pdf''', '''UML-prr-core.pdf''' -- devem ser colocados na directoria '''uml''' do projecto no repositório CVS.
 +
 +
Os comandos abaixo explicam como realizar essa operação a partir de um projecto no repositório (desde obter uma cópia local até completar a entrega). O passo de obter a cópia local pode ser omitido se o projecto já tiver sido obtido anteriormente. O passo de adicionar novos ficheiros pode ser omitido se as versões dos diagramas corresponderem a actualizações de adições anteriores. Nos exemplos dos comandos abaixo, '''ist123456''' é o ISTid da pessoa que realiza as operações e '''199''' é o grupo dessa pessoa (estes dois valores variam de pessoa para pessoa e de grupo para grupo).
 +
 +
* Obter o projecto do repositório (o projecto fica na directoria local '''project'''). Assume-se que os comandos subsequentes são dados dentro da directoria '''project''' (notar '''cd project''' abaixo):
 +
cvs -d :ext:ist123456@sigma.tecnico.ulisboa.pt:/afs/ist.utl.pt/groups/leic-po/po22/cvs/199 co project
 +
cd project
 +
* Colocar os ficheiros com os diagramas na directoria '''project/uml''' (ficheiros novos ou actualizações). Esta operação depende de onde estão os diagramas ou de como foram digitalizados a partir da versão manuscrita (recorda-se que apenas são aceites diagramas manuscritos, devidamente acompanhados com a declaração de autoria). O comando apresentado é apenas um exemplo (assume que os diagramas estão originalmente na directoria principal do utilizador).
 +
cp ~/UML-po-uilib.pdf ~/UML-prr-app.pdf ~/UML-prr-core.pdf uml
 +
* Adicionar os ficheiros novos ao CVS (no comando a seguir, assume-se que os 3 ficheiros são adicionados, mas pode adicionar-se um de cada vez):
 +
cvs add uml/UML-po-uilib.pdf uml/UML-prr-app.pdf uml/UML-prr-core.pdf
 +
* Pode realizar-se neste ponto um pedido de actualização da cópia local (caso a outra pessoa do grupo também esteja a fazer alterações -- se não é o caso, este passo é opcional):
 +
cvs update
 +
* Finalmente, enviam-se os ficheiros novos para o repositório CVS (a mensagem descreve o commit e evita a abertura de um editor):
 +
cvs commit -m "Adicionados diagramas UML."
  
 
[[category:Projecto de PO]]
 
[[category:Projecto de PO]]
 
[[category:PO]]
 
[[category:PO]]
 
[[category:Ensino]]
 
[[category:Ensino]]

Latest revision as of 19:12, 1 October 2022

AVISOS - Avaliação em Época Normal

Esclarecimento de dúvidas:

  • Consultar sempre o corpo docente atempadamente: presencialmente ou através do endereço oficial da disciplina [1].
  • Não utilizar fontes de informação não oficialmente associadas ao corpo docente (podem colocar em causa a aprovação à disciplina).
  • Não são aceites justificações para violações destes conselhos: quaisquer consequências nefastas são da responsabilidade do aluno.

Requisitos para desenvolvimento, material de apoio e actualizações do enunciado (ver informação completa em Projecto de Programação com Objectos):

  • O material de apoio é de uso obrigatório e não pode ser alterado.
  • Verificar atempadamente (mínimo de 48 horas antes do final de cada prazo) os requisitos exigidos pelo processo de desenvolvimento.

Processo de avaliação (ver informação completa em Avaliação do Projecto):

  • Datas: 2022/10/04 12:00 (inicial); 2022/10/21 12:00 (intercalar); 2022/11/04 12:00 (final); 2022/11/04 (early bird) 2022/11/07 (normal) (teste prático).
  • Todas as entregas são cruciais para o bom desenvolvimento do projecto, sendo obrigatórias: a não realização de uma entrega implica a exclusão da avaliação do projecto e, por consequência, da avaliação da disciplina.
  • Verificar atempadamente (até 48 horas antes do final de cada prazo) os requisitos exigidos pelo processo de avaliação, incluindo a capacidade de acesso ao repositório.
  • Apenas se consideram para avaliação os projectos existentes no repositório oficial. Apenas se considera para avaliação o ramo 'main'.
  • Trabalhos não presentes no repositório no final do prazo têm classificação 0 (zero) (não são aceites outras formas de entrega). Não são admitidas justificações para atrasos em sincronizações do repositório. A indisponibilidade temporária do repositório ou de outros materiais, desde que inferior a 24 horas, não justifica atrasos na submissão de um trabalho.
  • A avaliação do projecto pressupõe o compromisso de honra de que o trabalho correspondente foi realizado pelos alunos correspondentes ao grupo de avaliação.
  • Fraudes na execução do projecto terão como resultado a exclusão dos alunos implicados do processo de avaliação.
Material de Uso Obrigatório
As bibliotecas po-uilib e o conteúdo inicial do CVS são de uso obrigatório:
  • po-uilib (classes de base) po-uilib-202209081626.tar.bz2 (não pode ser alterada) - javadoc
  • prr-core (classes do "core") (via CVS) (deve ser completada -- os nomes das classes fornecidas não podem ser alterados)
  • prr-app (classes de interacção) (via CVS) (deve ser completada -- os nomes das classes fornecidas não podem ser alterados)
A máquina virtual, fornecida para desenvolvimento do projecto, já contém todo o material de apoio.
Uso Obrigatório: Repositório CVS
Apenas se consideram para avaliação os projectos existentes no repositório CVS oficial.

Trabalhos não presentes no repositório no final do prazo têm classificação 0 (zero) (não são aceites outras formas de entrega). Não são admitidas justificações para atrasos em sincronizações do repositório. A indisponibilidade temporária do repositório, desde que inferior a 24 horas, não justifica atrasos na submissão de um trabalho.

Os repositórios CVS para os projectos (um por grupo) já contêm versões iniciais do projecto.

O USO DO REPOSITÓRIO CVS É OBRIGATÓRIO.
NÃO SERÃO CONSIDERADOS PROJECTOS QUE NÃO ESTEJAM NO CVS.
Pequeno guia para leitores perplexos: CVS Crash Course.

Localização

Os repositórios estão disponíveis no AFS em:

  • /afs/ist.utl.pt/groups/leic-po/po22/cvs

O conteúdo do repositório pode ser manipulado com o comando cvs ou com qualquer outro cliente compatível (e.g. eclipse).

Esta directoria não deve ser utilizada directamente.

Modo de Acesso

No texto que se segue:

  • ### designa o número de grupo com três dígitos, e.g., 012
  • ISTID designa o identificador de aluno, no formato "ist123456"

Assim, os valores possíveis para a variável de ambiente CVSROOT (ou pela opção -d do comando "cvs") são:

  • /afs/ist.utl.pt/groups/leic-po/po22/cvs/### (disponível em clientes AFS e utilizador com token válido para a célula ist.utl.pt)
  • :ext:ISTID@sigma.ist.utl.pt:/afs/ist.utl.pt/groups/leic-po/po22/cvs/### (disponível via SSH; verificar que CVS_RSH=ssh)
Alunos que ainda não visitaram o self-service da DSI, devem fazê-lo, para activação dos serviços relevantes (AFS e Shell, pelo menos). Sem isso, não conseguirão desenvolver ou entregar o projecto, reprovando à disciplina.

Conteúdo e Estrutura do Repositório

O código fornecido é de uso obrigatório e deve ser completado.

Cada projecto é constituído por dois módulos: project/prr-core e project/prr-app.

Conteúdo inicial do repositório CVS para o módulo prr-core
prr-core
├── Makefile
├── README.md
└── src
    └── prr
        ├── exceptions
        │   ├── ImportFileException.java
        │   ├── MissingFileAssociationException.java
        │   ├── UnavailableFileException.java
        │   └── UnrecognizedEntryException.java
        ├── Network.java
        ├── NetworkManager.java
        └── terminals
            └── Terminal.java
Conteúdo inicial do repositório CVS para o módulo prr-app
prr-app
├── Makefile
├── README.md
└── src
    └── prr
        └── app
            ├── App.java
            ├── clients
            │   ├── DoDisableClientNotifications.java
            │   ├── DoEnableClientNotifications.java
            │   ├── DoRegisterClient.java
            │   ├── DoShowAllClients.java
            │   ├── DoShowClient.java
            │   ├── DoShowClientPaymentsAndDebts.java
            │   ├── Label.java
            │   ├── Menu.java
            │   ├── Message.java
            │   └── Prompt.java
            ├── exceptions
            │   ├── DuplicateClientKeyException.java
            │   ├── DuplicateTerminalKeyException.java
            │   ├── FileOpenFailedException.java
            │   ├── InvalidTerminalKeyException.java
            │   ├── Message.java
            │   ├── UnknownClientKeyException.java
            │   └── UnknownTerminalKeyException.java
            ├── lookups
            │   ├── DoShowAllCommunications.java
            │   ├── DoShowClientsWithDebts.java
            │   ├── DoShowClientsWithoutDebts.java
            │   ├── DoShowCommunicationsFromClient.java
            │   ├── DoShowCommunicationsToClient.java
            │   ├── DoShowTerminalsWithPositiveBalance.java
            │   ├── DoShowUnusedTerminals.java
            │   ├── Label.java
            │   ├── Menu.java
            │   ├── Message.java
            │   └── Prompt.java
            ├── main
            │   ├── DoOpenFile.java
            │   ├── DoSaveFile.java
            │   ├── DoOpenMenuClient.java
            │   ├── DoOpenMenuTerminals.java
            │   ├── DoOpenMenuLookups.java
            │   ├── DoShowGlobalBalance.java
            │   ├── Label.java
            │   ├── Menu.java
            │   ├── Message.java
            │   └── Prompt.java
            ├── terminal
            │   ├── DoAddFriend.java
            │   ├── DoEndInteractiveCommunication.java
            │   ├── DoPerformPayment.java
            │   ├── DoRemoveFriend.java
            │   ├── DoSendTextCommunication.java
            │   ├── DoShowOngoingCommunication.java
            │   ├── DoShowTerminalBalance.java
            │   ├── DoSilenceTerminal.java
            │   ├── DoStartInteractiveCommunication.java
            │   ├── DoTurnOffTerminal.java
            │   ├── DoTurnOnTerminal.java
            │   ├── Label.java
            │   ├── Menu.java
            │   ├── Message.java
            │   ├── Prompt.java
            │   └── TerminalCommand.java
            └── terminals
                ├── DoOpenMenuTerminalConsole.java
                ├── DoRegisterTerminal.java
                ├── DoShowAllTerminals.java
                ├── Label.java
                ├── Menu.java
                ├── Message.java
                └── Prompt.java

Estes módulos podem ser obtidos em conjunto fazendo checkout de project (ver abaixo).

O repositório já tem a seguinte estrutura:

  • prr-core (directoria principal da biblioteca com a funcionalidade sem interface com o utilizador)
  • prr-core/Makefile (makefile secundária, semelhante à disponibilizada na aplicação bancária)
  • prr-core/src (directoria onde reside o código do "core", à semelhança do que acontece na aplicação bancária)
  • prr-app (directoria correspondente à aplicação; contém a interface com o utilizador)
  • prr-app/Makefile (makefile secundária, semelhante à disponibilizada na aplicação bancária)
  • prr-app/src (directoria onde já reside o código da interface textual, tal como na biblioteca equivalente da aplicação bancária)

Esta estrutura já contém algumas classes parcialmente implementadas (prr-core) (que devem ser adaptadas) e outras parcial ou completamente implementadas (prr-app) (algumas das quais não podem ser alteradas).

A estrutura do repositório não pode ser alterada.
O código fornecido em prr-core e prr-app tem de ser completado.
Os nomes das classes fornecidas em prr-core e prr-app não podem ser alterados.
As seguintes classes e interfaces não podem ser alteradas: App.java, todos as Label.java, todos as Menu.java, todos as Message.java, todos os Prompt.java e todas as excepções fornecidas.

Cuidados a ter na Utilização do Repositório CVS

NÃO FAZER

  • cvs init (não é necessário: o repositório já existe)
  • cvs import (não é necessário: o projecto já existe)
  • cd /afs/ist.utl.pt/groups/leic-po/po22/cvs (ou qualquer outra manipulação directa dos ficheiros do repositório: toda a interacção com o repositório deve ser limitada ao comando "cvs")

FAZER

Antes de tudo o mais, fazer cópias de segurança (vulgo "backups") de tudo o que já foi feito.

O repositório já contém uma versão preliminar do projecto e devem ser dados os seguintes passos, para continuar a desenvolver o projecto:

  1. cvs co project (permite criar localmente uma directoria controlada pelo CVS, com o nome project, com a estrutura apresentada acima, contendo os ficheiros do projecto);
  2. Editar/adicionar material do/ao projecto;
  3. Caso sejam criados ficheiros ou directórios novos, fazer cvs add ficheiro1 ficheiro2 ... ficheiro3 (adicionar cada ficheiro novo ao projecto no CVS);
  4. cvs update (antes de enviar alteração locais para o repositório, verificar se há actualizações a incorporar na cópia local e que não foi esquecido nenhum ficheiro importante: voltar a 3 até terem sido todos adicionados)
  5. cvs commit (enviar alterações para o repositório)

Observações importantes

  • No ponto 3 acima, é importante notar que quando se quer adicionar o conteúdo de uma (sub)directoria, deve ser primeiro adicionada a própria directoria e, só depois, o seu conteúdo.
  • Não adicionar a biblioteca po-uilib ao projecto (serão removidas e quaisquer alterações perdidas -- isto pode causar problemas de compilação e perda de nota).
  • Pessoas sem área no AFS, ou sem login activado, não poderão aceder ao conteúdo do repositório: para activar estes acessos, consultar o self-service do CIIST (DSI). Em caso de dificuldade, consultar o corpo docente.
  • A estrutura do projecto no CVS deve ser mantida como apresentado e cada biblioteca do projecto deve ser, em geral, semelhante, em estrutura, às apresentadas para a aplicação bancária.
  • Em caso de dúvidas, consultar o corpo docente.

Agradece-se a comunicação de eventuais problemas.

"Receita" para a Entrega de Diagramas UML

Tal como indicado no método de avaliação, os 3 diagramas a entregar -- UML-po-uilib.pdf, UML-prr-app.pdf, UML-prr-core.pdf -- devem ser colocados na directoria uml do projecto no repositório CVS.

Os comandos abaixo explicam como realizar essa operação a partir de um projecto no repositório (desde obter uma cópia local até completar a entrega). O passo de obter a cópia local pode ser omitido se o projecto já tiver sido obtido anteriormente. O passo de adicionar novos ficheiros pode ser omitido se as versões dos diagramas corresponderem a actualizações de adições anteriores. Nos exemplos dos comandos abaixo, ist123456 é o ISTid da pessoa que realiza as operações e 199 é o grupo dessa pessoa (estes dois valores variam de pessoa para pessoa e de grupo para grupo).

  • Obter o projecto do repositório (o projecto fica na directoria local project). Assume-se que os comandos subsequentes são dados dentro da directoria project (notar cd project abaixo):
cvs -d :ext:ist123456@sigma.tecnico.ulisboa.pt:/afs/ist.utl.pt/groups/leic-po/po22/cvs/199 co project
cd project
  • Colocar os ficheiros com os diagramas na directoria project/uml (ficheiros novos ou actualizações). Esta operação depende de onde estão os diagramas ou de como foram digitalizados a partir da versão manuscrita (recorda-se que apenas são aceites diagramas manuscritos, devidamente acompanhados com a declaração de autoria). O comando apresentado é apenas um exemplo (assume que os diagramas estão originalmente na directoria principal do utilizador).
cp ~/UML-po-uilib.pdf ~/UML-prr-app.pdf ~/UML-prr-core.pdf uml
  • Adicionar os ficheiros novos ao CVS (no comando a seguir, assume-se que os 3 ficheiros são adicionados, mas pode adicionar-se um de cada vez):
cvs add uml/UML-po-uilib.pdf uml/UML-prr-app.pdf uml/UML-prr-core.pdf
  • Pode realizar-se neste ponto um pedido de actualização da cópia local (caso a outra pessoa do grupo também esteja a fazer alterações -- se não é o caso, este passo é opcional):
cvs update
  • Finalmente, enviam-se os ficheiros novos para o repositório CVS (a mensagem descreve o commit e evita a abertura de um editor):
cvs commit -m "Adicionados diagramas UML."