Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java...

13
1 Programa Programação ão Orientada Orientada a a Objetos Objetos Alexandre César Muniz de Oliveira 2 Sumário do Curso 1. Evolução das linguagens 2. A plataforma java 3. A linguagem java: operadores, instruções e funções básicas 4. Orientação a objetos usando java: classes, objetos, métodos, polimorfismo, encapsulação, implementação 5. Aplicações 3 Etapas 1. Introdução à linguagem java 2. Conceitos básicos de POO 3. Herança e reuso 4. Aplicações 4 Colaboração w Rafael Fernandes Lopes – http://www.deinf.ufma.br/~rafaelf/ w Helder da Rocha – http://www.argonavis.com.br/cursos/java/j100 /index.html w Programação Orientada a Objetos com Java – David J. Barnes & Michael Kölling 5 Software de apoio w API Java: – http://java.sun.com/j2se/1.3/docs/api/ w Eclipse: – http://www.eclipse.org/downloads/index.php 6 Programa Principal Dados módulo 1 Dados + Dados1 Proc 1 módulo 2 Dados + Dados2 Proc 2 Proc 3 Evolução das Linguagens

Transcript of Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java...

Page 1: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

1

ProgramaProgramaççãoão OrientadaOrientadaa a ObjetosObjetos

Alexandre César Muniz de Oliveira

2

Sumário do Curso

1. Evolução das linguagens2. A plataforma java3. A linguagem java: operadores, instruções

e funções básicas 4. Orientação a objetos usando java: classes,

objetos, métodos, polimorfismo, encapsulação, implementação

5. Aplicações

3

Etapas

1. Introdução à linguagem java2. Conceitos básicos de POO3. Herança e reuso4. Aplicações

4

Colaboração

w Rafael Fernandes Lopes– http://www.deinf.ufma.br/~rafaelf/

w Helder da Rocha – http://www.argonavis.com.br/cursos/java/j100

/index.html

w Programação Orientada a Objetos com Java – David J. Barnes & Michael Kölling

5

Software de apoio

w API Java:– http://java.sun.com/j2se/1.3/docs/api/

w Eclipse:– http://www.eclipse.org/downloads/index.php

6

Programação ModularPrograma Principal

Dados

módulo 1

Dados + Dados1

Proc 1

módulo 2

Dados + Dados2

Proc 2 Proc 3

Evolução das Linguagens

Page 2: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

2

Evolução das Linguagens

w Topologias

8

Objeto 1

Dados

Objeto 4

Dados

Objeto 3

Dados

Objeto 2

Dados

Evolução das Linguagens

w Linguagem orientada a objetos

9

Evolução das Linguagens

10

A plataforma Java

w Java é uma plataforma de software que possibilita que um mesmo programa execute em diversas arquiteturas de hardware/softwarew Bytecodes gerados pela compilação não

são específicos de uma determinada máquinaw Bytecode é um código intermediário

interpretável por uma máquina virtual java(JVM)

11

A plataforma Java

Programa Java

Máquina Virtual Java

Windows

Máquina 1

Programa Java

Máquina Virtual Java

Linux

Máquina 2

12

A plataforma Java

w Java Development Kit– Compilador Java

(javac)

– Interpretador Java -JVM (java)

Page 3: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

3

13

A plataforma Java

14

A plataforma Java

w Compilação just- in- time (tradução dinâmica)– Tradução de bytecode em código nativo em tempo de

execução.– Sistemas que usam bytecode, tais como Perl, GNU

CLISP, e as primeiras versões de Java, o bytecode éinterpretado e executado em uma máquina virtual.

– Na compilação dinâmica, o compilador pode ser usado em tempo de execução, traduzindo bytecode em código nativo e melhorando o desempenho do sistema.

– Compilações de bytecode para código de máquina são fáceis de serem escritos, pois o compilador javac jáfez muito do trabalho necessário.

15

A plataforma Java

w Applets

16

A plataforma Java

w Java Development Kit (JDK)– AppletViewer (appletviewer)– Java Debugger (jdb)– Gerador Automático de Documentos (javadoc)– Compilador Just- in-Time (JIT)– Java Virtual Machine (JVM)

17

A plataforma Java

w Software Development Kit (SDK=JDK) – Java versão 1.2+ = Java 2 – Java versão 1.5+ = Java 5.

w Java Runtime Environments (JRE) – responsávelpor criar a JVMw Java 2 Standard Edition J2SE se refere aos JDK

ou JRE. w Java 2 Enterprise Edition (J2EE) permite

escrever código servidor mais facilmentew Java 2 Micro Edition (J2ME) – versão “enxuta”

da JRE para ambientes com poucos recursos

