terça-feira, 15 de fevereiro de 2011

Principais propriedades da classe Stream:



Métodos mais úteis da classe Stream:

A classe stream

É abstracta , e por isso não pode ser instanciada directamente. Ao implementar uma classe derivada de Stream deverá fornecer-se implementações para os métodos Read e Write.


Exemplo de escrita em um arquivo texto: StreamWriter


Public Shared Sub Main() ' Cria uma instância de um StreamWriter para escrever para um arquivo Using sw As StreamWriter = New StreamWriter("Macoratti.txt") ' Inclui algum texto sw.Write("Este é um teste") sw.WriteLine("-------------------") ' Outros objetos podem ser escritos no arquivo sw.Write("Data : ") sw.WriteLine(DateTime.Now) sw.Close() End Using End Sub


A classe Stream é implementada pelas seguintes classes:

BufferedStream: Fornece uma camada no buffer noutro stream para aumentar o desempenho.
FileStream: Fornece uma forma de ler e escrever arquivos.
MemoryStream: Fornece um stream usando a memória como forma de armazenamento.

NetworkStream:  Fornece uma forma de aceder a dados numa rede.
CryptoStream:  Fornece uma forma de suprimir dados para uma operação de criptografia.

De forma geral operações com stream envolvem operações de leitura , escrita e procura. ( read, write , seek ).

Usar Streams envolve as seguintes operações fundamentais

Ler a partir de streams. A leitura é a transferência de dados de um stream numa estrutura de dados como um array de bytes;
Escrever para streams. A escrita é a transferência de dados a partir de uma estrutura de dados para um stream;
Streams podem suportar a procura. A procura é a consulta e modificação de uma posição actual no interior do stream. A capacidade de busca depende do stream.

Exemplo de leitura de um arquivo texto : StreamReader

Public Shared Sub Main() Try ' Cria uma instância de um StreamReader para ler um arquivo                          Using sr As StreamReader = New StreamReader("Macoratti.txt") Dim line As String ' Lê e exibe as linhas do aruquivo até o fim Do line = sr.ReadLine() Console.WriteLine(line) Loop Until line Is Nothing sr.Close() End Using Catch E As Exception ' Exibe mensagem de erro Console.WriteLine("O arquivo não pode ser lido") Console.WriteLine(E.Message) End Try End Sub

CLASSESTREAM

Define propriedades e métodos que permitem realizar operações genéricas com fluxo de bytes (streams) : ler , escrever, etc.

Nota: Um stream pode ser considerado um  fluxo sequêncial de bytes com um arquivo, um dispositivo de entrada/saida, um processo de comunicação entre dois pontos ou um socket TCP/IP. (Após esta explicação eu vou continuar a usar a palavra stream na sua forma original sem tradução.)

Streams

O conceito de stream permite-nos abstrair-nos dos detalhes da estrutura de dados subjacente e utilizar um conjunto de métodos comum a vários tipos de streams.
Uma stream encapsula uma sequência de dados, frequentemente bytes.
Uma stream possui uma fonte e um destino.
Se um trecho de código escreve numa stream, ele é a fonte deste.
Se um trecho de código lê de um stream, ele é o destino deste.

Definição
Uma stream pode ser considerado um  fluxo sequêncial de bytes com um arquivo, um dispositivo de entrada/saida, um processo de comunicação entre dois pontos ou um socket TCP/IP.
Usar Streams envolve as seguintes operações fundamentais:
Ler a partir de streams. A leitura é a transferência de dados de uma stream numa estrutura de dados como um array de bytes;
Escrever para streams. A escrita é a transferência de dados a partir de uma estrutura de dados para uma stream;

As Streams podem suportar a busca.
A busca é a consulta e modificação de uma posição actual no interior da stream.
A capacidade de busca depende da stream.
O StreamReader e StreamReader são duas classes para de manipular ficheiros de texto.
Veremos de seguida um exemplo.

Imports System
Imports System.IO

Module module1
Public Sub Main()
Try
escrever()
' Criar uma intância de uma streamreader para ler dum ficheiro.
Dim sr As StreamReader = New StreamReader("testfile.txt")
Dim line As String
'ler e escrever as linhas do ficheiro até ao fim deste
Do
line = sr.ReadLine()
Console.WriteLine(line)
Loop Until line Is Nothing
sr.Close()

Catch E As Exception
' mostrar ao utilizador o que correu mal
Console.WriteLine("The file could not be read:")
Console.WriteLine(E.Message)
Console.ReadKey()
End Try
Console.ReadKey()
End Sub

Public Sub escrever()
' Cria uma instância de uma StreamWriter para escrever num ficheiro
Dim sw As StreamWriter = New StreamWriter("testfile.txt")
' Inclui algum texto
sw.Write("Este é um teste")
sw.WriteLine("-------------------")
' Outros objectos podem ser escritos no ficheiro
sw.Write("Data : ")
sw.WriteLine(DateTime.Now)
sw.Close()

End Sub

POO Avaçanda - Excepções !

No Visual Basic .NET nós podemos criar as nossas próprias excepções.
Para isso apenas temos de criar classes que derivem da classe Exception

' Definir a classe que vai tratar o erro específico
Public Class MyParameterOutOfRangeException
Inherits Exception
Public Sub New( )
MyBase.New(“O valor passado em MyParameter " _
& " está for a de limite. O valor deverá estar entre
& " 10 e 100.")
End Sub
End Class
' ...
________________________________________________________

