Você está na página 1de 8

Lista de Exercícios data de entrega 12/05/2011

1) Sobre notação UML marque V para verdadeiro e F para falso:


a) ( F ) O UML é uma metodologia orientada a objetos.
b) ( V ) O UML é independente das ferramentas de modelação.
c) ( F ) O UML é uma linguagem de programação robusta.
d) ( V ) O Diagrama de classes é usado apenas para paradigmas do tipo Orientado a
Objetos.
e) ( V ) Um paradigma é um estilo de programação, a linguagem é um método para
expressar instruções ao computador.

2) Indique 2 vantagens de se utilizar diagramas de classes?


 Exibe o conjunto de classes, interfaces e colaborações bem como seus
relacionamentos.
 Abrange uma visão estática da estrutura do sistema (mostra o que interage,
mas não o que acontece quando elas interagem).

3) Defina o que é paradigmas de programação? Cite 3 paradigmas e pelo menos uma


linguagem de programação que utilize o paradigma citado?
Paradigmas de Programação
Definição: É basicamente um modelo que interpreta certa realidade, possibilitando a
organização de idéias com o objetivo de entender essa realidade. Determina a visão
que um programador possui sobre a estruturação e execução de um programa.

Programação Imperativa – Linguagem C


Programação Orientada a Objetos – Linguagem C#
Programação Funcional – Lisp
Programação Lógica – Prolog

4) O modelo Lâmpada representado pelo Diagrama de Classes em UML, está separado


em três partes (Retângulo). Descreva o que representa cada uma destas partes.
Neste diagrama o retângulo superior mostra o nome do modelo ou classe, o retângulo
central mostra os atributos, ou seja, os dados definem o modelo e o retângulo inferior
mostra os métodos, que são operações do modelo podem ser realizadas.

5) Qual a relação entre objetos e classes?


Uma classe é uma representação abstrata para um conjunto de objetos que possuem
estrutura e comportamento semelhantes. As classes representam um conjunto de
objetos que compartilham características e comportamentos comuns.

6) Defina:
 Atributos – São as características que definem um objeto, permitem a
identificação de cada objeto de uma classe. Os valores dos atributos podem
variar de instância para instância. Atributos devem conter o tipo de dados a ser
armazenado.
 Métodos – São os comportamentos que os objetos podem tomar. O
comportamento de um objeto é representado através de módulos que contém
algoritmos computacionais denominados métodos.
 Encapsulamento – Separação dos aspectos externos de um objeto, acessíveis
por outros, dos detalhes internos da implementação que ficam ocultos dos
demais.

7) Quais os tipos de visibilidade que podemos dar aos membros (atributos e métodos)
de uma classe em C#.NET? Explique e exemplifique.
-Private (Privada (-)) – Somente a classe terá acesso, o nível de acesso se restringe
apenas a classe;
private float num1;

+Public (Pública (+)) – O atributo ou método pode ser utilizado por qualquer classe, o
nível de acesso é irrestrito;
public int soma;

#Protected (Protegida (#)) – Somente a classe ou sub-classes terão acesso


protected string tipo;

8) Quais são os benefícios do encapsulamento? O que é necessário para encapsular


atributos de uma classe?
Benefícios do encapsulamento:
• Clareza do código
• Possibilidade de adicionar novas funcionalidades e validações posteriormente
• Facilidade de Manutenção
Encapsulamento é a técnica de, em uma classe, utilizar atributos com acesso apenas
private (que só podem ser acessados dentro da própria classe) e, para promover
acesso externo a eles, utilizar métodos public. Assim p ara encapsular um atributo de uma
classe, este deve ser declarado como private e devemos criar um método publico para acessar
esse atributo e modificá-lo.

9) Como fazemos para criar um novo objeto em C#.NET?


Quando vamos criar um objeto em C#.NET utilizamos a palavra chave "new" seguindo
o seguinte esquema:
<Tipo> <nome> = new <Tipo>()
No exemplo abaixo tem-se a criação de um objeto da classe Computador com o nome
de comp1:
Computador comp1 = new Computador().

10) Explique o que é herança?


A herança é um princípio próprio à programação orientada para o objeto, permitindo
criar uma nova classe a partir de uma classe existente. O nome “herança” (que pode às
vezes ser chamada "derivação de classe") provém do fato de a classe derivada (a
última classe criada) conter os atributos e os métodos da sua superclasse (a classe da
qual deriva). O interesse essencial da herança é poder definir novos atributos e novos
métodos para a classe derivada, que vêm acrescentar-se aos herdados.
Herança é o processo de reaproveitamento das características com base em um
ancestral dos quais estas querem se aproveitar.

11) Como utilizamos herança em C#.NET? O que é herança múltipla? Podemos realizar
herança múltipla no C#.NET?
Para herdar classes em C#.NET, deve-se utilizar o símbolo “:” após a declaração da
classe, por exemplo:

1 ...
2 class Base
3 {
4 // ...
5 }
6  
7 // Declara e herda a classe
8 Base
9 class Derivada: Base
10 {
11 // ...
12 }
...

