Mudanças entre as edições de "POO29705-2019-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 351: Linha 351:
 
**Conversão de string para tipos numéricos
 
**Conversão de string para tipos numéricos
 
*streams e arquivos
 
*streams e arquivos
 +
 +
 +
==Exercício em sala - organização dos arquivos==
 +
 +
main.h
 +
<syntaxhighlight lang=c>
 +
 +
#ifndef MAIN_H
 +
#define MAIN_H
 +
 +
#include "triangulo.h"
 +
 +
extern Triangulo y;
 +
 +
#endif
 +
</syntaxhighlight>
 +
 +
main.cc
 +
<syntaxhighlight lang=c>
 +
#include "main.h"
 +
#include "triangulo.h"
 +
 +
using namespace std;
 +
 +
 +
Triangulo y(1.5,10.7,9.0);
 +
 +
 +
main()
 +
{
 +
  Triangulo *p;
 +
  Triangulo x(10.0,9.5,4.7);
 +
 +
  p = new Triangulo(1.5, 2.7,9.9);
 +
 +
 +
  p->printTriangulo();
 +
  x.printTriangulo();
 +
  y.printTriangulo();
 +
  (*p).printTriangulo();
 +
}
 +
</syntaxhighlight>
 +
 +
triangulo.h
 +
<syntaxhighlight lang=c>
 +
#ifndef TRIANGULO_H
 +
#define TRIANGULO_H
 +
 +
class Triangulo {
 +
private:
 +
  float lado1,
 +
        lado2,
 +
        lado3;
 +
public:
 +
  Triangulo(float l1, float l2, float l3) {
 +
    lado1 = l1;
 +
    lado2 = l2;
 +
    lado3 = l3;
 +
  }
 +
  void printTriangulo();
 +
};
 +
 +
 +
#endif
 +
</syntaxhighlight>
 +
 +
triangulo.cc
 +
<syntaxhighlight lang=c>
 +
#include "triangulo.h"
 +
#include <iostream>
 +
 +
using namespace std;
 +
 +
 +
 +
void Triangulo::printTriangulo()
 +
{
 +
  cout << "Alo - sou o triangulo" << "\n";
 +
}
 +
</syntaxhighlight>
  
 
=AULA 11 - Dia 10/05/2019=
 
=AULA 11 - Dia 10/05/2019=

Edição das 09h08min de 3 de maio de 2019

Professor

  • Eraldo Silveira e Silva (eraldo@ifsc.edu.br)

ALUNOS

  • Alfredo
  • Valmir

Avaliação

  • 1 Prova Formal
  • 1 Nota de Atividades
  • 1 Projeto

Link para PRG1

https://wiki.sj.ifsc.edu.br/index.php/Proposta_de_Aulas_de_Introdu%C3%A7%C3%A3o_a_Programa%C3%A7%C3%A3o_C

OBSERVAÇÃO

  • cada registro de aula coreesponde a 2HA.

AULA 1 (2ha)- Dia 25/02/2019

Plano de Ensino

  • Competências
    • Desenvolver Projetos Orientados a objetos
  • Bases Tecnológicas
    • Ciclos de desenvolvimento de software.
    • Qualidade de software.
    • A visão de objetos.
    • Projeto orientado a objetos com auxilio computacional e linguagem UML.
    • Programação orientada a objeto utilizando linguagem C++ ou Java.
    • Introdução a programação para WEB.
    • Acesso a banco de dados.

Revisão de Lógica de Programação e de Programação C

  • Livro: Estudo Dirigido Linguagem C - Manzano
  • gcc e gedit

Exemplo pg.46 do livro:

#include <stdio.h>

int main()
{
 int num1,num2,soma;

 printf("Entre com o primeiro número\n");
 scanf("%d", &num1);
 printf("Entre com o segundo número\n");
 scanf("%d", &num2);
 
 soma = num1 + num2;

 printf("Valor da soma é %d\n", soma);
}
  • Compilação
gcc ex1.c -o ex1

