Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


c# programação e exercicios para progrma, Exercícios de Programação em C

programação e exercicios de um curso especifico

Tipologia: Exercícios

2020

Compartilhado em 12/08/2020

ben-hur-guimaraes
ben-hur-guimaraes 🇧🇷

2 documentos

1 / 23

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Curso C# Completo
Programação Orientada a
Objetos + Projetos
Capítulo: Construtores, palavra this, sobrecarga, encapsulamento
http://educandoweb.com.br
Prof. Dr. Nelio Alves
Construtores
http://educandoweb.com.br
Prof. Dr. Nelio Alves
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Pré-visualização parcial do texto

Baixe c# programação e exercicios para progrma e outras Exercícios em PDF para Programação em C, somente na Docsity!

Curso C# Completo

Programação Orientada a

Objetos + Projetos

Capítulo: Construtores, palavra this, sobrecarga, encapsulamento

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Construtores

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Construtor

  • É uma operação especial da classe, que executa no momento da

instanciação do objeto

  • Usos comuns:
    • Iniciar valores dos atributos
    • Permitir ou obrigar que o objeto receba dados / dependências no momento de sua instanciação (injeção de dependência)
  • Se um construtor customizado não for especificado, a classe disponibiliza o

construtor padrão:

  • Produto p = new Produto();
  • É possível especificar mais de um construtor na mesma classe (sobrecarga)

Exemplo:

Entre os dados do produto:

Nome: TV

Preço: 900.

Quantidade no estoque: 10

Dados do produto: TV, $ 900.00, 10 unidades, Total: $ 9000.

Digite o número de produtos a ser adicionado ao estoque: 5

Dados atualizados: TV, $ 900.00, 15 unidades, Total: $ 13500.

Digite o número de produtos a ser removido do estoque: 3

Dados atualizados: TV, $ 900.00, 12 unidades, Total: $ 10800.

Quando executamos o comando abaixo, instanciamos um produto " p " com seus

atributos “vazios”:

p = new Produto();

Entretanto, faz sentido um produto que não tem nome? Faz sentido um produto que

não tem preço?

Com o intuito de evitar a existência de produtos sem nome e sem preço, é possível

fazer com que seja “obrigatória” a iniciação desses valores?

Memória:

Proposta de melhoria

null 0.0 0

Nome Preco Quantidade

p

using System.Globalization;

namespace Course { class Produto {

public string Nome; public double Preco; public int Quantidade;

public Produto(string nome, double preco, int quantidade) { Nome = nome; Preco = preco; Quantidade = quantidade; }

public double ValorTotalEmEstoque() { return Preco * Quantidade; }

public void AdicionarProdutos(int quantidade) { Quantidade += quantidade; }

public void RemoverProdutos(int quantidade) { Quantidade -= quantidade; }

public override string ToString() { return Nome

  • ", $ "
  • Preco.ToString("F2", CultureInfo.InvariantCulture)
  • ", "
  • Quantidade
  • " unidades, Total: $ "
  • ValorTotalEmEstoque().ToString("F2", CultureInfo.InvariantCulture); } } }

using System; using System.Globalization;

namespace Course { class Program { static void Main(string[] args) {

Console.WriteLine("Entre os dados do produto:"); Console.Write("Nome: "); string nome = Console.ReadLine(); Console.Write("Preço: "); double preco = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture); Console.Write("Quantidade no estoque: "); int quantidade = int.Parse(Console.ReadLine());

Produto p = new Produto(nome, preco, quantidade);

Console.WriteLine(); Console.WriteLine("Dados do produto: " + p);

Console.WriteLine(); Console.Write("Digite o número de produtos a ser adicionado ao estoque: "); int qte = int.Parse(Console.ReadLine()); p.AdicionarProdutos(qte);

Console.WriteLine(); Console.WriteLine("Dados atualizados: " + p);

Console.WriteLine(); Console.Write("Digite o número de produtos a ser removido do estoque: "); qte = int.Parse(Console.ReadLine()); p.RemoverProdutos(qte);

Console.WriteLine(); Console.WriteLine("Dados atualizados: " + p); } } }

Sobrecarga

http://educandoweb.com.br

Prof. Dr. Nelio Alves

public Produto() {

}

public Produto(string nome, double preco, int quantidade) {

Nome = nome;

Preco = preco;

Quantidade = quantidade;

}

public Produto(string nome, double preco) {

Nome = nome;

Preco = preco; Quantidade = 0;

}

Sintaxe alternativa para inicializar

valores

http://educandoweb.com.br

Prof. Dr. Nelio Alves

using System.Globalization;