' Definição do método que possa disparar a nossa excepção
Public Sub SomeMethod(ByVal MyParameter As Integer)
' Assegurar que o argumento é válido.
If (MyParameter < 10) Or (MyParameter > 100) Then
Throw New MyParameterOutOfRangeException( )
End If
' Corpo do método
' ...
End Sub

Public Sub SomeCaller( )

Try
SomeMethod(500)
Catch e As MyParameterOutOfRangeException
' ...
End Try
End Sub

POO Avaçanda - Excepções ...

Por vezes temos de garantir que certa parte do código é executado mesmo que tenha ocorrido uma excepção de forma a não comprometer a nossa aplicação.
Por exemplo se um ficheiro for aberto, este tem se ser fechado mesmo que ocorra uma excepção.
O bloco Try contém o bloco Finally para este propósito.
Este bloco de código é sempre executado haja ou não um excepção.

Dim s As System.IO.Stream =_
System.IO.File.Open("c:\test.txt", System.IO.FileMode.CreateNew)
Try
' Fazemos alguma coisa com o ficheiro.
' ...
Catch e As Exception
' Handle any exceptions.
' ...
Finally
‘A stream deverá ser fechada havendo ou não excepção
s.Close( )
End Try

O Visual Basic .NET pode intencionalmente tratar de excepções para indicar erros ou ocorrências invulgares.
Vejamos um exemplo em que existe um método que recebe valores nos argumentos, mas estes têm certos limites.
Este controlo é feito com a palavra throw.

POO Avaçanda - Excepções conti...

Message
É a mensagem associada à excepção. Geralmente é uma explicação da causa que gerou a excepção.
O tipo é String

Source
O nome da aplicação ou objecto onde a excepção ocorreu
O tipo é String

StackTrace
É uma representação textual da lista de instruções em que o programa se encontrava a quando da excepção.
O tipo é String.

TargetSite
É uma referência para um objecto do tipo da classe mãe que representa o método onde a execepção ocorreu. Se o sistema não conseguir obter nada então o seu valor será Nothing.
O tipo é String

ToString
Retorna a representação textual da excepção. Esta inclui o typo de excepção a mensagem e a StackTrace.

Quando ocorre uma excepção não é fácil retomar a execução do bloco de código que gerou a excepção, se isso for uma coisa importante, a solução é marcar o código de alguma maneira e fazer com que este volte a ser executado.
Em seguida apresenta-se um exemplo:

Dim bSuccess As Boolean = False

Do
Try
' Some code that is to be protected.
' ...
bSuccess = True

Catch e As Exception
' Some recovery action.
' ...
End Try

Loop Until bSuccess

POO Avaçanda - Excepções Cont

Pelo facto de todas as exepções derivarem do tipo Exception, as propriedades (atributos) e
métodos estão acessíveis em todos os tipos de excepção.
De facto a maioria dos tipos de excepções não definem novos métodos.
As propriedades mais importantes das excepções são:
HelpLink
É o URL que liga a um ficheiro de ajuda que explica o erro em detalhe. 
 O tipo de dados é uma string

POO Avaçanda - Excepções Cont...

A variável declarada logo a seguir ao catch é do tipo Exception.
Todas as expeções são representadas pelos tipos de que derivam, directa o indirectamente do
tipo excepção.

O as Type_name do bloco catch especifica o tipo de excepcção de que estamos a tratar e
este está associado ao bloco de instruções imediatamente abaixo. 

Try 
  Dim x As Integer = 0
  Dim y As Integer = 1 \ x
 Catch e As System.DivideByZeroException
        Console.WriteLine(e.Message)
End Try

Neste exemplo estamos a tratar de uma excepção em concreto.

Podemos ainda tratar de várias excepções do mesmo bloco try

Try
Catch e As System.DivideByZeroException
' ...
Catch e As System.OverflowException
' ...
End Try

POO Avaçanda - Excepções Continuação

No visual Basic.NET os programas podem tratar das excepções.
Isto é possível colocando código com grande potencial de gerar excepções dentro de blocos Try…End Try
O exemplo seguinte mostra como poderemos tratar da excepção gerada por uma divisão por zero.

Try
Dim x As Integer = 0
Dim y As Integer = 1 \ x
Catch e As Exception
Console.WriteLine(e.Message)
End Try

Quando o programa tenta dividir o inteiro por zero ocorre uma excepção, então o programa salta para o bloco onde está o Catch e executa essa parte do código, sem que isso termine a execução do mesmo.

Se nenhuma excepção ocorrer dentro do bloco try, então o programa salta o bloco catch

POO Avaçanda - Excepções

Por vezes erros ou condições especiais levam a que um determinado programa pare de
funcionar. 
Um exemplo clássico desta ocorrência é a divisão de um número por zero.
  
         Dim x As Integer = 0 
Dim y As Integer = 1 \ x 
Quando o programa lê a linha de código que contém a divisão de um nº inteiro por
zero ocorre um excepção.
Uma excepção é uma ocorrência que não é considerada normal no correcto fluxo do
programa. Esta excepção é detectada e são tomadas as acções apropriadas.
Normalmente o programa aborta a sua execução.

POO Avançada

Conteúdos:

Introdução ao conceito de Excepção
Manipulação de Excepções
Criação de Excepções próprias
Introdução ao conceito de Stream
Derivação de Streams

Módulo 11 : Sumário

Sumário:
Introdução ao Módulo 11 - Programação Orientada a Objectos Avançada.
ClasseStream.
Revisão da matéria Dada.