ATIVIDADES

  • Ler Cap.3 do Livro e fazer todos exercícios do final. Fazer commit no github - TAREFA 1
  • Ler Cap. 4.1, 4.2, 4.3 e 4.4.

AULA 2 - Dia 8/03/2019

OBJETIVOS

  • Instruções de Decisão C - revisão
  • Instruções de Repetição no C - revisão
  • Exemplo de controle de acesso

Material de Referência

ATIVIDADE

  • Finalizar leitura Cap.4 e começar a leitura Cap.5
  • Fazer execícios do final do Cap.4 e postar no github - TAREFA 2 (deadline 13/03)
  • Fazer execícios do final do Cap.5 e postar no github - TAREFA 3 (deadline 20/03)

AULA 3 - Dia 15/03/2019

OBJETIVOS

  • Revisão conceito de Arrays
  • Revisão de Funções

Exercício Inicial de Verificação

Computar a soma de N números inteiros a serem fornecidos no teclado usando o comando for. Mostrar o resultado.

Referências

https://wiki.sj.ifsc.edu.br/index.php/AULA_8_-_Programa%C3%A7%C3%A3o_1_-_Engenharia

https://wiki.sj.ifsc.edu.br/index.php/AULA_9_-_Programa%C3%A7%C3%A3o_1_-_Engenharia

https://wiki.sj.ifsc.edu.br/index.php/AULA_10_-_Programa%C3%A7%C3%A3o_1_-_Engenharia

Cap.6 e 7 do livro.

AULA 4 - Dia 22/03/2019

OBJETIVOS

  • O paradigma orientado a objetos (cap.1 Bezerra)
    • modelagem de sistemas de software;
    • paradigma OO:classes e objetos, mensagens e abstração
    • a UML
  • O pŕocesso de desenvolvimento de software (cap.2 Bezerra)
    • atividades típicas de um processo
    • participantes do processo
    • ciclos de vida
    • utilização da UML

AULA 5 - Dia 29/03/2019

OBJETIVOS

  • Discussão do Projeto Final
  • Apresentação da BeagleBone


  • Modelagem de Casos de Uso
  • Modelagem de Classes
  • Conceito de Associação e Generalização
  • Herança e Polimorfismo
  • Diagrama de Classes e Objetos
  • Exemplo: Sistema de Controle de Acesso

Referências

https://beagleboard.org/getting-started

AULA 6 - Dia 5/04/2019

  • Visão de Casos de Uso (discussão cap.4 do Bezerra)

TAREFA (Projeto - Fase 1)

  • Elaborar lista de requisitos do Projeto de Controle de Acesso
  • Elaborar Regra de Negócios
  • Elaborar Diagrama de Casos de Uso
    • Dividir os 14 requisitos em 2 mas propor um adicional para agregar valor.


TAREFA 2

  • Ler cap.5 do Bezerra.

AULA 7 - Dia 10/04/2019

OBJETIVOS

Parte 1

  • Introdução ao C++
  • Classes e Objetos no C++ (ver material Prof.Sobral)
    • Declaração de classes
    • Criação de objetos
    • Destruição de objetos
    • Um exemplo

Parte 2

  • Modelagem da Dinâmica do Sistema
  • Diagramas de Interação, Sequência e Colaboração
  • Exemplo: Controle de Acesso

Exemplo - A porta do sistema de controle de acesso

  • porta.h
class forma_porta {
 private:
  int estado; /* 0 se fechado e 1 se aberto */
  int tipoPorta; /* 0 porta de abrir, 1 de correr, 2 sanfonada */
  string ambienteDaPorta;
 public:
  forma_porta(string nome) {
    ambienteDaPorta = nome;
  }
  int lerEstado() {
      return estado;
  }
  void abrirPorta();
};
  • porta.cc
#include <cstring>
#include <iostream>
#include <stdio.h>

using namespace std;

#include "porta.h"

void forma_porta::abrirPorta()
{
  cout << "Abrir porta do ambiente " << ambienteDaPorta << "\n";
}