namespace Course {

class Produto {

public string Nome;

public double Preco;

public int Quantidade;

public Produto() {

public Produto(string nome, double preco, int quantidade) {

Nome = nome;

Preco = preco;

Quantidade = quantidade;

Produto p = new Produto("TV", 900.00, 10);

Produto p = new Produto {

Nome = "TV",

Preco = 900.0,

Quantidade = 0

Produto p2 = new Produto() {

Nome = "TV",

Preco = 900.0,

Quantidade = 0

Isso funciona mesmo se a classe não possuir construtores implementados

Diferenciar atributos de variáveis locais

public Produto(string Nome, double Preco) {
this.Nome = Nome;
this.Preco = Preco;
Quantidade = 0;

Memória

Stack Heap

Nome Preco Quantidade

(escopo do construtor)

"TV"

Preco

Nome

Produto p = new Produto("TV", 1500.0);

p "TV" 1500.0 0

using System.Globalization;

namespace Course {

class Produto {

public string Nome;

public double Preco;

public int Quantidade;

public Produto() {

Quantidade = 0;

public Produto(string nome, double preco) : this() {

Nome = nome;

Preco = preco;

public Produto(string nome, double preco, int quantidade) : this(nome, preco) {

Quantidade = quantidade;

Referenciar outro construtor em um construtor

Passar o próprio objeto como argumento na

chamada de um método ou construtor

class ChessMatch {

PlaceNewPiece('e', 1, new King(board, Color.White, this));

Encapsulamento

http://educandoweb.com.br

Prof. Dr. Nelio Alves

using System.Globalization;
namespace Course {
class Produto {
private string _nome;
private double _preco;
private int _quantidade;
public Produto() {
public Produto(string nome, double preco, int quantidade) {
_nome = nome;
_preco = preco;
_quantidade = quantidade;
public string GetNome() {
return _nome;
public void SetNome(string nome) {
if (nome != null && nome.Length > 1) {
_nome = nome;
public double GetPreco() {
return _preco;
public int GetQuantidade() {
return _quantidade;
public double ValorTotalEmEstoque() {
return _preco * _quantidade;
public void AdicionarProdutos(int quantidade) {
_quantidade += quantidade;
public void RemoverProdutos(int quantidade) {
_quantidade -= quantidade;
public override string ToString() {
return _nome
+ _preco.ToString("F2", CultureInfo.InvariantCulture)
+ _quantidade
+ " unidades, Total: $ "
+ ValorTotalEmEstoque().ToString("F2", CultureInfo.InvariantCulture);

Properties

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Propriedades

• São definições de métodos encapsulados, porém expondo uma

sintaxe similar à de atributos e não de métodos

  • https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/classes-and-structs/properties
    • Uma propriedade é um membro que oferece um mecanismo flexível para ler,

gravar ou calcular o valor de um campo particular. As propriedades podem ser

usadas como se fossem atributos públicos, mas na verdade elas são métodos

especiais chamados "acessadores". Isso permite que os dados sejam

acessados facilmente e ainda ajuda a promover a segurança e a flexibilidade

dos métodos.

Auto Properties

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Propriedades autoimplementadas

• É uma forma simplificada de se declarar propriedades que não

necessitam lógicas particulares para as operações get e set.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties

public double Preco { get; private set; }

using System.Globalization;

namespace Course {

class Produto {

private string _nome;

public double Preco { get; private set; }

public double Quantidade { get; set; }

public Produto() {

public Produto(string nome, double preco, int quantidade) {

_nome = nome;

Preco = preco;

Quantidade = quantidade;

public string Nome {

get { return _nome; }

set {

if (value != null && value.Length > 1) {

_nome = value;

public double ValorTotalEmEstoque {

get { return Preco * Quantidade; }

public void AdicionarProdutos(int quantidade) {

Quantidade += quantidade;

public void RemoverProdutos(int quantidade) {

Quantidade -= quantidade;

public override string ToString() {

return _nome

+ Preco.ToString("F2", CultureInfo.InvariantCulture)

+ Quantidade

+ " unidades, Total: $ "

+ ValorTotalEmEstoque.ToString("F2", CultureInfo.InvariantCulture);

Modificadores e acesso

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Modificadores de acesso

• https://docs.microsoft.com/en-us/dotnet/csharp/language-

reference/keywords/access-modifiers

Membros

própria classe

subclasses no assembly

classes do assembly

subclasses fora do assembly

classes fora do assembly

public x x x x x

protected internal x x x x

internal x x x

protected x x x

private protected x x

private x

Classes

  • Acesso por qualquer classe
    • public class Product
  • Acesso somente dentro do assembly
    • internal class Product
    • class Product
  • Acesso somente pela classe-mãe
    • private class Product
    • Nota: classe aninhada, por padrão, é private