diff --git a/_config.yml b/_config.yml index 3710522..379d102 100644 --- a/_config.yml +++ b/_config.yml @@ -28,6 +28,7 @@ github_username: andrelanna # Build settings markdown: kramdown +#markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true) theme: jekyll-theme-minimal gems: - jekyll-feed diff --git a/_layouts/default.html b/_layouts/default.html index 98c9945..3bc2154 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -10,6 +10,9 @@ +
diff --git a/lectures/das/Caderno_de_Formulas_Selic.pdf b/lectures/das/Caderno_de_Formulas_Selic.pdf new file mode 100644 index 0000000..693c0e6 Binary files /dev/null and b/lectures/das/Caderno_de_Formulas_Selic.pdf differ diff --git a/lectures/das/Catalogo_Refatoracao_Organizando_Dados.pdf b/lectures/das/Catalogo_Refatoracao_Organizando_Dados.pdf new file mode 100644 index 0000000..c368486 Binary files /dev/null and b/lectures/das/Catalogo_Refatoracao_Organizando_Dados.pdf differ diff --git a/lectures/das/Catalogo_Refatoracao_Simplificando_Expressoes_Condicionais.pdf b/lectures/das/Catalogo_Refatoracao_Simplificando_Expressoes_Condicionais.pdf new file mode 100644 index 0000000..08ca486 Binary files /dev/null and b/lectures/das/Catalogo_Refatoracao_Simplificando_Expressoes_Condicionais.pdf differ diff --git a/lectures/das/Catalogo_Refatoracao_movendo_caracteristicas.pdf b/lectures/das/Catalogo_Refatoracao_movendo_caracteristicas.pdf new file mode 100644 index 0000000..5961505 Binary files /dev/null and b/lectures/das/Catalogo_Refatoracao_movendo_caracteristicas.pdf differ diff --git a/lectures/das/enunciadoTDD.md b/lectures/das/enunciadoTDD.md new file mode 100644 index 0000000..700bd95 --- /dev/null +++ b/lectures/das/enunciadoTDD.md @@ -0,0 +1,26 @@ +--- +title: Atividade extra-classe - TDD +layout: default +--- + +### UnB - Universidade de Brasilia +### FGA - Faculdade do Gama +### DAS - Desenvolvimento Avançado de Software +------ + +Atividade extra-classe em substituição à aula de 19/05/2017. +**Data de entrega:** 22/05/2017, 23:59:59. +Entrega via GitHub. + +**Exercício:** Implementar utilizando TDD, as fórmulas das seções 3 a 7 do [caderno de fórmulas do Tesouro Nacional][caderno]. Os requisitos expressos no caderno deverão ser atendidos, principalmente aqueles que especificam a precisão dos valores utilizados pelos cálculos. + +Ao menos uma vez apresente através de commits a seguinte seqüência: + +escrever teste --c--> escrever funcão --c--> falsificar retorno --c--> escrever teste --c--> alterar função --c--> aplicar triangulação --c--> refatorar (se for o caso). + +**Legenda:** --c--> representa um commit + + + + +[caderno]:Caderno_de_Formulas_Selic.pdf diff --git a/lectures/das/exercicioTDD.tar.gz b/lectures/das/exercicioTDD.tar.gz new file mode 100644 index 0000000..80f0915 Binary files /dev/null and b/lectures/das/exercicioTDD.tar.gz differ diff --git a/lectures/das/plano_2017_1.md b/lectures/das/plano_2017_1.md index 3cf6bc0..087f53d 100644 --- a/lectures/das/plano_2017_1.md +++ b/lectures/das/plano_2017_1.md @@ -42,45 +42,46 @@ Nota final = (P1 * 2.0 + T1 * 2.0 + P2.0 * 2.0 + T2.0 * 2.0 + P3 * 2.0)/10 #### Cronograma da disciplina -|Aula no.|Data |Tópico | Atividade | Material | -|--------|---------|-----------------------------------------------------------------------------------------------------------|-------------|-----------------------------| -|1 |8-mar-17 |Apresentação da disciplina | | | -|2 |10-mar-17|~~Dedetização FGA~~ | | | -|3 |15-mar-17|~~Paralização~~ | | | -|4 |17-mar-17|Revisão framework xUnit: projeto estrutural do framework, asserções, casos de teste, suítes de testes. | | Framework xUnit | -|5 |22-mar-17|Revisão framework xUnit: testes parametrizados. | Atividade 1 | Testes parametrizados. | -|6 |24-mar-17|Introducao a refatoração / princípios de refatoracao | |[sl1][sl1] [sl2][sl2] | -|7 |29-mar-17|Oportunidades em refatoração (maus-cheiros de código) / grupos de refatoração. | |[sl3][sl3] | -|8 |31-mar-17|Composição de métodos. | |[cat1][cat1] | -|9 |5-abr-17 |Movendo características entre objetos. | | | -|10 |7-abr-17 |Organizando dados. | | | -|11 |12-abr-17|Simplificando expressões condicionais. | | | -|12 |14-abr-17|FERIADO - Sexta-feira da Paixão | | | -|13 |19-abr-17|Fazendo as chamadas de métodos mais simples. | | | -|14 |21-abr-17|FERIADO - Tiradentes | | | -|15 |26-abr-17|Lidando com generalização. | | | -|16 |28-abr-17|**Avaliação 1.** | | | -|17 |3-mai-17 |Introdução ao desenvolvimento orientado a testes; TDD *vs.* teste tradicional. | | | -|18 |5-mai-17 |Conduzindo um desenvolvimento orientado a testes. | | | -|19 |10-mai-17|Padrões para TDD: red bar patterns, testing patterns, green patterns. | | | -|20 |12-mai-17|Padrões para TDD: red bar patterns, testing patterns, green patterns. | | | -|21 |17-mai-17|Padrões para TDD: xUnit patterns, Design Patterns, Refactoring, Mastering TDD. | | | -|22 |19-mai-17|Padrões para TDD: xUnit patterns, Desing Patterns, Refactoring, Mastering TDD. | | | -|23 |24-mai-17|Conclusões sobre TDD. | | | -|24 |26-mai-17|**Avaliação 2.** | | | -|25 |31-mai-17|Introdução ao reuso de software, técnicas de reuso de software. | | | -|26 |2-jun-17 |Frameworks de componentes. | | | -|27 |7-jun-17 |Taxonomia e modelo de componentes. | | | -|28 |9-jun-17 |Detalhamento de um framework horizontal. | | | -|29 |14-jun-17|Construção de um framework de componentes. | | | -|30 |16-jun-17|*Atividade complementar - provavelmente.* | | | -|31 |21-jun-17|*Atividade complementar - provavelmente.* | | | -|32 |23-jun-17|Introdução a linhas de produto de software. | | | -|33 |28-jun-17|Introdução a linhas de produto de software. | | | -|34 |30-jun-17|Avaliação 3 | | | -|35 |5-jul-17 |Entrega / revisão de menção final | | | -|36 |7-jul-17 |Entrega / revisão de menção final | | | - +|Aula no.|Data |Tópico | Atividade | Material | +|--------|---------|-----------------------------------------------------------------------------------------------------------|-------------|----------------------------------------------------------------------| +|1 |8-mar-17 |Apresentação da disciplina | | | +|2 |10-mar-17|~~Dedetização FGA~~ | | | +|3 |15-mar-17|~~Paralização~~ | | | +|4 |17-mar-17|Revisão framework xUnit: projeto estrutural do framework, asserções, casos de teste, suítes de testes. | | Framework xUnit | +|5 |22-mar-17|Revisão framework xUnit: testes parametrizados. | Atividade 1 | Testes parametrizados. | +|6 |24-mar-17|Introducao a refatoração / princípios de refatoracao | |[sl1][sl1] [sl2][sl2] | +|7 |29-mar-17|Oportunidades em refatoração (maus-cheiros de código) / grupos de refatoração. | |[sl3][sl3] | +|8 |31-mar-17|Composição de métodos. | |[cat1][cat1] | +|9 |5-abr-17 |Movendo características entre objetos. | |[cat2][cat2] | +|10 |7-abr-17 |Organizando dados. | |[cat3][cat3] | +|11 |12-abr-17|Simplificando expressões condicionais. | |[cat4][cat4] | +|12 |14-abr-17|FERIADO - Sexta-feira da Paixão | | | +|13 |19-abr-17|Fazendo as chamadas de métodos mais simples. | | | +|14 |21-abr-17|FERIADO - Tiradentes | | | +|15 |26-abr-17|Lidando com generalização. | | | +|16 |28-abr-17|~~**Avaliação 1.** / [Trabalho 1][trabalho1]~~ | | | +|16 |03-mai-17|**Avaliação 1.** / [Trabalho 1][trabalho1] | | | +|17 |3-mai-17 |Introdução ao desenvolvimento orientado a testes; TDD *vs.* teste tradicional. | | | +|18 |5-mai-17 |Conduzindo um desenvolvimento orientado a testes. | | | +|19 |10-mai-17|Padrões para TDD: red bar patterns, testing patterns, green patterns. | | [cadFormTesDireto][cadFormTesDireto] | +|20 |12-mai-17|Padrões para TDD: red bar patterns, testing patterns, green patterns. | | | +|21 |17-mai-17|Padrões para TDD: xUnit patterns, Design Patterns, Refactoring, Mastering TDD. | | | +|22 |19-mai-17|~~Padrões para TDD: xUnit patterns, Desing Patterns, Refactoring, Mastering TDD.~~ Entrega exercicio TDD | | [Enunciado atividade TDD][enunciadoTDD]|[exemploTDD][exemploTDD] | +|23 |24-mai-17|Conclusões sobre TDD. | | | +|24 |26-mai-17|**Avaliação 2.** | | | +|25 |31-mai-17|Introdução ao reuso de software, técnicas de reuso de software. | | | +|26 |2-jun-17 |Frameworks de componentes. | | | +|27 |7-jun-17 |Taxonomia e modelo de componentes. | | | +|28 |9-jun-17 |Detalhamento de um framework horizontal. | | | +|29 |14-jun-17|Construção de um framework de componentes. | | | +|30 |16-jun-17|*Atividade complementar - provavelmente.* | | | +|31 |21-jun-17|*Atividade complementar - provavelmente.* | | | +|32 |23-jun-17|Introdução a linhas de produto de software. | | | +|33 |28-jun-17|Introdução a linhas de produto de software. | | | +|34 |30-jun-17|Avaliação 3 | | | +|35 |5-jul-17 |Entrega / revisão de menção final | | | +|36 |7-jul-17 |Entrega / revisão de menção final | | | + ### Bibliografia Básica : @@ -130,6 +131,12 @@ Meszaros, G., xUnit Test Patterns: Refactoring Test Code, Addison-Wesley, [sl2]: /lectures/das/sl2.pdf [sl3]: /lectures/das/sl3-oportRefatoracao.pdf [cat1]: /lectures/das/Catalogo_Refatoracao_Compondo_metodos.pdf - +[cat2]: /lectures/das/Catalogo_Refatoracao_movendo_caracteristicas.pdf +[cat3]: /lectures/das/Catalogo_Refatoracao_Organizando_Dados.pdf +[cat4]: /lectures/das/Catalogo_Refatoracao_Simplificando_Expressoes_Condicionais.pdf +[trabalho1]: trabalho1.md +[cadFormTesDireto]: Caderno_de_Formulas_Selic.pdf +[exemploTDD]: exercicioTDD.tar.gz +[enunciadoTDD]: enunciadoTDD.md ---- *Última atualização: 29 de março de 2017.* diff --git a/lectures/das/trabalho1.md b/lectures/das/trabalho1.md new file mode 100644 index 0000000..4dfc99a --- /dev/null +++ b/lectures/das/trabalho1.md @@ -0,0 +1,94 @@ +--- +title: Trabalho em grupo 1 +layout: default +--- +{% assign deadline = "23:59:59hs de 3 de maio de 2017" %} + +**UnB - Universidade de Brasilia** + +**FGA - Faculdade do Gama** + +**DAS - Desenvolvimento Avançado de Software** + +---- + + +## Trabalho em grupo +#### Horário limite para entrega: {{ deadline }}. + +#### Sobre o trabalho: +Esse trabalho visa desenvolver as habilidades dos alunos em aplicar as operações +de refatoração em um projeto em Java. As operações de Refatoração a serem +aplicadas serão aquelas vistas até então em sala de aula. Serão consideradas, +para efeito de avaliação, apenas as operações de refatoração que não estão +automatizadas em ambientes de desenvolvimento. + +O projeto que será o sujeito das operações de refatoração é a ferramenta +Reana-SPL, cujo objetivo é realizar a análise de confiabilidade de linhas de +produto de software. Para realizar as refatorações cada aluno deverá realizar um +*fork* do seguinte repositório do GitHub: [andrelanna/reana-spl][repoOriginal] + +A cada conjunto de operações de refatoração aplicadas uma versão do repositório +deverá ser gerada e nomeada através de uma tag. O conjunto de refatorações de +cada versão deverá compreender as operações de apenas um dos grupos do catálogo. +No total serão geradas 4 versões do repositório conforme a tabela apresentada +abaixo: + +| Ordem | Grupo de operações | Versão de entrada | Versão de saída | +|:-----:|:-------------------------------------:|:-----------------:|:---------------:| +| 1 | Composição de métodos | V0 (rep. original)| V1 | +| 2 | Movendo características entre objetos | V1 | V2 | +| 3 | Organizando dados | V2 | V3 | +| 4 | Simplificando expressoes condicionais | V3 | V4 | + +As tags de cada versão do repositório deverão ser nomeadas conforme os valores +da coluna "Versão de saída" apresentados na tabela acima. + +#### Grupos de trabalho: +Os grupos de trabalhos devem ter 4 ou 5 integrantes. Cada componente do grupo +deverá contribuir com a evolução do projeto ao menos uma vez de modo que cada +integrade do grupo deve ser responsável por pelo menos um *commit*. Cada commit +deverá conter em sua mensagem um breve relato das alterações realizadas com as +seguintes informações: +* "mau-cheiro" de código identificado +* operação de refatoração aplicada +* classe / atributo / método impactado +* resultado da refatoração no projeto da aplicação + - classe nova criada / extinta? + - atributo / método movido? + - criação de novos elementos em uma classe? + - associações entre classes foram criadas ou extintas? + - etc... + +Cada grupo de trabalho ficará encarregado de realizar suas refatorações em duas +suítes de teste, de modo que cada suíte de testes indicará os pontos que deverão +ser refatorados. A distribuição de suítes de teste para os grupos está descrita +pela tabela abaixo: + +| Grupo no. | Integrantes | Suite de testes | +|:---------:|:--------------------------------------------------------------------------:|:-----------------------------:| +| 1 | Jonathan M., Jonathan Rufino, Laércio Jr., Lucas Couto, Phelipe Wener | FDTMCTest, RDGNodeTest | +| 2 | Arthur Temporim, Jéssica Cristina, João Paulo Busche, Marcelo Ferreira | FDTMCTest, FDTMCToParamTest | +| 3 | Luís Filipe Resende, Felipe César, Laura, Gabriel Araújo, Pedro Salles | RDGNodeTest, FDTMCToParamTest | +| 4 | Hugo, Dandara, Edson Gomes, Victor Navarro, Matheus Miranda Lacerda | FDTMCTest, RDGNodeTest | +| 5 | Renata, João, Mateus, Sabryna, Vitor Barbosa | FDTMCTest, FDTMCToParamTest | +| 6 | Igor, Izabela, Lucas, Matheus, Paulo | RDGNodeTest, FDTMCToParamTest | + +#### Entrega do trabalho + +O trabalho deverá ser entregue através de **um único para todo o grupo** +*pull-request* no [repositório original][repoOriginal] até as {{ deadline }}. +**Trabalhos que forem submetidos fora desse prazo não serão aceitos em hipótese +alguma**, portanto recomenda-se não deixar a entrega dos trabalhos para o último +dia. + +#### Em caso de dúvidas... + +Caso os grupos tenham dúvidas quanto à ferramenta Reana-SPL, procurem o +professor em sua sala (UED-14) no horário de atendimento da turma ou nos +instantes finais das aulas. + +---- +*Última atualização: 13 de abril de 2017* + +[repoOriginal]: https://github.com/andrelanna/reana-spl diff --git a/lectures/oo/BorderLAyout.tar.gz b/lectures/oo/BorderLAyout.tar.gz new file mode 100644 index 0000000..7b8dce2 Binary files /dev/null and b/lectures/oo/BorderLAyout.tar.gz differ diff --git a/lectures/oo/BoxLayout.tar.gz b/lectures/oo/BoxLayout.tar.gz new file mode 100644 index 0000000..aae0820 Binary files /dev/null and b/lectures/oo/BoxLayout.tar.gz differ diff --git a/lectures/oo/JButton.tar.gz b/lectures/oo/JButton.tar.gz new file mode 100644 index 0000000..365c635 Binary files /dev/null and b/lectures/oo/JButton.tar.gz differ diff --git a/lectures/oo/JCheckBox.tar.gz b/lectures/oo/JCheckBox.tar.gz new file mode 100644 index 0000000..d92c206 Binary files /dev/null and b/lectures/oo/JCheckBox.tar.gz differ diff --git a/lectures/oo/JComboBox.tar.gz b/lectures/oo/JComboBox.tar.gz new file mode 100644 index 0000000..758e100 Binary files /dev/null and b/lectures/oo/JComboBox.tar.gz differ diff --git a/lectures/oo/JFrame.tar.gz b/lectures/oo/JFrame.tar.gz new file mode 100644 index 0000000..b5b8492 Binary files /dev/null and b/lectures/oo/JFrame.tar.gz differ diff --git a/lectures/oo/JLabel.tar.gz b/lectures/oo/JLabel.tar.gz new file mode 100644 index 0000000..d3c74b5 Binary files /dev/null and b/lectures/oo/JLabel.tar.gz differ diff --git a/lectures/oo/JTextField.tar.gz b/lectures/oo/JTextField.tar.gz new file mode 100644 index 0000000..4156ed3 Binary files /dev/null and b/lectures/oo/JTextField.tar.gz differ diff --git a/lectures/oo/exemploJButton.tar.gz b/lectures/oo/exemploJButton.tar.gz new file mode 100644 index 0000000..46775a0 Binary files /dev/null and b/lectures/oo/exemploJButton.tar.gz differ diff --git a/lectures/oo/exemploJLabel.tar.gz b/lectures/oo/exemploJLabel.tar.gz new file mode 100644 index 0000000..0acbe5c Binary files /dev/null and b/lectures/oo/exemploJLabel.tar.gz differ diff --git a/lectures/oo/exemploJTextField.tar.gz b/lectures/oo/exemploJTextField.tar.gz new file mode 100644 index 0000000..5b36ea4 Binary files /dev/null and b/lectures/oo/exemploJTextField.tar.gz differ diff --git a/lectures/oo/exercicio2/arquivoAdicionado.png b/lectures/oo/exercicio2/arquivoAdicionado.png new file mode 100644 index 0000000..b4e7d6a Binary files /dev/null and b/lectures/oo/exercicio2/arquivoAdicionado.png differ diff --git a/lectures/oo/exercicio2/arquivoModificado.png b/lectures/oo/exercicio2/arquivoModificado.png new file mode 100644 index 0000000..dd7fe0b Binary files /dev/null and b/lectures/oo/exercicio2/arquivoModificado.png differ diff --git a/lectures/oo/exercicio2/atividade2.md b/lectures/oo/exercicio2/atividade2.md index 2fd9bf8..857bda4 100644 --- a/lectures/oo/exercicio2/atividade2.md +++ b/lectures/oo/exercicio2/atividade2.md @@ -8,7 +8,8 @@ layout: default ### OO - Orientação por objetos ------ -Atividade para realizar em dupla e entregar via GitHub. Uma entrega por dupla. +Atividade para realizar em dupla e entregar via [GitHub][github]. Uma entrega por dupla. As entregas deverão ser feitas através de *pull-requests* no repositório principal, sendo um pull para cada questão. Instruções de como realizar a entrega estão disponíveis **[aqui][instrucoesSubmissao]**. + Prazo para entrega: ~~4/4/2017~~ 10/04/2017, 23:59:59. **Questão 1:** Os termos abaixo estão relacionados ao paradigma de *Orientação por Objetos*. Defina cada um dos termos com base no livro-texto (Eck, David J. Introduction to Programming Using Java, 6th ed. 2011). @@ -22,6 +23,7 @@ Prazo para entrega: ~~4/4/2017~~ 10/04/2017, 23:59:59. * estado de um objeto * retenção de estado +Classe é a estrutura definida pelo programador, contendo atributos e métodos (comportamento) comuns a um conjunto de objetos. **Questão 2:** Julgue as seguintes frases como verdadeiras ou falsas e explique o motivo delas estarem certas ou erradas. Nos casos em que julgar uma sentença como errada, altere-a de modo a corrigi-la. @@ -130,16 +132,181 @@ System.out.println(q3 == q2); **Questão 7:** +Seja o seguinte código em Java. Apresente o que será impresso ao final da execução do método **main** definido na classe **Principal**. + +{% highlight java %} +package questao7; +public class Principal { + public static void main(String[] args) { + Curso c1, c2; + Aluno a1, a2, a3; + c1 = new Curso(1, "Engenharia de Software", 240); + c2 = new Curso(2, "Engenharia Eletrônica", 257); + + a1 = new Aluno("Andre", c1, 13, 23, 02, 1983); + a2 = new Aluno("Maria", c2, 5, 27, 5, 1994); + a3 = new Aluno("Junior", c1, 70, 16, 11, 1995); + + System.out.println(a1.obterDetalhes()); + System.out.println(a2.obterDetalhes()); + System.out.println(a3.obterDetalhes()); + a3 = a2; + System.out.println(a1 == a2); + System.out.println(a1 == a3); + System.out.println(a2 == a3); + } +} +{% endhighlight %} + + +{% highlight java %} +package questao7; +public class Aluno { + String nome; + Curso curso; + int matricula; + int diaNascimento, + mesNascimento, + anoNascimento; + + public Aluno(String nom, Curso cur, int mat, int dNasc, int mNasc, int aNasc) { + nome = nom; + curso = cur; + matricula = mat; + diaNascimento = dNasc; + mesNascimento = mNasc; + anoNascimento = aNasc; + } + + public String obterDetalhes() { + String resposta = ""; + resposta += "Nome: " + nome + '\n'; + resposta += "Curso: " + curso + '\n'; + resposta += "Data de nascimento: " + diaNascimento + '/' + + mesNascimento + '/' + + anoNascimento; + return resposta; + } + + protected void finalize() { + System.out.println("Esse objeto ALUNO vai ser destruido."); + System.out.println("Detalhes do objeto: " + '\n'); + System.out.println(obterDetalhes()); + } +} +{% endhighlight %} + +{% highlight java %} +package questao7; +public class Curso { + int codigo; + String nomeCurso; + int cargaHoraria; + + Curso (int cod, String nome, int ch) { + codigo = cod; + nomeCurso = nome; + cargaHoraria = ch; + } + + public String obterDetalhes() { + String resposta = ""; + resposta += "Nome do curso: " + nomeCurso + '\n'; + resposta += "Codigo: " + codigo + '\n'; + resposta += "Carga horaria: " + cargaHoraria; + return resposta; + } + + protected void finalize() { + System.out.println("Esse objeto CURSO vai ser destruido."); + System.out.println("Detalhes do objeto: " + '\n'); + System.out.println(obterDetalhes()); + } +} +{% endhighlight %} + + +**Questão 8:** Considerando as classes **Aluno** e **Curso** definidas na questão 7, o que será impresso quando o *garbagge collector* de Java executar momentos antes do método **main()** da classe abaixo terminar sua execução? + +{% highlight java %} +package questao8; +public class Principal { + public static void main(String[] args) { + Curso c1, c2; + Aluno a1, a2, a3; + + c1 = new Curso(1, "Engenharia de Software", 240); + c2 = new Curso(2, "Engenharia Eletrônica", 257); + + a1 = new Aluno("Andre", c1, 13, 23, 02, 1983); + a2 = new Aluno("Maria", c2, 5, 27, 5, 1994); + a3 = new Aluno("Junior", c1, 70, 16, 11, 1995); + + a3 = a2; + a2 = null; + c2 = c1; + c1 = null; + c1 = a3.curso; + a3 = a1; + a1 = nul; + + //---> GARBAGGE COLLECTOR executa nesse instante + } +} +{% endhighlight %} + + +**Questão 9:** as cinco instruções listadas abaixo estão definidas no método **main()** da classe **Principal** e apresentam erros em suas sintaxes. Apresente quais são os erros, justifique-os e altere as instruções de modo a consertá-los. Considere os códigos das classes **Aluno** e **Turma** como sendo os códigos apresentados na questão 7. + +{% highlight java %} +package questao9; +public class Principal { + public static void main(String[] args) { + Curso c1, c2; + Aluno a1, a2, a3; + + c2 = new Curso(2, "Engenharia Eletrônica", 257); + + a1 = new Aluno("Andre", c1, 13, 23, 02, 1983); + a2 = new Aluno("Maria", c2, 5, 27, 5, 1994); + + Curso.obterDetalhes(); + c2.matricula = 20; + Curso.nome = "Ciência da computação"; + c1.codigo = 21; + Aluno.obterDetalhes(); + a3.cargaHoraria() = 220; + } +} +{% endhighlight %} +**Questão 10:** sabe-se que um curso em é formado por um conjunto de disciplinas, para as quais são definidas as seguintes características: + +* um código da disciplina; +* um nome; +* uma carga horária, e +* um departamento responsável por lecionar tal disciplina. + +Sabe-se ainda que para cada disciplina são criadas diversas turmas. Cada turma é descrita através das seguintes características: +* um código da turma; +* um número total de vagas; +* um número de vagas livres; +* um número de vagas ocupadas, e +* dias/horarios em que ela ocorre. -**Questão 8:** +Além disso, é necessário que os alunos se matriculem nessas turmas. Tal procedimento consiste em associar os alunos em uma turma específica (caso haja vagas) e aumentar o número de vagas ocupadas. +Considerando o contexto formado pelas classes **Aluno** e **Curso** (vide implementação na questão 7) e a descrição acima, pede-se: -**Questão 9:** +a) em Java, crie uma classe que seja capaz de representar as características e o comportamento de uma turma. +b) Crie as seguintes turmas: + * turma 1 de Orientação por objetos, com 46 vagas livres, que ocorre todas as 4as e 6as feiras, das 12:00 às 16:00 horas; + * turma 1 de Desenvolvimento Avançado de software, com 30 vagas livres, que ocorre todas as 4as. e 6as. feiras, das 16:00 às 18:00 horas. -**Questão 10:** +c) associe ambas turmas recem-criadas ao curso de Engenharia de Software, +d) matricule Andre e Maria na turma de orientação por objetos, e Junior na turma de desenvolvimento avançado de software. ## Referências: \[[OPEN ACCESS][eckDavid]\] Eck, David J. Introduction to Programming Using Java, 6th ed. 2011 @@ -147,10 +314,12 @@ System.out.println(q3 == q2); --- -*Última modificação: 3 de abril de 2017, 22:52.* +*Última modificação: 7 de abril de 2017, 05:12.* [eckDavid]: http://math.hws.edu/javanotes/ +[github]: http://www.github.com/ +[instrucoesSubmissao]: ./instrucoes.md diff --git a/lectures/oo/exercicio2/buscaRepositorio.png b/lectures/oo/exercicio2/buscaRepositorio.png new file mode 100644 index 0000000..5acf5b3 Binary files /dev/null and b/lectures/oo/exercicio2/buscaRepositorio.png differ diff --git a/lectures/oo/exercicio2/conteudoRepositorio.png b/lectures/oo/exercicio2/conteudoRepositorio.png new file mode 100644 index 0000000..6d3a639 Binary files /dev/null and b/lectures/oo/exercicio2/conteudoRepositorio.png differ diff --git a/lectures/oo/exercicio2/instrucoes.md b/lectures/oo/exercicio2/instrucoes.md new file mode 100644 index 0000000..1c7d48c --- /dev/null +++ b/lectures/oo/exercicio2/instrucoes.md @@ -0,0 +1,129 @@ +--- +title: Exercício prático +layout: default +--- + +A entrega dos exercícios de fixação será realizada através de *pull-requests* no [repositório original][repositorioOriginal] do [GitHub][github]. + +Cada dupla deverá enviar sua resposta como uma alteração no arquivo **atividade2.md**, de modo que as respostas deverão ser escritas logo abaixo o enunciado de cada questão. + +--- + +### Criando um **Fork** do repositório original + +A primeira coisa a se fazer para entrega das questões é realizar um **fork** no repositório original. Em resumo, um **fork** permite que você crie uma versão do repositório original em sua conta Github e evolua-o independentemente. + +Para criar o fork do repositório em sua conta, acesse sua conta no Github e pesquise pelo repositorio **andrelanna**. + +![buscaRepositorio][buscaRepositorio] + +Em seguida, acesse o repositório **andrelanna/andrelanna.github.io**. Na tela seguinte você verá o conteúdo do repositório + +![conteudoRepositorio][conteudoRepositorio] + +No canto superior direito clique no ícone **Fork** para criar uma versão do repositório original em sua conta do GitHub. Ao final do processo de fork, você terá sua própria versão do repositório **andrelanna/andrelanna.github.io** para trabalhar e evoluir. + +--- + +### Respondendo as questões do exercícios. + +Para responder as questões dos exercícios, os alunos deverão editar o arquivo **/lectures/oo/exercicio2/atividade2.md**. O conteúdo desse arquivo está descrito através da linguagem [Markdown][markdown], cuja proposta é facilitar a geração de conteúdo estático (arquivos HTML) ao prover um conjunto de instruções simplificado. Um resumo das instruções MD pode ser encontrado [aqui][markdownCheatsheet]. + +Portanto para cada questão a ser respondido, a dupla deverá realizar os seguintes passos (que serão detalhados em seguida): + +1) alterar o arquivo **atividade2.md** de modo a incluir as respostas das questões. + +2) adicionar as mudanças em um *commit* e enviá-los ao github. + +3) fazer um *pull-request* para o repositório original. + +Para permitir a identificação da dupla, pede-se que a cada questão os alunos sejam identificados da seguinte forma a cada commit: + +*matricula aluno 1 - nome completo do aluno 1* + +*matricula aluno 2 - nome completo do aluno 2* + + +A seguir os passos 1, 2, e 3 listados acima serão descritos detalhadamente. + +**Passo 1 - Alterar o arquivo atividade2.md** + +Utilizando o editor de sua preferência, altere o arquivo *atividade2.md* de modo a adicionar a resposta após o enunciado da questão. + +Salve o arquivo texto. + + +**Passo 2 - Adicionar as alterações em um commit e enviar ao repositório no Github** + + +Na linha de comando de seu sistema operacional (prompt de comando ou PowerShell em Windows, Terminal em Linux ou MacOS), acesse a pasta em que se encontra o arquivo *atividade2.md*. + +Para ver as alterações que foram realizadas no diretório, digite o seguinte comando: + +{% highlight PowerShell %} +git status +{% endhighlight %} + +Dentre a lista dos arquivos não-rastreados (*untracked files*) ou modificados deverá constar o arquivo *atividade2.md*, conforme mostra a imagem abaixo: + +![arquivoModificado][arquivoModificado] + +É necessário que você adicione-o ao conjunto de mudanças (que posteriormente será enviado ao GitHub). Para adicioná-lo, execute o seguinte comando na linha de comando de seu SO. + +{% highlight PowerShell %} +git add atividade2.md +{% endhighlight%} + +Certifique-se de que o arquivo foi adicionado ao conjunto de mudanças. Para isso, execute novamente o comando: + +{% highlight PowerShell %} +git status +{% endhighlight %} + +O resultado da execução desse comando deve mostrar que o arquivo faz parte do conjunto de mudanças, conforme demonstra a figura abaixo: + +![arquivoAdicionado][arquivoAdicionado] + +Uma vez que os arquivos a serem submetidos já estão adicionados, as alterações devem ser "empacotadas" em um *commit*. Para cada commit é necessário, ao menos, adicionar uma mensagem informando o que o commit contem. A instrução para realizar tal tarefa é + +{% highlight PowerShell %} +git commit -m "mensagem" +{% endhighlight %} + +Para facilitar a identificação dos commits, solicito que os alunos informem na mensagem do commit qual a questão que está sendo submetida. Exemplo: + +{% highlight PowerShell%} +git commit -m "Questao 1." +... +git commit -m "Questao 2." +... +git commit -m "Questao 3." +{% endhighlight%} + +Depois do commit ter sido criado pelas instruções acima é necessário enviá-lo ao **seu** repositório no GitHub. Esse procedimento também é chamado de **push**. Para isso, execute a seguinte instrução na linha de comando de seu SO: + +{% highlight PowerShell %} +git push +{% endhighlight %} + +O resultado da execução desse comando será similar ao apresentado pela figura abaixo: + +![resultadoCommit][resultadoCommit] + + +**Passo 3 - Solicitar a adição de seus commits ao repositório de origem** + + + + + +[repositorioOriginal]: https://github.com/andrelanna/andrelanna.github.io +[github]: https://github.com + +[buscaRepositorio]: buscaRepositorio.png +[conteudoRepositorio]: conteudoRepositorio.png +[markdown]: https://daringfireball.net/projects/markdown/ +[markdownCheatsheet]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet +[arquivoModificado]: arquivoModificado.png +[arquivoAdicionado]: arquivoAdicionado.png +[resultadoCommit]: resultadoCommit.png diff --git a/lectures/oo/exercicio2/resultadoCommit.png b/lectures/oo/exercicio2/resultadoCommit.png new file mode 100644 index 0000000..a6bf103 Binary files /dev/null and b/lectures/oo/exercicio2/resultadoCommit.png differ diff --git a/lectures/oo/exercicio3/atividade3.md b/lectures/oo/exercicio3/atividade3.md new file mode 100644 index 0000000..7eeea01 --- /dev/null +++ b/lectures/oo/exercicio3/atividade3.md @@ -0,0 +1,454 @@ +--- +title: Atividade 2 - Interfaces gráficas em Java Swing +layout: default +--- + +### UnB - Universidade de Brasilia +### FGA - Faculdade do Gama +### OO - Orientação por objetos +------ + +Atividade extra-classe **individual** em substituição à aula de 19/05/2017. +**Data de entrega:** 22/05/2017, 23:59:59. +Entrega via GitHub. +WindowBuilder **não** deve ser utilizado. + + +**Exercício 1:** Crie uma interface gráfica para cálculo de valores presente, futuro, juros e taxa de juros de acordo com a seguinte fórmula: +$$V_{F} = V_{A} \times (1 + i)^{n}$$, em que +* $$V_{F}$$ representa o valor futuro de uma aplicação, +* $$V_{A}$$ representa o valor atual (no momento) da aplicação, +* $$i$$ é a taxa de juros e +* $$n$$ é o tempo da aplicação, em meses. + +O usuário deverá entrar com 3 valores, em campos de texto. O quarto valor deverá ter seu campo de texto vazio e será calculado pela aplicação conforme a fórmula acima. Veja os exemplos na tabela abaixo, em que os valores em negrito representam a resposta da fórmula: + +|$$V_{F}$$ |$$V_{A}$$ |$$i$$ |$$n$$ | +|:-----------:|:-----------:|:--------:|:--------:| +|**R$1100,34**|R$1000,00 |0.80 |12 | +|R$2000,00 |**R$1817,62**|0.80 |12 | +|R$2000,00 | R$1000,00 |**5,95** |12 | +|R$2000,00 | R$1000,00 |0.80 |**87** | + +Resolução: +Classe Principal: +{% highlight java %} + +public class Principal { + + public static void main(String[] args) { + Janela j = new Janela(); + } +} + +{% endhighlight %} + +Classe Janela: +{% highlight java %} + +import java.awt.GridLayout; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; + +public class Janela extends JFrame{ + JLabel lbValorPresente, + lbValorFuturo, + lbTxJuros, + lbTempo, + lbResultado, + txtResultado; + + JButton btnCalcular, + btnLimpar; + + JTextField txtValorPresente, + txtValorFuturo, + txtTxJuros, + txtTempo; + + GridLayout layout = new GridLayout(6,2); + + JPanel painel; + + public Janela(){ + this.setTitle("Calculo de Valor Presente"); + this.setSize(500, 150); + + painel = new JPanel(); + painel.setLayout(layout); + + lbValorPresente = new JLabel("Valor Presente:"); + + txtValorPresente = new JTextField(""); + txtValorPresente.setToolTipText("Valor atual da aplicação"); + + lbValorFuturo = new JLabel("Valor Futuro:"); + + txtValorFuturo = new JTextField(""); + txtValorFuturo.setToolTipText("Valor futuro da aplicação"); + + lbTxJuros = new JLabel("Taxa de Juros:"); + + txtTxJuros = new JTextField(""); + txtTxJuros.setToolTipText("Valor da taxa de juros"); + + lbTempo = new JLabel("Tempo em Meses:"); + + txtTempo = new JTextField(""); + txtTempo.setToolTipText("Tempo da aplicação em meses"); + + lbResultado = new JLabel("Resultado:"); + + txtResultado = new JLabel(""); + + btnCalcular = new JButton("Calcular"); + btnCalcular.addActionListener(new CalcularListener(this)); + + btnLimpar = new JButton("Limpar"); + btnLimpar.addActionListener(new LimparListener(this)); + + painel.add(lbValorPresente); + painel.add(txtValorPresente); + painel.add(lbValorFuturo); + painel.add(txtValorFuturo); + painel.add(lbTxJuros); + painel.add(txtTxJuros); + painel.add(lbTempo); + painel.add(txtTempo); + painel.add(lbResultado); + painel.add(txtResultado); + painel.add(btnCalcular); + painel.add(btnLimpar); + + + + this.add(painel); + this.setVisible(true); + + } + + +} + +{% endhighlight %} + +Classe CalcularListener: +{% highlight java %} + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.DecimalFormat; + +public class CalcularListener implements ActionListener { + + Janela janela; + + public CalcularListener(Janela j){ + janela = j; + } + + public void actionPerformed(ActionEvent arg0) { + String strVazia; + strVazia = ""; + String vf, + vp, + tj, + t; + double nvf, + nvp, + ntj, + nt; + + vf = janela.txtValorFuturo.getText(); + vp = janela.txtValorPresente.getText(); + tj = janela.txtTxJuros.getText(); + t = janela.txtTempo.getText(); + + nvf = vf.equals(strVazia)? 0.0: Double.parseDouble(vf); + nvp = vp.equals(strVazia)? 0.0: Double.parseDouble(vp); + ntj = tj.equals(strVazia)? 0.0: Double.parseDouble(tj); + nt = t.equals(strVazia)? 0.0: Integer.parseInt(t); + ntj/=100; + + DecimalFormat nf = new DecimalFormat("#0.00"); + DecimalFormat nf2 = new DecimalFormat("#0"); + + if(nvf==0.0){ + nvf=nvp*(Math.pow((1+ntj), nt)); + janela.lbResultado.setText("Valor Futuro:"); + janela.txtResultado.setText("R$"+(nf.format(nvf))); + }else if(nvp==0.0){ + nvp=nvf/(Math.pow((1+ntj), nt)); + janela.lbResultado.setText("Valor Presente:"); + janela.txtResultado.setText("R$"+(nf.format(nvp))); + }else if(nt==0.0){ + nt=-(Math.log(nvp/nvf)/Math.log(1+ntj)); + janela.lbResultado.setText("Tempo em Meses:"); + janela.txtResultado.setText(nf2.format(nt)+" Meses"); + }else if(ntj==0.0){ + ntj=Math.pow(nvf/nvp, 1/nt)-1; + janela.lbResultado.setText("Taxa de Juros:"); + janela.txtResultado.setText(nf.format(ntj*100)+"%"); + } + } +} + +{% endhighlight %} + +Classe LimparListener: +{% highlight java %} + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class LimparListener implements ActionListener { + + Janela janela; + + public LimparListener(Janela j){ + janela=j; + } + + public void actionPerformed(ActionEvent arg0) { + janela.lbResultado.setText("Resultado:"); + janela.txtResultado.setText(""); + janela.txtValorPresente.setText(""); + janela.txtValorFuturo.setText(""); + janela.txtTempo.setText(""); + janela.txtTxJuros.setText(""); + + } + +} + +{% endhighlight %} + + + + +**Exercício 2:** Crie uma interface gráfica para cálculo dos valores obtidos ao final de cada mês para uma aplicação mensal de umdeterminado valoor e uma determinada taxa de juros. O cálculo do valor obtido ao final é dado pela seguinte fórmula: + +\\[S_{n}=(1+j) \times \frac{(1+j)^{n}-1}{j} \times p\\] + + +onde: + +* $$S_{n}$$ é o valor obtido ao final, +* $$j$$ é a taxa de juros mensal, +* $$p$$ é o valor de depósito regular e +* $$n$$ é o número de meses. + + +Os valores finais de cada mês deverão ser informados através de objetos JLabel. + +Resolução: +Classe Principal: +{% highlight java %} + +public class Principal { + + public static void main(String[] args) { + Janela j = new Janela(); + + } + +} + +{% endhighlight %} + +Classe Janela: +{% highlight java %} + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; + +public class Janela extends JFrame { + + JLabel lbDepRegular, + lbTempo, + lbTxJuros; + + JTextField txtDepRegular, + txtTempo, + txtTxJuros; + + JButton btnCalcular, + btnLimpar; + + JPanel painel, + painelLbl, + painelTxt; + + GridBagLayout gbLayout; + + public Janela(){ + this.setTitle("Calculo de valor mensal"); + this.setSize(500, 95); + + //definição do layout + painel = new JPanel(); + gbLayout = new GridBagLayout(); + painel.setLayout(gbLayout); + + //instancia dos componentes label, button e textField + lbDepRegular = new JLabel("Valor do deposito regular:"); + + txtDepRegular = new JTextField(""); + txtDepRegular.setToolTipText("Valor do deposito regular"); + + lbTempo = new JLabel("Tempo em Meses:"); + + txtTempo = new JTextField(""); + txtTempo.setToolTipText("Quantidade de meses"); + + lbTxJuros = new JLabel("Taxa de Juros:"); + + txtTxJuros = new JTextField(""); + txtTxJuros.setToolTipText("Valor da taxa de juros mensal"); + + btnCalcular = new JButton("Calcular"); + btnCalcular.addActionListener(new CalcularListener(this)); + + btnLimpar = new JButton("Limpar"); + btnLimpar.addActionListener(new LimparListener(this)); + + //Organização do layout e add dos componentes + GridBagConstraints c = new GridBagConstraints(); + + c.fill = GridBagConstraints.HORIZONTAL; + c.gridx=0; + c.gridy=0; + c.weightx=0.1; + c.weighty=0.1; + painel.add(lbDepRegular, c); + c.gridx=1; + c.ipadx=100; + painel.add(txtDepRegular, c); + c.gridx=0; + c.gridy=1; + painel.add(lbTempo, c); + c.gridx=1; + painel.add(txtTempo, c); + c.gridx=0; + c.gridy=2; + painel.add(lbTxJuros, c); + c.gridx=1; + painel.add(txtTxJuros, c); + c.gridx=0; + c.gridy=3; + painel.add(btnCalcular, c); + c.gridx=1; + painel.add(btnLimpar, c); + + this.add(painel); + this.setVisible(true); + } +} + +{% endhighlight %} + +Classe CalcularListener: +{% highlight java %} + +import java.awt.FlowLayout; +import java.awt.GridBagConstraints; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.DecimalFormat; + +import javax.swing.JLabel; +import javax.swing.JPanel; + +public class CalcularListener implements ActionListener { + + Janela j; + + public CalcularListener(Janela janela){ + j=janela; + } + public void actionPerformed(ActionEvent arg0) { + int numMeses = Integer.parseInt(j.txtTempo.getText()); + double txJuros = Double.parseDouble(j.txtTxJuros.getText()); + txJuros/=100; + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.fill = GridBagConstraints.HORIZONTAL; + + //painel de resultados + JPanel resultPanel = new JPanel(); + resultPanel.setName("ResultPanel"); + resultPanel.setLayout(new GridLayout(numMeses, 2)); + + //labels de resultados + JLabel resultMes; + + + double valFinal = 0; + double depRegular = Double.parseDouble(j.txtDepRegular.getText()); + + //posição na qual sera colocado o painel de resultados + gbc.gridx=0; + gbc.gridy=4; + gbc.gridwidth=1; + + //formatação do numero do resultado + DecimalFormat nf = new DecimalFormat("#0.00"); + + + for(int i=1; i<=numMeses; i++){ + valFinal=(valFinal+depRegular)*(txJuros+1); + resultMes = new JLabel("Valor final do "+i+"º mes = "+nf.format(valFinal)); + resultPanel.add(resultMes); + j.setSize(j.getWidth(), j.getHeight()+15); + } + j.painel.add(resultPanel, gbc); + } +} + +{% endhighlight %} + +Classe LimparListener: +{% highlight java %} + +import java.awt.Component; +import java.awt.GridBagConstraints; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class LimparListener implements ActionListener { + + Janela j; + + public LimparListener(Janela janela){ + j=janela; + } + public void actionPerformed(ActionEvent e) { + + GridBagConstraints c = new GridBagConstraints(); + Component[] component = j.painel.getComponents(); + + component[component.length-1].setVisible(false); + j.painel.remove(component[component.length-1]); + + int t=Integer.parseInt(j.txtTempo.getText()); + j.setSize(j.getWidth(), j.getHeight()-(15*t)); + + j.txtDepRegular.setText(""); + j.txtTempo.setText(""); + j.txtTxJuros.setText(""); + + } + +} + +{% endhighlight %} + diff --git a/lectures/oo/list1.tar.gz b/lectures/oo/list1.tar.gz new file mode 100644 index 0000000..a202698 Binary files /dev/null and b/lectures/oo/list1.tar.gz differ diff --git a/lectures/oo/list2.tar.gz b/lectures/oo/list2.tar.gz new file mode 100644 index 0000000..1f6c309 Binary files /dev/null and b/lectures/oo/list2.tar.gz differ diff --git a/lectures/oo/list3.tar.gz b/lectures/oo/list3.tar.gz new file mode 100644 index 0000000..6346ea9 Binary files /dev/null and b/lectures/oo/list3.tar.gz differ diff --git a/lectures/oo/plano_2017_1.md b/lectures/oo/plano_2017_1.md index 243ccf4..70ff8d0 100644 --- a/lectures/oo/plano_2017_1.md +++ b/lectures/oo/plano_2017_1.md @@ -55,19 +55,19 @@ O cálculo da menção final será definido através da media ponderada dos valo |7 |29-mar-17|Construtores e destrutores, referências a objetos. | | [sl7][sl7]; [.java][codeLec7] | |8 |31-mar-17|**Atividade ~~em laboratório~~ em dupla (T1)** |[Atividade 2]| | |9 |5-abr-17 |Revisão de conteúdo | | | -|10 |7-abr-17 |**Avaliação 1** | | | -|11 |12-abr-17|Introdução à linguagem Java | | | +|10 |7-abr-17 |~~**Avaliação 1**~~ Data alterada para próxima aula. Vide abaixo| | | +|11 |12-abr-17|**Avaliação 1** | | | |12 |14-abr-17|~~FERIADO - Sexta-feira da Paixão~~ | | | -|13 |19-abr-17|Tipos de dados e operadores | | | +|13 |19-abr-17|Tipos de dados e operadores | | [sl8][sl8] | |14 |21-abr-17|~~FERIADO - Tiradentes~~ | | | -|15 |26-abr-17|Arranjos e coleções | | | -|16 |28-abr-17|Arquitetura de eventos, swing | | | +|15 |26-abr-17|Arranjos e coleções | | [list1][list1][list2][list2][list3][list3]| +|16 |28-abr-17|Arquitetura de eventos, swing | | [JLabel][JLabel][JTextField][JTextField][JButton][JButton] | |17 |3-mai-17 |Arquitetura de eventos, swing | | | |18 |5-mai-17 |Threads e exceções | | | |19 |10-mai-17|Threads e exceções | | | |20 |12-mai-17|Atividade em laboratório em dupla (T2) | | | |21 |17-mai-17|Encapsulamento - introdução | | | -|22 |19-mai-17|Encapsulamento - interfaces | | | +|22 |19-mai-17|~~Encapsulamento - interfaces~~ |[Atividade 3][Atividade 3] | | |23 |24-mai-17|Encapsulamento - Pacotes / níveis de acesso | | | |24 |26-mai-17|Encapsulamento - Escopo de elementos. | | | |25 |31-mai-17|Herança - introdução | | | @@ -83,6 +83,14 @@ O cálculo da menção final será definido através da media ponderada dos valo |35 |5-jul-17 |**Entrega / revisão de menção final** | | | |36 |7-jul-17 |**Entrega / revisão de menção final** | | | +[BorderLAyout.tar.gz][BorderLAyout.tar.gz]| +[BoxLayout.tar.gz][BoxLayout.tar.gz]| +[JButton.tar.gz][JButton.tar.gz]| +[JCheckBox.tar.gz][JCheckBox.tar.gz]| +[JComboBox.tar.gz][JComboBox.tar.gz]| +[JFrame.tar.gz][JFrame.tar.gz]| +[JLabel.tar.gz][JLabel.tar.gz]| +[JTextField.tar.gz][JTextField.tar.gz] #### Bibliografia Básica : @@ -128,7 +136,26 @@ Booch , Grady; Maksimchuk, Robert A.; Engel, Michael W.; Young, Bobbi J. ; Conal [eckDavid]: http://math.hws.edu/javanotes/ [oracle]: http://docs.oracle.com/javase/specs/ -[Atividade 1]: atividade1.md -[Atividade 2]: /exercicio2/atividade2.md +[Atividade 1]: atividade1.md +[Atividade 2]: /exercicio2/atividade2.md +[Atividade 3]: /exercicio3/atividade3.md [sl7]: /lectures/oo/Aula7.pdf [codeLec7]: /lectures/oo/aula7/aula7.tar.gz +[sl8]: https://docs.google.com/presentation/d/17OrSiEvlAuT6vnaU9SOnj2C5ppnjhGuBafyg4WGdGBM/edit?usp=sharing +[list1]: list1.tar.gz +[list2]: list2.tar.gz +[list3]: list3.tar.gz +[JLabel]: exemploJButton.tar.gz +[JTextField]: exemploJLabel.tar.gz +[JButton]: exemploJTextField.tar.gz + + + +[BorderLAyout.tar.gz]:/lectures/oo/BorderLAyout.tar.gz +[BoxLayout.tar.gz]:/lectures/oo/BoxLayout.tar.gz +[JButton.tar.gz]:/lectures/oo/JButton.tar.gz +[JCheckBox.tar.gz]:/lectures/oo/JCheckBox.tar.gz +[JComboBox.tar.gz]:/lectures/oo/JComboBox.tar.gz +[JFrame.tar.gz]:/lectures/oo/JFrame.tar.gz +[JLabel.tar.gz]:/lectures/oo/JLabel.tar.gz +[JTextField.tar.gz]:/lectures/oo/JTextField.tar.gz