class forma_porta portaCad2("cad2");

int main()
{  
  portaCad2.abrirPorta();
}

Aula 12.04.19

Aulapoo 120419.jpg



Exercício

No exemplo anterior criar dois objetos para a porta do CAD1 e do CAD2. Criar um objeto adicional chamado Controlador para acionar estas portas.

Material de Referência

AULA 8 - Dia 26/04/2019

OBJETIVOS

])

Declaração de classes

Exercício: Implementar construtor/destrutor e métodos para acessar a classe que representa uma pessoa conforme indicado abaixo. Colocar a classe em um arquivo .h. Criar localmente duas pessoas e testar os métodos no main.

class pessoa {

private:
  string nome;
  string data_nasc;
  string cidade_nasc;
public:
  pessoa(string umNome, string umaData, string umaCidade);
  ~pessoa();
  string obtemNome();
  string obtemDataNasc();
  string obtemCidadeNasc();

}; </syntaxhighlight>

Criação/Destruição

https://wiki.sj.ifsc.edu.br/index.php/Introdu%C3%A7%C3%A3o_C%2B%2B#Cria.C3.A7.C3.A3o_de_objetos

Um exemplo de classe: vetor

https://wiki.sj.ifsc.edu.br/index.php/Introdu%C3%A7%C3%A3o_C%2B%2B#Um_exemplo

Material de Referência

AULA 9 - Dia 26/04/2019

OBJETIVOS

  • Passagem de parâmetros
  • Alocação dinâmica de memória: operadores new e delete
  • Templates


Lembrete da Avaliação sobre o Projeto

A3 - Projeto Final envolvendo UML e C++

     *Documentação: 30 %
     *Desempenho durante o desenvolvimento: 30%
     *Defesa: 40 %


Para organizar este processo vamos colocar as seguintes fases:

  • FASE (Sprint) 1 - Foco principal na Concepção (link github já repassado) - Diagramas de Caso de Uso, listas de requisitos funcionais, não funcionais e regras de negócio.
  • FASE 2 - Foco principal no Projeto - diagramas de classes
  • FASE 3 - Foco Principal no Projeto - diagramas de sequência
  • FASE 4 - Foco Principal Implementação de casos de usos selecionados
  • FASE 5 - Foco Principal Implementação de casos de usos selecionados
  • FASE 6 - Foco Principal Implementação de casos de usos selecionados
  • FASE 7 - Foco Principal Implementação de casos de usos selecionados
  • FASE 8 - Foco Principal Implementação de casos de usos selecionados
  • FASE 9 - Foco Principal Teste/Implantação
  • FASE 10 - Apresentação Final

Lembrete da Avaliação de Atividades

A A2 é baseada nas atividades repassadas em sala. Até o momento foram passadas 3 atividades de revisão do C. Elas não serão incluídas nesta avaliação. Pa fins de organização vou formalizar 5 atividades de POO-C++ nomeadas da forma:

  • Atividade POO-C++ 1
  • Atividade POO-C++ 2
  • Atividade POO-C++ 3
  • Atividade POO-C++ 4
  • Atividade POO-C++ 5

Atividade POO-C++ 1