18

A plataforma Java

Page 4: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

4

19

HelloWorld Java

class HelloWorld {public static void main (String args[]) {System.out.println (“Alô Mundo Cruel”);}

}

20

HelloWorld Java

w Assinatura do método:– public static void main(String args[])

• public - qualificador de acessibilidade do método • static - qualificador de compartilhamento• void - valor de retorno• main - nome do método• (String args[]) - argumento do método. Vetor de

Strings que representam os argumentos de linha de comando

21

HelloWorld Javaimport javax.swing.*;

public class HelloJava {public static void main( String[] args ) {JFrame frame = new JFrame( "Hello Java!" );JLabel label = new JLabel("Hello Java!", JLabel.CENTER );frame.getContentPane( ).add( label );frame.setSize( 300, 300 );frame.setVisible( true );

}}

22

HelloWorld Java

23

Operadores

w Operadores Aritméticos

Função Sinal ExemploAdição + X + YSubtração - X - YMultiplicação * X * YDivisão / X / YResto da divisão inteira % X % YSinal negativo - -XSinal positivo + +XIncremento unitário ++ ++X ou X++Decremento unitário -- --X ou X--

24

Operadoresw Operadores Aritméticosclass Teste {

public static void main (String args[]) {int x = 10; int y = 3; // declaração de variáveisSystem.out.println (“X = ” + x);System.out.println (“Y = ” + y);System.out.println (“-X = ” + (-x));System.out.println (“X/Y = ” + (x/y));System.out.println (“Resto de X por Y = ” + (x%y));System.out.println (“Divisão inteira de X por Y = ” +(int)(x/y));System.out.println (“X + 1 = ” + (++x));

}}

Page 5: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

5

25

Operadores

w Operadores Relacionais

Função Caractere(s) utilizado(s) ExemploIgual == X == YDiferente != X != YMaior que > X > YMaior ou igual a >= X >= YMenor que < X < YMenor ou igual a <= X <=Y

26

Operadores

w Operadores Lógicos

Função Caractere utilizado ExemploE lógico ou AND && X && YOu lógico ou OR || X || YNegação ou NOT ! !X

27

Conversão de Tipos

w Conversão de Tipos

Supondo a variável x Converter em A variável y recebe o valor convertidoint x = 10 float float y = (float) xint x = 10 double double y = (double) xfloat x = 10.5 int int y = (int) xString x = "10" int int y = Integer.parseInt(x)String x = "20.54" float float y = Float.parseFloat(x)String x = "20.54" double double y = Double.parseDouble(x)String x = "Java" Vetor de bytes byte b[] = x.getBytes()int x = 10 String String y = String.valueOf(x)float x = 10.35 String String y = String.valueOf(x)double x = 254.34 String String y = String.valueOf(x)byte x[] - (x é um vetor de bytes) String String y = new String(x)

28

Vetores

29

Exceções

w Fornecem capacidade de tratamento de eventos que interrompam o fluxo normal de instruçõesw Eventos esperados ou inesperados que podem

ocorrer durante a execução de um programaw Vantagens:

– Tratamento de erro em separado – Propagação de erros– Agrupamento de erros

30

Exceções

w Programação defensiva– Antecipar o que pode sair errado

w Erros surgem freqüentemente do ambiente:– URL incorreto inserido; e– interrupção da rede.

w Processamento de arquivos é particularmente propenso a erros:– arquivos ausentes; e– falta de permissões apropriadas.

Page 6: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

6

31

Exceçõesw Vantagens

– Nenhum valor de retorno ‘especial’ necessário.– Erros não podem ser ignorados no cliente.

• O fluxo normal de controle é interrompido.

– Ações específicas de recuperação são encorajadas.

w Um objeto de exceção é construído:– new ExceptionType("...");

w O objeto exceção é lançado:– throw ...

32

Exceçõesw Lançamento:/*** Pesquisa um nome ou um número de telefone e retorna* os detalhes do contato correspondentes.* @param key O nome ou número a ser pesquisado.* @return Os detalhes correspondentes à chave,ou null * se não houver nenhuma correspondência.* @throws NullPointerException se a chave for null.*/

