Laboratório de programação 2º Trabalho

Documentos relacionados
O AMBIENTE DE TRABALHO... 2 CRIAR, ABRIR E GUARDAR DOCUMENTOS... 6 EDIÇÃO DE DOCUMENTOS... 7 FORMATAÇÃO DE TEXTO Manual de Word INTRODUÇÃO...

1 - Ambiente de desenvolvimento

Ambiente de Programação, rastreamento e entrada de dados. MCG114 Programação de Computadores I. Interpretador de Comandos. Interpretador de Comandos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

File: Este menu permite começar novas tabelas de verdade, abrir ficheiros com tabelas, gravar tabelas e imprimir tabelas.

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas

Programação Orientada por Objectos 2010/11. 2º Exame 28 de Junho de 2011

Laboratório de programação II

FORMAÇÃO DE MICROSOFT EXCEL 2010

Microsoft Excel INTRODUÇÃO PARTE 1

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Palavras Reservadas da Linguagem Java

Interfaces POO. Prof. Marcio Delamaro

Windows 95/98/Me/2000

PROGRAMAÇÃO ORIENTADA A OBJETOS JAVA

Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro.

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo

TECLAS PARA FORMATAR CARACTERES E PARÁGRAFOS

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Linguagem de programação Java

Introdução ao AutoCAD Capitulo IV: Comandos de modificação

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

Linguagem de Programação III

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

ÍNDICE PROGRAMÁTICO DA ACÇÃO DE FORMAÇÃO DE DESENHO ASSISTIDO POR COMPUTADOR, AutoCad 2018

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Árvores. Estruturas de Dados. Prof. Vilson Heck Junior

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Orientação a Objetos - Herança

AULA TEÓRICA 11 Tema 7. Introdução ao Microsoft Access (cont.)