NOTA: sempre organizar o código em .h e .cpp

  1. Implemente uma classe que representa um triângulo qualquer. A classe deve possuir um construtor que possibilite configurar os lados do mesmo.Ela deve possuir um método que retorne a área e o perímetro do triângulo além de 3 métodos para retornar e setar cada lado. Deve ser previsto um parâmetro booleano que indica se o triângulo é válido ou não. (depois veremos como poderia ser contornado este problema). Teste a criação de dois objetos no main(). Um deles deve ser criado com o operador new e outro como variável local. NÃO usar métodos inline. Prever também um método para imprimir todos os lados, a área e o perímetro, quando o triângulo for válido. Caso contrário imprimir mensagem de triângulo inválido. Se existir uma situação de triângulo inválido e for solicitado áreao ou perímetro, retornar -1,
  2. Implemente uma classe que representa o tempo. Da mesma forma que o anterior devem ser previstos construtor e métodos para manipular o tempo (hora de 0 a 23, minuto de 0 a 59 e segundo de 0 a 59). Fazer todos os métodos inline. Teste a classe criando dois objetos e mostrando o usu dos métodos.
  3. Implemente uma classe que representa um carro. Preveja um atributo que representa velocidade (ver nota de aula do Prof.Emerson Mello). Testar a classe no programa main.
  4. Implemente uma classe que representa um endereço. Coloque o máximo possível de informação. Preveja um atributo que permita colocar um pequeno texto sobre a proximidade de algum local conhecido. Prever além dos métodos de acesso aos atributos, um método que permita receber como parâmetro uma palavra chave a ser procurada neste texto. Este método deve retornar um booleano indicando se a palavra chave existe no texto.
  5. Implemente uma classe que representa bandas de rock. Preveja um atributo que permita representar as canções e discos da banda. Pense na possibilidade de que destes atributos também sejam classes.

AULA 10 - Dia 03/05/2019

OBJETIVOS

  • strings em C++ (ver material Prof.Sobral)
    • Lendo ou escrevendo strings em streams
    • Conversão de string para tipos numéricos
  • streams e arquivos


Exercício em sala - organização dos arquivos

main.h

#ifndef MAIN_H
#define MAIN_H

#include "triangulo.h"

extern Triangulo y;

#endif

main.cc

#include "main.h"
#include "triangulo.h"

using namespace std;


Triangulo y(1.5,10.7,9.0);


main()
{
  Triangulo *p;
  Triangulo x(10.0,9.5,4.7);

  p = new Triangulo(1.5, 2.7,9.9);


  p->printTriangulo();
  x.printTriangulo();
  y.printTriangulo();
  (*p).printTriangulo();
}

triangulo.h

#ifndef TRIANGULO_H
#define TRIANGULO_H

class Triangulo {
private:
  float lado1, 
        lado2,
        lado3;
public:
  Triangulo(float l1, float l2, float l3) {
     lado1 = l1;
     lado2 = l2;
     lado3 = l3;
  }
  void printTriangulo();
}; 


#endif

triangulo.cc

#include "triangulo.h"
#include <iostream>

using namespace std;



void Triangulo::printTriangulo()
{
  cout << "Alo - sou o triangulo" << "\n";
}

AULA 11 - Dia 10/05/2019

OBJETIVOS

  • Herança de classes

AULA 12 - Dia 17/05/2019

OBJETIVOS

  • Polimorfismo e Funções Virtuais

AULA 13 - Dia 23/05/2019 (projeto)

OBJETIVOS

AULA 14 - Dia 24/05/2019

OBJETIVOS

  • Qualidade de Software

AULA 15 - Dia 30/06/2019 (projeto - Aula a noite)

AULA 16 - Dia 31/05/2019

OBJETIVOS

  • Aspectos de Programação para Wwb usando o C++

AULA 17 - Dia 6/06/2019 (projeto - Aula a noite)

AULA 18 - Dia 7/06/2019

OBJETIVOS

  • Acesso a banco de dados usando o C++

AULA 19 - Dia 13/06/2019 (projeto - Aula a noite)

AULA 20 - Dia 14/06/2019

OBJETIVOS

AULA 21 - Dia 18/06/2019 (por causa do feriado)

AULA 22 - Dia 19/06/2019 (projeto - Aula a noite)

AULA 23 - Dia 20/06/2019 (projeto - Aula a noite)

OBJETIVOS

AULA 24 - Dia 26/06/2019 (projeto aula a noite)

Previsão de 3ha

AULA 25 - Dia 27/06/2019 (projeto aula a noite)

Previsão de 3ha

AULA 26 - Dia 28/06/2019

  • Apresentação do Projeto Final

OBJETIVOS

AULA 27 - Dia 5/07/2019

  • Recuperação da A1

OBJETIVOS

AULA 28 - Dia 9/07/2019

  • Reapresentação do Projeto