![]() |
António Roberto Software |
|
Linguagens
de Programação 1
|
2º
ano da Licenciatura em Informática de Gestão
|
Aulas de 16 e 17 de Maio de 2002
3ª Etapa do Trabalho final
Aviso : O prazo de entrega do trabalho final é 14 de Junho. Cada grupo deverá entregar uma diskette com a solução na aula de 14 de Junho. Aconselha-se os alunos a cumprirem os tempos atribuídos às diversas etapas.
Passagem da versão 3 para a versão 4 do protótipo EditorGrafos
Lista de funcionalidades a implementar na versão 4 :
- Separar o Documento da View
- Objectivo : Readaptar o código para a Arquitectura Document/View do MFC :
- armazenar os dados no Document object, apresentar e editar os dados no View object
- Pistas
- Transferir a lista de nós e a lista de arcos da classe CEditorGrafosView para CEditorGrafosDoc
- Actualizar os métodos da View que utilizem as listas, nomeadamente : OnDraw , OnLButtonUp , OnLButtonDown
- Ver primeira linha de código de OnDraw.
- Deverão obter um ponteiro pDoc para o document object com o método GetDocument( )
Utilizar o ponteiro pDoc para aceder aos dados do documento
- Serialização dos objectos
- Objectivo : Tornar persistentes os objectos que constituem os dados do documento
- Poder gravá-los no disco para mais tarde os poder ler do disco
- Implementar File/New, File/Open e File/Save
- Pistas
- Alterações na classe CNo
- Na declaração da classe CNo
- A classe CNo passa a ser derivada de CObject
- Acrescente a linha DECLARE_SERIAL
- Acrescente a declaração do método void Serialize( CArchive &ar )
- Na implementação da classe CNo
- Acrescente a linha IMPLEMENT_SERIAL
Implemente o método Serialize
- Alterações na classe CEditorGrafosDoc
- Alterar o 1º parâmetro do class Template CTypedPtrList para CObjList
- Exemplo : CTypedPtrList<CObList,CNo*> m_ListaNos
- Acrescentar código ao método Serialize da classe CEditorGrafosDoc
- tem de mandar serializar os dados do documento
- as colecções do MFC têm capacidade de serialização
- Alterar a extensão do documento para .grf
- Editar a string table ( resources ), e na entrada IDR_MAINFRAME, a seguir ao 4º \n acrescentar .grf
- Redefinir o método virtual DeleteContents da class CEditorGrafosDoc
- DeleteContents serve para limpar os dados do documento, sendo chamado automaticamente nas operações File/New e File/Open
- Utilize o Class Wizard para gerar o esqueleto do método
- Transferir a destruição dos objectos dinâmicos do destructor para o método DeleteContents
Limpar a lista dos arcos com o método RemoveAll ( caso a sua lista de arcos seja uma lista de objectos e não de ponteiros )
- Alterações na classe CEditorGrafosView
- Redefinir o método virtual OnInitialUpdate da class CEditorGrafosView
- OnInitialUpdate serve para inicializar as variáveis da View, sendo chamado automaticamente nas operações File/New e File/Open
- Utilize o Class Wizard para gerar o esqueleto do método
Transferir o código que está no construtor da View para OnInitialUpdate
- Execute o programa após estas alterações . Se os passos anteriores tiverem sido bem implementados, pode criar novos documentos, gravar e abrir documentos.
- Bug : Quando se abre um documento anteriormente gravado, só aparecem os nós. Que é feito dos arcos ?
- Pistas :
- É também necessário serializar os objectos da classe CArco
- Se analisar bem o problema, chegará à conclusão que serializar os arcos implica um pouco mais de trabalho :
- cada arco possui dois ponteiros para nós que já existem
- gravar/ler endereços de memória não resulta
- Pode criar um método na classe CEditorGrafosDoc para gravar no arquivo a informação relevante acerca dos arcos. Neste contexto, qual será a informação relevante ?
Pode criar um método na classe CEditorGrafosDoc para ler aquilo que gravou dos arcos e reconstruir a lista dos arcos
- Execute o programa após estas alterações. Se os passos anteriores tiverem sido bem implementados, pode criar novos documentos, gravar e abrir documentos.
Com os conhecimentos adquiridos nesta etapa, resolva os possíveis pequenos bugs ainda existentes
- Finalmente
- para quando alterar os dados de um documento, ao fechá-lo ou ao sair do programa, lhe aparecer uma message box a avisá-lo se pretende guardar as alterações
- utilize o método SetModifiedFlag sempre que alterar os dados do documento
- Solução só disponível no final do prazo de entrega do trabalho.
Projecto : EditorGrafos ( versão 4 )Tipo : MFC AppWizard( exe ) SDI Document Zip file com o projecto :