PLANIFICAÇÃO ANUAL DE TECNOLOGIAS DE INFORMAÇÃO E COMUNICAÇÃO (10º

4 Conceito de Herança

AutoCAD D Plano de Aula - 24 Aulas (Aulas de 1 Hora)

220 ATALHOS DE TECLADO DO EXCEL

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Conteúdo de Formação

Iniciação à Informática

Estruturas de dados complexas: cell arrays e structures

Trabalhando com Microsoft Word Denise P. Batalha

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Após seleção do arquivo, o programa exibe um diá projeto. Diálogo de propriedades do arquivo Pressionando-se OK, será adicionada uma entrada título, s

SUMÁRIO DESENHANDO A PLANTA BAIXA DO PAVIMENTO TÉRREO. Desenhando Escada Inserindo Blocos Inserindo Hachuras Dimensionando

Usar a Focus 14 Blue e a Focus 40 Blue com o JAWS

Introdução à Programação em C Input / Output

Escola Profissional Agrícola de Lamego Ano Lectivo 2008 / 2009

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Gestão de Base de dados Formulários

Criação de uma aplicação Web ASP.NET MVC 4

Polimorfismo. O que é polimorfismo?

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Introdução à Informática. Aula 06 MS WINDOWS XP MS WORD. Prof. Fábio Nelson

Parte IV Como projetar um layout de página

Familiarização com a ferramenta JavaCC

Universidade Federal do ABC BCM Processamento da Informação Prática Projeto Campo Minado Primeiro Quadrimestre de 2018

Programação 2009/2010 MEEC - MEAer Laboratório 5 Semana de 26 de outubro de 2009

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

Programação Orientada a Objetos

PROGRAMAÇÃO ORIENTADA A OBJETOS I. Prof. Me. Hélio Esperidião

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

FORMAÇÃO DE MICROSOFT WORD Mário de Almeida Pedro, M. Sc. Janeiro 2014

Transcrição:

Laboratório de programação 2º Trabalho Março de 2016

Mini editor de texto: Funcionalidade base: 1 Estrutura de dados para buffer (1ª fase) 2 Editor interativo de ecrân (2ª fase) : edição de múltiplos ficheiros cortar, copiar e colar texto desfazer edições ( undo )

Funcionalidade base

Estrutura Buffer Funcionalidade base Atributos: lista de linhas lógicas (comprimento arbitrário) posição do cursor (linha, coluna) Métodos: inserir um carater apagar um carater mover o cursor obter número de linhas obter a n-ésima linha

Invariantes do Buffer 1 A lista de linhas nunca é vazia há sempre pelo menos uma linha vazia 2 A posição do cursor (row, col) é sempre válida: 0 row < número total de linhas 0 col comprimento da linha do cursor 3 As linhas lógicas não contém mudanças de linha (\n) Todos métodos devem assumir estas condições à entrada e garantir que se continuam verificar à saida.

public class Buffer { private List<StringBuilder> linelist; private int cursorrow, cursorcol; // inicialização public Buffer() {... // inserir carater public void insert(char c) {... // apagar carater public void delete() {... // mover o cursor public void moveprev() {......

Gravar e escrever ficheiros Podemos acrescentar novos métodos à classe Buffer Alternativa: definir uma nova classe FileBuffer que: Atenção: extende a classe Buffer (herança) mantém um caminho para um ficheiro associado mantém o estado modified/unmodified anotações de throws para checked exceptions (I/O) overriding dos métodos modificadores de Buffer

import java.nio.file.path; public class FileBuffer extends Buffer { private Path savepath; // null= não definido private boolean modified; // true= modificado; false= inalterado // gravar public void save() throws IOException {... public void saveas(path path) throws IOException {......

... // abrir public void open(path path) throws IOException {... @Override public void insert(char c) { super.insert(c); modified = true; // marcar modificação // análogo para outros modificadores...

Visualização Funcionalidade base Representar uma vista sobre o Buffer tamanho em carateres (largura, altura) linha lógica da primeira linha Cada linha lógica pode corresponder a várias linhas visuais O número de linhas lógicas visiveis pode ser menor que o de linhas visuais

3 linhas lógicas em 4 linhas visuais

Conversão de coordenadas Implemente um método auxiliar para converter coordenadas lógicas em visuais. Ideia do algoritmo 1 Começar na coluna 0 da primeira linha lógica visível (coordenadas visuais 0,0) 2 Para cada linha lógica: obter o seu comprimento distribuir por linhas visuais (função da largura da janela) avançar coordenadas visuais 3 Repetir até chegar às coordenadas lógicas desejadas

public class BufferView { private Buffer buffer; // ou FileBuffer private int width, height; private int startrow; // linha início... // converter uma posição lógica em visual // * `null' se a posição está fora da janela public Position viewpos(position logical) {... public class Position { // par de coordenadas linha, coluna...

Atualização do Ecrân Podemos desenhar a janela completa a cada modificação Desvantagem: ineficiente, flickering Alternativa melhor: manter uma lista dos índices das linhas lógicas alteradas re-desenhar apenas essas

public class BufferView {... private List<Integer> modifiedlines; // linhas alteradas public void redraw() { for (Integer line : modifiedlines) {... // desenhar a linha modifiedlines.clear(); // feito

Atualização de Ecrân (2) Não esquecer: acrescentar índices à lista sempre que há modificações! A ordem dos índices não é importante e não há repetidos Em vez de uma lista pode usar um conjunto

Copiar, Cortar e Colar Três fases: 1 marcar o início do texto (e.g. Ctrl-space); 2 copiar ou cortar (e.g. Ctrl-C ou Ctrl-X); 3 mover o cursor e colar (e.g. Ctrl-V).

Sugestões Funcionalidade base Modificar a classe Buffer: atributos para a marca de início atributo para o clipboard métodos para definir o início, copiar, cortar e colar

public class Buffer {... private int markrow, markcol; // linha e coluna de início private boolean marked; // está marcado? private StringBuilder clipboard; // carateres copiados public void setmark(int line, int col) {... public void unsetmark() {... public void copy() {... public void cut() {... public void paste() {...

Edição de múltiplos ficheiros Fácil se Buffer, FileBuffer e BufferView mantiverem estado localizado (e.g. atributos não static) Cada ficheiro fica associado ao seu BufferView e FileBuffer Sugestões: receber a lista de ficheiros da linha de comandos navegação usando uma lista circular (e.g. Ctrl-B troca para o próximo ficheiro) alternativa: abrir múltiplos terminais do Lanterna (mais trabalho)

Desfazer edições Funcionalidade base Primeira abordagem: fazer cópia de todo o Buffer antes de cada operação manter uma lista dos n últimos Buffer (número de undos permitido) Problemas: necessário copiar todas as sub-estruturas mutáveis (e.g. copiar todos os StringBuilder e não só a lista ligada) ineficiente: obriga a copiar todo o texto por cada modificação

Desfazer edições Funcionalidade base Segunda abordagem: uma estrutura de dados para representar operações de edições: inserir um carater, apagar um carater,... mantém informação necessária para fazer ou desfazer a operação guardar a lista das últimas n operações: acrescentamos um novo elemento sempre que fazemos uma edição removemos um elemento quando desfazemos uma edição

Operações de edição public class Edit { enum EditOp { INSERT, DELETE,... ; private EditOp op; private int cursorrow, cursorcol; // posição do cursor private char c; // outros argumentos necessários...

Desfazer edições Funcionalidade base public class Buffer { private List<Edit> undolist; // últimas edições efetuadas... // desfazer uma operação private void undo(edit ed) {... // desfazer a última operação public void undo() {... /* FALTA: modificar métodos insert e delete para acrescentar operações à undolist */