public ContactDetails getDetails(String key){

if(key == null){throw new NullPointerException(

“Chave nula em getDetails");}return (ContactDetails) book.get(key);

}

33

Exceções

classes da biblioteca-padrão

classes definidas pelo usuário

34

Exceçõesw Exceções verificadas:

– subclasse de Exception;– utilizadas para falhas iniciais; e– onde a recuperação talvez seja possível.

w Exceções não-verificadas:– subclasse de RuntimeException;– utilizadas para falhas não-antecipadas; e– onde a recuperação não é possível.

35

Exceçõesw O método de lançamento termina

prematuramente.w Nenhum valor de retorno é retornado.w Controle não retorna ao ponto da chamada do

cliente.– Portanto, o cliente não pode prosseguir de qualquer

maneira.

w Um cliente pode apenas ‘capturar’ uma exceção.

36

Exceçõesw Não-verificadas

– A utilização dessas exceções ocorre de forma ‘não-verificada’ pelo compilador.

– Causam o término do programa se não capturadas.

• Essa é a prática normal.– IllegalArgumentException é um

exemplo típico.

Page 7: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

7

37

Exceções

public void ContactDetails getDetails(String key){if(key == null) {

throw new NullPointerException(“Chave nula em getDetails");

}if(key.trim().length() == 0) {

throw new IllegalArgumentException(“Chave vazia em getDetails");

}return (ContactDetails) book.get(key);}

38

Exceções

w Exceções verificadas devem ser capturadas.w O compilador assegura que a utilização

dessas exceções seja fortemente controlada.w Se utilizadas apropriadamente, é possível

recuperar-se das falhas.

39

ExceçõeswMétodos que lançam uma exceção

verificada devem incluir uma cláusula throws (!= throw):

public void saveToFile(String destinationFile)throws IOException

40

Exceçõesw Clientes que capturam uma exceção devem

proteger a chamada com um bloco try:try {

Proteja uma ou mais instruções aqui.}catch(Exception e) {

Informe da exceção e recuperação aqui.}

41

Exceções

try{addressbook.saveToFile(filename);tryAgain = false;

}catch(IOException e) {

System.out.println("Unable to save to " + filename);tryAgain = true;

}

1. Exceção lançada a partir daqui.

2. Controle transferido para cá.

42

ExceçõeswMúltiplas exceções

try {...ref.process();...

}catch(EOFException e) {

// Toma a ação apropriada para uma exceção // de final de arquivo alcançado....

}catch(FileNotFoundException e) {

// Toma a ação apropriada para uma exceção // de final de arquivo alcançado....

}

Page 8: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

8

43

Exceçõesw Múltiplas exceções

public class Excecao {try {

int num1 = Integer.parseInt (args[0]);int num2 = Integer.parseInt (args[1]);System.out.println (“Soma = ” + (num1 + num2));System.out.println (“Subtração = ” + (num1 - num2));System.out.println (“Multiplicação = ” + (num1 * num2));System.out.println (“Soma = ” + (num1 / num2));

} catch (ArithmeticException e) {System.out.println (“Erro de divisão por zero”);

} catch (ArrayIndexOutOfBoundsException e) {System.out.println (“Número de argumentos inválido”);

} catch (NumberFormatException e) {System.out.println (“Digite apenas valores inteiros”);

} }

44

Exceções

try {Proteja uma ou mais instruções aqui.

}catch(Exception e) {

Informe e recupere a partir da exceção aqui.}finally {

Realize quaisquer ações aqui comuns quer ou nãouma exceção seja lançada.

}

45

Exceções

46

Exceçõesw Múltiplas exceções

try {

} catch (fileOpenFailed) { fazAlgo1();} catch (sizeDeterminationFailed){fazAlgo2();} catch (memoryAllocationFailed){fazAlgo3();} catch (readFailed) {fazAlgo4();} catch (fileCloseFailed) {throw new Substitue();}finally {fazAlgo5();}

// abre o arquivo// determina o seu tamanho// aloca a memória necessária// lê o arquivo para a memória// fecha o arquivo

47

Exceçõesw Uma clásula finally é executada mesmo se

uma instrução de retorno for executada nas cláusulas try ou catch.w Ainda há uma exceção não-capturada ou

propagada via a cláusula finally.w Pode ser usado manter códigos de

liberação de recursos

48

Exceções

w Definição de novas execeções– Estenda Exception ou Runtime-Exception.

– Defina novos tipos para fornecer melhores informações diagnósticas.

– Inclua informações sobre a notificação e/ou recuperação.

Page 9: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

9

49

Entrada de Dados

w Leitura de caracteres:– System.in.read()– System.in.read(byte[] b)– System.in.read(byte[] b, int off, int len)

w Polimorfismo: – Primeiro contato

wHelp: – http://java.sun.com/j2se/1.3/docs/api/

50

Entrada de Dados

w System.in.read(byte[] b, int off, int len)– public abstract int read(char[] cbuf, int off, int len)

throws IOException• Read characters into a portion of an array . This method will

block until some input is available, an I/O error occurs, or theend of the stream is reached.

• Parameters:– cbuf - Destination buffer – off - Offset at whichto start storingcharacters– len - Maximum number of charactersto read

• Returns:– The number of charactersread, or -1 if the endof the stream

has been reached• Throws:

– IOException - If an I/O erroroccurs

51

Entrada de Dadosimport java.io.*;class LeTeclado {

public static void main (String args[]) {String s = “”;DataInputStream dado;try { // NECESSÁRIO!!!

dado = new DataInputStream (System.in);s = dado.readLine();System.out.println (“Texto: ” + s);

} catch (Exception e) {System.out.println (“Houve um erro !”);

}}

} 52

Comandos de decisão public class NumArgs {public static void main (String args[]) {

if (args.length == 1) {try {

float x = Float.parseFloat(args[0]);if (x <= 10 && x >= 0) {

System.out.println (“Nota = ” + x + “valor válido”);} else { System.out.println (“Nota = ” + x + “valor inválido”); }

} catch (NumberFormatException e) {System.out.println (“Digite apenas valores numéricos”);

}} else {

System.out.println (“Número de argumentos inválidos”);}}

}

53

Comandos de decisão

switch (<expressão>) {case 1: instruções; break;case 2: instruções; break;case 3: instruções; break;default: instruções;

}

54

Comandos de decisãopublic class NumArgs2 {public static void main (String args[]) {

if (args.length == 1) {int x = Integer.parseInt (args[0]);switch (x) {

case 0: System.out.println (“zero”); break;case 1: System.out.println (“um”); break;case 2: System.out.println (“dois”); break;default: System.out.println (“Numero desconhecido”);

}} else { System.out.println (“Numero de argumentos inválido”); }

}}

Page 10: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

10

55

Laços de repetição

w Forçam a repetição da execução de um bloco de código até uma determinada condição ocorraw São eles:

– For– While– Do-while

56

Laços de repetição

for (inicialização; condição; inc/decremento){

<conjunto de instruções>}

57

Laços de repetição

public class LacoFor {public static void main(String args[]) {

for (int i = 10; i > 0; i--) {System.out.print (i + “ ”);

}System.out.println (“Acabou!”);

}}

58

Laços de repetição

while (<condição>) {<conjunto de instruções>

}//------------------------------------do {

<conjunto de instruções>} while (<condição>);

59

Laços de repetição

public class LacoWhile {public static void main(String args[]) {

int i = 10;while (i > 0) {

System.out.print (i + “ ”);i--;

}System.out.println (“Acabou!”);

}}

60

Laços de repetição

w Recuperação de exceção// Tenta salvar o catálogo de endereços.boolean successful = false;int attempts = 0;do {

try {addressbook.saveToFile(filename);successful = true;

}catch(IOException e) {

System.out.println(“Impossível salvar em " + filename);attempts++;if(attempts < MAX_ATTEMPTS) {

filename = “nome_alternativo”;}

}} while(!successful && attempts < MAX_ATTEMPTS);if(!successful) {System.out.println(“Desisto de salvar em " + filename);

}

Page 11: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

11

61

Funções Matemáticas

w Permitem efetuar diversos tipos de cálculos matemáticosw Classe Math

– Math.<nome do método> (argumentos)– Constantes Matemáticas:

• Math.PI - valor de pi• Math.E - valor da base dos logaritmos naturais

62

Funções Matemáticasw Método ceil()

– Arredondar um Double para o seu próximo inteiro– Math.ceil (<valor do tipo double>)– Exemplo:class Arred1 {

public static void main (String args[]) {double A = 5.2, B = 5.6, C = -5.8;System.out.println (“Arredondando 5.2 = ” + Math.ceil (A));System.out.println (“Arredondando 5.6 = ” + Math.ceil (B));System.out.println (“Arredondando -5.8 = ” + Math.ceil (C));

}}

63

Funções Matemáticas

wMétodo floor()– Arredondar um Double para o seu inteiro

anterior– Math.floor (<valor do tipo double>)

class Arred2 {public static void main (String args[]) {

double A = 5.2, B = 5.6, C = -5.8;System.out.println (“Arredondando 5.2 = ”

+ Math.floor(A));System.out.println (“Arredondando 5.6 = ”

+ Math.floor(B));System.out.println (“Arredondando -5.8 = ”

+ Math.floor(C));}} 64

Funções Matemáticas

wMétodo max()– Retorna o maior valor entre dois números

(double, float, int ou long)– Math.max (<valor1>, <valor2>)class Compara1 {

public static void main (String args[]) {double A = 10, B = -5.9;System.out.println (“O maior entre 10 e –5.9 é:”

+ Math.max (A, B));}}

65

Funções Matemáticas

w Método min()– Retorna o menor valor entre dois números (double,

float, int ou long)– Math.min (<valor1>, <valor2>)class Compara2 {

public static void main (String args[]) {double A = 10, B = -5.9;System.out.println (“O maior entre 10 e –5.9 é:”

+Math.min (A, B));}}

66

Funções Matemáticas

wMétodo sqrt()– Raiz quadrada de um determinado número– Math.sqrt (<valor do tipo double>)class Raiz {

public static void main (String args[]) {double A = 900;System.out.println (“A raiz quadrada de 900 é:”

+ Math.sqrt (A));}}

Page 12: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

12

67

Funções Matemáticas

wMétodo pow()– Elevar um número a uma potência– Math.pow (<valor da base>, <valor da

potência>)class Potencia {

public static void main (String args[]) {double base = 5.5, potencia = 2;System.out.println (“5.5 elevado a 2 é:”

+ Math.pow (base, potencia));}}

68

Funções Matemáticas

wMétodo random()– Geração de valores randomicos (0 – 1)– Math.random ()

class Randomico {public static void main (String args[]) {

System.out.println (“Número randômico de 0 a 99:”+ (int) (Math.random() * 100) );

}}

69

Funções de String

w String = União de um conjunto de caracteresw Instâncias da classe Stringw Cadeia de caracteres entre “”w Sintaxe:

– <nome da string>.<nome do método> (argumentos)

70

Funções de String

wMétodo length()– Retorna o tamanho de uma String– <string>.length ()class TamanhoStr {

public static void main (String args[]) {String A = “Aprendendo Java”;System.out.println (“String: ” + A);System.out.println (“O tamanho da string é:

” + a.length());}}

71

Funções de String

wMétodo charAt()– Retorna o caractere de uma determinada

posição de uma String– <string>.charAt (<índice>)class StrPosicao {

public static void main (String args[]) {String A = “Aprendendo Java”;System.out.println (“String: ” + A);System.out.println (“Caractere 5: ” +

a.charAt(5));}}

72

Funções de String

w Métodos toUpperCase e toLowerCase()– Retorna uma string com caracteres maiúsculos ou

minúsculos– <string>.toUpperCase () e <string>.toLowerCase ()class StrMaiMin {

public static void main (String args[]) {String A = “ARROZ”, B = “batata”;System.out.println (“ARROZ em minúscula: ” +

A.toLowerCase());System.out.println (“batata em maiúscula: ” +

B.toUpperCase());}}

Page 13: Sumário do Curso Programação Orientadaacmo/grad/lp2/POO_Especial_00.pdf14 A plataforma Java wCompilação just-in-time (tradução dinâmica) – Tradução de bytecode em código

13

73

Funções de Stringw Método substring()

– Retorna uma parte de uma string– <string>.substring (<índice inicial>, [<índice final>])

class StrSub {public static void main (String args[]) {

String A = “Aprendendo Java”;System.out.println (“Do 3º caractere até o fim: ” +

A.substring(2));System.out.println (“Do 1º caractere até o 10º: ” +

A.substring(0, 10));System.out.println (“Do 12º caractere até o 15º: ” +

A.substring(11, 15));}

}74

Funções de String

wMétodo trim()– Remove os espaços em branco do início e do

final de uma string– <string>.trim ()class LimpaEspacos {

public static void main (String args[]) {String frase = “ Cristo: o rei dos reis ”;System.out.println (“Com espaços: *”

+ frase + “*”);System.out.println (“Sem espaços: *”

+ frase.trim() + “*”);}}

75

Funções de String

wMétodo replace()– Substitui caracteres individuais em uma

determinada string– <string>.replace (<caractere a ser

substituído>, <substituição>)

76

Funções de String

wMétodo replace()class Substituicao {

public static void main (String args[]) {String A = “banana nanica”;System.out.println (“Troca caractere ‘a’ por ‘u’: ”

+ A.replace(‘a’, ‘u’));System.out.println (“Troca caractere ‘n’ por ‘N’: ”

+ A.replace(‘n’, ‘N’));System.out.println (“Troca espaço por ‘_’: ”

+ A.replace(‘ ’, ‘_’)); }}

77

Funções de Stringw Método String.valueOf()

– Converte diversos tipos de dados em strings– String.valueOf (<nome da variável a ser convertida>)class Substituicao {

public static void main (String args[]) {int a = 11; long b = 222; float c = 3333; double d = 4.444;String s = String.valueOf (a) + “ ”+ String.valueOf (b) + “ ”+ String.valueOf (c) + “ ”+ String.valueOf (d);System.out.println (“Conteúdo de s: ” + s);}}