Herança múltipla consiste em que uma classe pode ter não apenas uma classe base,
mas duas ou mais. Nesse processo, todas as características de todas as classes bases
são passadas para a classe derivada. O processo é ilustrado na figura a seguir:
O mecanismo de herança do C#.NET não prevê herança múltipla de classes, processo
contornado pelas interfaces.

12) O que acontece quando sobrescrevemos um método em C#.NET?


A orientação a objetos nos permite sobrescrever métodos. Diferentemente da
sobrecarga (overload) , quando podemos criar várias versões diferentes do mesmo
método, a sobrescrita (override) permite criarmos uma nova implementação para um
método existente em uma classe mãe, substituindo-o. As classes derivadas irão herdar
essa nova implementação ao invés da antiga. Não podemos modificar a assinatura do
método, tendo que manter a quantidade e os tipos dos parâmetros como também o
tipo de retorno do método.
Para podermos sobrescrever um método, ele deve permitir a sobrescrita tendo sido
declarado como "virtual" na sua declaração. O método que vai sobrescrever deve ter a
palavra chave "override" na sua declaração.

13) O que é polimorfismo? Podemos usar isto em C#.NET? Se sim, como?


Polimorfismo significa “várias formas” ou “multi-forma”. Pode-se entender este
processo como a habilidade de uma classe adquirir várias formas em vários objetos,
ou, de se comportar de maneira diferente dependendo de em que objeto ela atua.
Permite escrever programas que processam objetos que compartilham a mesma classe
base em uma hierarquia de classes, como se todas fossem objetos da classe base.
Podemos usar polimorfismo em C#.NET para isto devemos primeiramente criar a
superclasse e definimos o método a ser modificado como virtual. Em seguida na
criação das classes filhas, devemos estabelecer a referência com a classe mãe, e em
seguida declarar um método com o mesmo nome do método a ser modificado, com o
tipo override, que permite a sobrescrita do método anterior. E por fim aplicamos as
modificações no método que irá sobrescrever o método da superclasse.

14) Qual o efeito do modificador virtual em métodos?


Declara um ancestral que pode ser redefinido na classe derivada. Indica que o método
ou assessor pode ser anulado por classes de herança. Suporta implementação na
classe pai e não obriga a implementação na classe herdada.
15) Qual a utilidade de se definir métodos e atributos com o modificador protected?
Quando um método ou atributo é definido com o modificador protected, este se torna
acessível apenas para a classe e para as classes derivadas.

16.) Transforme o seguinte Diagrama feito em UML em código, baseado na linguagem


C#.NET, explique ainda o significado das “setas”:

No diagrama acima, as setas indicam que uma classe herda características da classe superior,
neste exemplo temos, Cocker herda de cachorro que por sua vez, herda de animal.

class Animal
{
//atributos
private string tipo;
private string cor;
//construtor
public Animal()
{
}
public Animal(string tipo1, string c)
{
this.tipo = tipo1;
this.cor = c;
}
//Metodo
public void show()
{
Console.WriteLine(tipo + cor);
}
}
class Cachorro:Animal
{
//atributos
private string nome;
private string raca;
//construtores
public Cachorro()
{
}
public Cachorro(string nome, string cor)
: base("Cachorro", cor)
{
this.nome = nome;
this.raca = "Desconhecida";
}
public Cachorro(string nome, string raca, string cor)
: base("Cachorro", cor)
{
this.nome = nome;
this.raca = raca;
}
//Metodo
public void show()
{
base.show();
Console.WriteLine(nome + raca);
}
}

class Cocker:Cachorro
{
//atributos
private bool tosa;
//Construtor
public Cocker(string nome, string cor, bool tosa)
: base(nome,"Cocker", cor)
{
this.tosa = tosa;
}
//Metodo
public void show()
{
base.show();
Console.WriteLine(tosa);
}
}

17) Observe o diagrama de classes na notação UML a seguir e codifique cada uma das
classes apresentadas:
**OBS: Não é necessário implementar os códigos. Deixe apenas com uma observação
de método ainda não implementado.

class Veiculo
{
//métodos não implementados
public double calcularAutonomia()
{
}
public double calcularDistancia()
{
}
}
class Caminhao : Veiculo
{
//métodos não implementados
public Caminhao(double cargaMaxima)
{
}
}
class Barco : Veiculo
{
//métodos não implementados
public Barco(double cargaMaxima)
{
}
}

18) Sobre polimorfismo, explique o que está ocorrendo (sendo feito) no diagrama
abaixo:
Avião, Pássaro e Super-Homem não derivam de uma mesma classe mãe, mas possuem
alguns métodos iguais (decolar, pousar e voar). Para um conjunto de classes diferentes
implementarem métodos comuns, é necessário a criação de uma interface, no caso
Voador. Uma interface funciona como uma classe modelo à qual todas as classes que a
seguem (que o implementam) terão de respeitar na íntegra.

Você também pode gostar