Baixe o app para aproveitar ainda mais
Prévia do material em texto
Desenvolvimento de Software Prof. Henrique Mota mota.henrique@gmail.com http://www.henriquemota.com.br ESTRUTURAS DE LINGUAGEM Introdução • paradigma OO: conjunto de ideias, conceitos e abstrações que servem como um guia para construir um so=ware. • linguagem de programação: define formalmente todas as partes de um sistema e como essas partes se relacionam. C# (C Sharp) • �Linguagem simples, robusta, orientada a objetos, fortemente Epada e altamente escalável; • Permite que uma mesma aplicação possa ser executada em diversos disposiEvos de hardware; • Tudo é um objeto: System.Object é a classe base de todo o sistema de Epos de C#; • Controle de versões: cada Código Executável gerado tem informação sobre a versão do código; • Suporte a código legado; C# (C Sharp) • Linguagem gerenciada: todo o gerenciamento de memória é feito pelo runEme via o GC (Garbage Collector); • Flexível: se houver necessidade do uso de ponteiros, é permiEdo ao custo de desenvolver código não gerenciado -‐ ”unsafe”; • Sensível ao contexto: “int” é diferente de "INT”; • Blocos de código são agrupados entre chaves { }; • Cada linha de código é separada por ponto-‐e-‐vírgula; • Comentários de linhas simples começam com //. C# (C Sharp) • Linguagem de Programação muito uElizada no mercado de trabalho; • Códigos de programas escritos em C# são colocados em arquivos com a extensão “.cs”; • CSC é o compilador da linguagem C Sharp. Método Main • método especial, ponto de entrada do programa; • primeiro método a ser chamado quando o programa for executado; • precisa ser sta$c e seu Epo de retorno pode ser void ou int. • também pode declarar parâmetros para receber os argumentos passados pela linha de comando; • deve ser inserido em uma classe C#. Algumas variações do método Main Método Main • Os parâmetros do método Main são passados pela linha de comando e podem ser manipulados dentro do programa. • O exemplo a seguir imprime cada parâmetro recebido em uma linha diferente. A Classe “Console” Responsável por fornecer os métodos de leitura e escrita para a saída padrão do console; • ReadKey() – Leitura de um caractere simples; • ReadLine() – Leitura de uma linha completa; • Write() – Escreve uma string sem retorno de carro; • WriteLine() – Escreve uma string com retorno de carro; A Classe “Console” Caractere de Escape Significado \n Insere uma nova linha \t TAB \a Dispara o som de um alarme sonoro simples \b Apaga o caractere anterior da string que está sendo escrita no console (backspace) \r Insere um retorno de carro \0 Caractere NULL (nulo) VARIÁVEIS E TIPOS DE DADOS Variáveis e Epos de dados • variável: recurso fundamental oferecido pela maioria das Linguagens de Programação; • permite armazenar e manipular dados na memória RAM; • área de memória, associada a um nome, que pode armazenar valores de um determinado Epo; • Epo de dado define um conjunto de valores e operações; • uma variável de um certo Epo “T” pode conter, em um dado instante, um valor pertencente ao Epo “T”. Rigidez de Epos • C# é uma linguagem com rigidez de Epos (em inglês strongly typed). “um valor pertencente a um determinado ;po só pode ser usado como argumento em operações que preveem operações desse ;po.” Declaração de variáveis • as variáveis devem ser declaradas para que possam ser uElizadas; • declarar uma variável envolve definir um nome único e um Epo de valor; • variáveis são acessadas pelos nomes e armazenam valores companveis com o seu Epo. Declaração de variáveis • toda variável deve ser inicializada antes de ser uElizada; • se não inicializada ocorrerá um erro de compilação; • a inicialização é realizada através do operador de atribuição “=” e o valor guardado no espaço de memória reservado a ela. Declaração de variáveis • a declaração pode ser feita em qualquer linha de um bloco, não é necessário declarar todas no começo do bloco. Uma declaração da forma int x = 10; é na verdade a combinação de uma declaração de variável com uma atribuição. Escopo da variável • Toda variável pode ser uElizada dentro do bloco no qual ela foi declarada após a linha da sua inicialização. • Não é permiEdo declarar duas variáveis com o mesmo nome dentro de um mesmo bloco. Isso ocasionará um erro de compilação. Escopo da variável • Dentro de um bloco é possível abrir um sub-‐bloco. As variáveis declaradas antes do sub-‐bloco podem ser acessadas também no sub-‐bloco. Sub-bloco definido e acessando valores da varável “numero” Escopo da variável • Porém, variáveis declaradas em sub-‐blocos não podem ser acessadas do “bloco pai” nem de outro sub-‐bloco do “bloco pai”. Escopo da variável • Dentro de sub-‐blocos diferentes de um mesmo bloco é permiEdo declarar variáveis com nomesiguais. TIPOS DE DADOS Tipos de dados • Como toda linguagem de programação, C# apresenta seu grupo de Epos de dados básico. • Esses Epos são conhecidos como “primiEvos” ou “fundamentais” por serem suportados diretamente pelo compilador. • São uElizados durante a codificação na definição de variáveis, parâmetros e até mesmo em comparações. Sistema de Tipos do C# Object String Array T[] enum T ValueType class T int short byte char float decimal long uint ulong sbyte ushort bool double Enum struct T Tipo inteiro C# oferece diversos Epos de inteiros. Cada um deles é definido por: – uma gama de valores – uma representação interna O desenvolvedor tem a opção de decidir qual o Epo será usado em função da necessidade de sua aplicação. Tipo booleano • O Epo booleano, em C# chamado de bool, é usado em geral para operações lógicas. • Os valores possíveis para uma variável desse Epo são true e false. Categorias de Epos de dados Em C#, podemos apresentar 02 categorias: • Tipos valor: armazenam dados em memória enquanto. Ex.: int x =10; • Tipos referência: armazenam uma referência, o endereço, para o valor atual. Ex.: int x = new int(10); Conversão de Epo Conversões de Epos de dados é uma situação comum em programação. Devemos considerar: • Os Epos de menor faixa são converEdos para os de maior faixa. Por exemplo, o Epo int pode ser converEdo para: long, float, double ou decimal. • A conversão dos Epos de ponto flutuante (float, double) para decimal causa erro. • A conversão entre os Epos com sinal e sem sinal de valores inteiros com o mesmo tamanho causa erro. Por exemplo, entre o Epo int e unit. Tabela de conversão automáEca O objeto “Convert” • Em C# temos o objeto Convert que é́ usado para converter um Epo de dado em outro. • Os Epos de dados suportados são: Boolean, Char, SByte, Byte, Int16, Int32, Int64, Uint16, UInt32, UInt64, Single, Double, Decimal, DateTime e String. Int numero = System.Convert.ToInt32 (decimal); OPERADORES Operadores • Para manipular os valores das variáveis, podemos aplicar os operadores da linguagem. Há diversos Epos de operadores. AritméEcos Para realizar as operações matemáEcas podemos aplicar os operadores: • + (soma), • -‐ (subtração), • * (mulEplicação), • / (divisão) e • % (módulo). Igualdade e desigualdade Para verificar se o valor armazenado em uma variável é igual ou diferente a um determinado valor ou ao valor de outra variável, devem ser uElizados os operadores: • == (igual) e • != (diferente). Esses operadores devolvem valores do Epo bool (true ou false). Relacionais As variáveis numéricas podem ser comparadas com o intuito de descobrir a ordem ou a relação numérica dos seus valores. Os operadores relacionais são: • > (maior que), • < (menor que), • >= (maior ou igual a) e • <= (menor ou igual a). Esses operadores devolvem valores do Epo bool (true ou false). Relacionais Lógicos Para verificar várias condições é possível aplicar os operadores lógicos: • && (e) e • || (ou). Expressões • Uma expressão é uma combinação de operandos e operadores. • Expressões em C# são semelhantes às expressões usadas em outras linguagens como C ou Pascal. Expressões • No caso de operações encadeadas, como em a+b*c o cálculo da expressão é feito de acordo com a precedência entre os operadores. • Parênteses podem ser uElizados para alterar a ordem de cálculo das operações. • Exemplos: (a+b)*c e a+(b*c) Expressões No caso de encadeamento de operações com a mesma precedência, a linguagem define o modo de associaEvidade (à esquerda ou à direita). Os operadores aritméEcos em C# têm associaEvidade à esquerda. Exemplo: 6/2/3 é calculado como (6/2)/3 pois neste caso a associaEvidade é à esquerda. Em C#, apenas os operadores de atribuição (= *= /= %= += -‐= <<= >>= &= ^= |=) e o operador ternário (? :), têm associaEvidade à direita. Operadores Principais operadores, em ordem decrescente de precedência Categoria Operadores Associatividade Unário + - ! esquerda Multiplicativo * / % esquerda Aditivo + - esquerda Relacional < = > >= <= == is esquerda Igualdade == != esquerda 'and' (bool) && esquerda 'ou' (bool) || esquerda Operadores combinados O operador de atribuição pode ser combinado com outros operadores aritméEcos. a op= exp; é equivalente a a = a op (exp); Exemplos: a += b; equivalente a a = a + b; a -= 2; equivalente a a = a - 2; a *= 1+1; equivalente a a = a * (1+1); a %= b*c+d; equivalente a a = a % (b*c+d); Auto-‐incremento e auto-‐decremento Numa expressão, os operadores ++ e -- podem ser usados antes ou depois da variável: – se usado após a variável, o incremento será feito depois de usar o valor da variável na expressão– se usado antes da variável, o incremento será feito antes do uso do valor na expressão Exemplos: a = a/i++; equivalente a a = a/i; i = i+1; b = --k*2; equivalente a k=k-1; b = k*2; COMANDOS Seleção • Os comandos de seleção são uElizados na escolha de uma possibilidade entre uma ou mais possíveis. • Os comandos if e switch fazem parte deste grupo. Comando if • O comando if uEliza uma expressão, ou expressões, booleana para executar um comando ou um bloco de comandos. • A cláusula else é opcional na uElização do if, no entanto, seu uso é comum em decisões com duas ou mais opções. Comando if Situação 01 (sem o uso do else) Situação 02 (com o uso do else) Comando if • Toda expressão do comando if deve ser embuEda em parênteses () e possui o conceito de curto-‐circuito (short-‐ circuit). • Isto quer dizer que se uma expressão composta por And (&&), fornecer na sua primeira análise um valor booleano false (falso), as restantes não serão analisadas. • Este conceito é válido para todas expressões booleanas. Comando if Assim como outros comandos. O if também pode ser encontrado na forma aninhada. Comando if O comando if com a cláusula else única pode ser encontrado em sua forma reduzida com operador ternário representado por interrogação (?:). E chamado de operador ternário por possuir 3 expressões: a primeira refere-‐se a condição boolena, a segunda se a condição é verdadeira e a terceira se a condição é falsa. Comando swicth • O comando switch uEliza o valor de uma determina expressão contra uma lista de valores constantes para execução de um ou mais comandos. • Os valor constante é tratado através da cláusula case e este pode ser numérico, caracter ou string. • A cláusula default é uElizada para qualquer caso não interceptado pelo case. Comando switch Comando switch Uma ou mais cláusulas case podem ser encontradas seguidamente quando mais do que uma opção é permiEda para um comando ou bloco de comandos. Comando switch A cláusula break é uElizada para separar os blocos do switch e garante que o bloco seja executado somente até determinado ponto. Interação e Loop • Conhecidos como laço ou loop, os comandos de iteração executam repeEdamente um comando ou bloco de comandos, a parEr de uma determinada condição. • Esta condição pode ser pré-‐definida ou com final em aberto. • Em C#, fazem parte dos comandos de iteração: while, do, for e foreach. Comando for • O comando for possui 3 declarações opcionais, separadas por ponto e vírgula(;), dentro dos parênteses: • inicialização, • condição de interação, • e a iteração. • Em cada parâmetro, mais de uma expressão pode ser encontrada separada por vírgula. Comando for Comando foreach • O comando foreach enumera os elementos de uma coleção. Comando do e while • Os comandos do e while tem caracterísEcas semelhantes. Ambos executam condicionalmente um comando ou bloco de comandos. • No entanto, o comando do pode ser executado uma ou mais vezes e o comando while pode ser executado nenhuma ou mais vezes, isto ocorre porque a expressão condicional do comando do é́ encontrada no final do bloco. Comando do e while VETORES E MATRIZES Vetores e matrizes • C# oferece diversos mecanismos para a criação de novos Epos de dados a parEr de Epos já existentes. • Um desses mecanismos é o que permite a construção de vetores e matrizes. • Suponha que o sistema de uma loja virtual precisa armazenar os preços dos produtos que ela comercializa. Vetores e matrizes • Não seria nada práEco declarar para cada produto uma variável que armazena o preço do mesmo. • Para isso, é possível uElizar as estruturas chamadas Arrays (vetores). • Um array é uma estrutura que armazena um ou mais valores de um determinado Epo. Vetores e matrizes • A variável preços armazena uma referência de um array criado na memória RAM do computador. • Na memória, o espaço ocupado por esse array está dividido em 100 “pedaços” iguais numerados de 0 até 99. • Cada “pedaço” pode armazenar um valor do Epo double. • Quando um array é criado, as posições dele são inicializadas com os valores default. Vetores e matrizes Acessar posições fora do intervalo de índices de um array gera um erro de execução. No momento da criação de um array, os seus valores podem ser definidos. Declaração de um vetor Um exemplo: int[] v = new int[10]; – v é declarado com um vetor de inteiros – a expressão new int[10] cria efeEvamente um vetor de inteiros, de tamanho 10. – o comando de atribuição associa o vetor criado ao vetor v. Declaração de um vetor • Tendo declarado a variável int[] v, esta pode ser associada a qualquer vetor de inteiros. Um exemplo: ... int[] v10 = new int[10]; int[]v20 = new int[20]; int i = x+10/16; int[] v; ... switch(i) { case 10: v = v10; break; case 20: v = v20; break; default: v = new int[i]; break; } ... Lista de valores • Um vetor também ser pode ser criado a parEr de uma lista de valores entre { e } e separados por vírgula. • Exemplos: int[] primos = { 2,3,5,7,11,13,17,19 }; char[] dd = { 'd','s','t','q','q','s','s'}; string[] meses = {"jan","fev","mar","abr" }; Acesso aos elementos • Tendo criado um vetor, o acesso aos seus elementos é feito a parEr da sua posição, ou índice, no vetor. • Se um vetor tem N elementos, os índices dos seus elementos vão variar entre 0 e N-‐1. • O índice para acesso ao elementos deve ser um valor inteiro entre 0 e N-‐1, definido por uma expressão. Um exemplo ... int[] f = new int[10]; f[0] = 0; f[1] = 1; for( int i = 2; i < 10; i++ ) f[i] = f[i-1]+f[i-2]; ... Outro exemplo public static void Main(string[] args){ int[] primos = { 2,3,5,7,11,13,17,19,23,29,31 }; int[] somas = new int[11]; for(int i = 0; i < 11; i++){ somas[i] = 0; for(int j = 0; j <= i; j++) somas[i] += primos[j]; } Console.Write("somas:",somas); for(int i = 0; i < 11; i++) Console.Write(" {0}",somas[i]); Console.WriteLine(); } Valor inicial de um vetor • O valor inicial de um vetor pode ser definido através de uma tupla da forma { valor, valor, ... , valor } • O número de valores na tupla e o seu Epo devem ser companveis com o vetor. Um exemplo ... int[] p = { 2,3,5,7,11, 13 }; int[] s = { p[0]+p[1], p[2]+p[3],p[4]+p[5] }; string[] dias = { "seg","ter","qua","qui", "sex","sab","dom“ }; ... Arrays mulEdimensionais • É possível criar arrays de várias dimensões. • Isso permite a criação de estruturas para armazenar os valores de uma tabela. Percorrendo arrays • Os arrays podem ser facilmente preenchidos uElizando o comando while ou o for. Percorrendo arrays • A quanEdade de elementos em cada dimensão dos arrays pode ser obEda através do método getLength. • A quanEdade de elementos em todas as dimensões pode ser obEda através da propriedade Length. Propriedades e Métodos • obj.Length → Tamanho do vetor • Array.IndexOf(Array vetor, object value) → Procura a primeira ocorrência de valor em um vetor • Array.LastIndexOf(Array vetor, object value) → Procura a úlEma ocorrência de valor em um vetor • Array.Sort(Array vetor) → Ordena o vetor crescentemente • Array.Reverse(Array vetor) → Ordena o vetor decrescentemente Tamanho de um vetor ... for(int m = 0; m < dias_mes.Length; m++){ gastos[m] = new float[dias_mes[m]]; for(int d = 0; d < gastos[m].Length; d++) gastos[m][d] = 0.0F; } ... Recomendações da MS • Evite usar “_” (underline) • Não crie variáveis com o mesmo nome alterando somente entre maiúsculas e minúsculas • UElize nome de varáveis com minúsculas • Evite uElizar todas as letras maiúsculas (normalmente uElizado para definir constantes) • UElize notação camelCasing • Em classes, métodos, propriedades, enumeradores, interfaces, constantes, campos somente leitura e namespaces use notação PascalCasing
Compartilhar