Arquivo de fevereiro, 2014

API – TreeSet, Set, SortedList – Java +, C++, C#

Publicado: 17 de fevereiro de 2014 em C#, C/C++, Java

O que é API?

Application Programming Interface (ou Interface de Programação de Aplicativos) é um conjunto de rotinas e padrões estabelecidos por um software para a utilização das suas funcionalidades por aplicativos que não pretendem envolver-se em detalhes da implementação do software, mas apenas usar seus serviços.

De modo geral, a API é composta por uma série de funções acessíveis somente por programação, e que permitem utilizar características do software menos evidentes ao utilizador tradicional.

Por exemplo, programas de desenho geométrico possuem uma API específica para criar automaticamente gráficos geométricos de acordo com padrões definidos pelo utilizador.

Introdução a API

Uma linguagem de programação é um método padronizado para comunicar instruções para um determinado hardware. As grandes empresas de tecnologia desenvolvem hardware e também desenvolvem linguagens de programação para que seu hardware possa ser controlado de um modo mais fácil e amigável do que linguagem de maquina.

Como a evolução do hardware as linguagens de programação também foram evoluindo, empresas começaram a disputar tecnologia de desenvolvimento de novos hardwares e esta historia é recheada de brigas por suas respectivas patentes, um exemplo de grandes disputas judiciais entre empresas que escrevem linguagens de programação foi a Oracle x Google, a  Oracle detentora das patentes do Java  e a Google criadora do sistema operacional Android, que usa Java (API) como parte do seu sistema operacional e base para a programação de softwares da plataforma Android.

  • A maioria os softwares voltados para desenvolvedores possuem sua própria API.
  • As APIs são usualmente específicas para uma determinada tecnologia.
  •  Um framework pode ser baseado em várias bibliotecas de aplicação e  várias APIs.
  • Uma API também pode ser uma implementação de um protocolo.
  • Uma API pode ser desenvolvida para um grupo restrito de utilizadores, ou ela pode ser liberada para o público.
  •  A prática de publicação de APIs permitiu comunidades na web criar uma arquitetura aberta para a partilha de conteúdos e dados entre as comunidades e aplicações.
  • A Microsoft tem mostrado um forte compromisso com uma API compatível com versões anteriores, especialmente dentro de sua biblioteca API do Windows (Win32).
  • A Microsoft tornou as APIs Microsoft Windows publicas.
  • A Apple lança suas APIs Carbon e Cocoa, para que softwares possam ser escrito para suas plataformas.
  • A Sony faz de suas API oficiais para PlayStation disponível apenas para desenvolvedores PlayStation licenciados.

Tipos de APIs – Coleções

Existem vários tipos de APIs, neste post especificamente vamos utilizar APIs chamadas de Containers ou Collections, estas APIs fornecem varias funções para se criar uma coleção de objetos e manipula-los de forma enumerada. A Coleção mais famosa no mundo da orientação a objeto é pertencente a biblioteca para C++ chamada STANDARD TEMPLATE LIBRARY, as coleção pertencentes ao JCF (Java Collection Framework) ou Generic Collections (.NET Framework) foram baseadas na STL para C++.

Diferenças entre APIs

Aqui vamos programar com uma API Java que possui sua equivalência na linguagem C++, mas não possui equivalência na linguagem .NET C#, para usar esta API em desenvolvimento Windows é necessário usar a própria API Java(Oracle), usando a linguagem J#, que permite usar Java na plataforma .NET. Para C# usaremos uma API compatível.

.NET J#: http://msdn.microsoft.com/en-us/library/aa986696(v=vs.80).aspx

Utilizando API

TreeSet  – Java

Uma classe que representa um conjunto classificado de elementos. Os elementos são classificados usando o comparador fornecido através de construtor ou usando os métodos de interface comparáveis ​​implementadas pelos elementos.

Pacote: java.util

set  – C++

O conjunto de classe container STL é usado para o armazenamento e recuperação de dados de uma coleção em que os valores dos elementos contidos são únicos e servem como os valores de chave de acordo com a qual os dados são automaticamente ordenados. O valor de um elemento em um conjunto não pode ser alterado diretamente. Em vez disso, você deve excluir valores antigos e inserir elementos com novos valores.

Include: <set>

SortedList – C#

Representa uma coleção de pares de chave / valor que são classificados por chaves e são acessíveis por chave e por índice.

Namespace: System.Collections

Exemplo:

Neste exemplo utilizaremos três APIs diferentes em linguagens diferentes para criar o mesmo programa, uma lista ordenada de bandas de rock dos anos 60, fica como nota, que a linguagem C# não possui uma API equivalente então vamos utilizar uma outra API compatível,  Para usar a API equivalente em .NET é necessário utilizar a linguagem J# que utiliza as patentes da Oracle.

Java

package org.desenvolvimentoaberto;

import java.util.TreeSet;

  public class Arvore {

  public static void main(String[] args) {

  TreeSet<String> paradas = new TreeSet<>();

  paradas.add("Beatles");
  paradas.add("Rolling Stones");
  paradas.add("The Doors");
  paradas.add("Jefferson Airplane");
  paradas.add("The Who");

  System.out.println("TOP " +  paradas.size() + " Anos 60");
  System.out.println();

  System.out.println("Primeiro Lugar: " + paradas.first());

  System.out.println("Ultimo Lugar: " + paradas.last());
  System.out.println();

  System.out.println("Cai uma posição: " + paradas.last());

  paradas.remove(paradas.last());  paradas.add("Beach Boys");

  System.out.println("Sobe " + paradas.size() + " posições: " + paradas.first());
  System.out.println();

  System.out.println("Paradas Anos 60:");

  for (String s : paradas)
  {
     System.out.println(s);
  }
 }
}

C++

#include "stdafx.h"
#include <iostream>
#include <string>
#include <set>

using namespace std;

int _tmain(int argc, _TCHAR* argv[]) {

  set <string> paradas;
  set <string>::iterator primeiroI;
  set <string>::iterator ultimoI;
  set <int>::size_type quantidadeI;

  paradas.insert("Beatles");
  paradas.insert("Rolling Stones");
  paradas.insert("The Doors");
  paradas.insert("Jefferson Airplane");
  paradas.insert("The Who");

  primeiroI = paradas.begin();
  ultimoI = paradas.end();
  ultimoI--;
  quantidadeI = paradas.size();

  cout << "TOP " << quantidadeI << " Anos 60" << endl;  cout << endl;
  cout << "Primeiro Lugar: " << *primeiroI << endl;
  cout << "Ultimo Lugar: " <<  *ultimoI << endl;

  cout << endl;

  ultimoI = paradas.end();
  ultimoI--;

  cout << "Cai uma posicao: " << *ultimoI << endl;

  paradas.erase(*ultimoI);
  paradas.insert("Beach Boys");

  primeiroI = paradas.begin();
  quantidadeI = paradas.size();

  cout << "Sobe " << quantidadeI << " posicoes: " << *primeiroI << endl;
  cout << endl;

  cout << "Paradas Anos 60:" << endl;

  for (auto i : paradas)
  {
   cout << i << endl;
  }

  system("pause");
  return 0;
 }

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace DesenvolvimentoAberto {

class Program
{
  static void Main(string[] args)
  {
    SortedList paradas = new SortedList();

    paradas.Add("Beatles","");
    paradas.Add("Rolling Stones","");
    paradas.Add("The Doors","");
    paradas.Add("Jefferson Airplane","");
    paradas.Add("The Who","");

    Console.WriteLine("TOP " +  paradas.Count + " Anos 60");
    Console.WriteLine();

    Console.WriteLine("Primeiro Lugar: " + paradas.GetKey(0));
    Console.WriteLine("Ultimo Lugar: " + paradas.GetKey(paradas.Count -1));
    Console.WriteLine();

    Console.WriteLine("Cai uma posição: " + paradas.GetKey(paradas.Count - 1));

    paradas.Remove(paradas.GetKey(paradas.Count - 1));

    paradas.Add("Beach Boys","");

    Console.WriteLine("Sobe " + paradas.Count + " posições: " +  paradas.GetKey(0));
    Console.WriteLine();

    Console.WriteLine("Paradas Anos 60:");

    for (int i = 0; i < paradas.Count; i++)
    {
       Console.WriteLine(paradas.GetKey(i));
    }

    Console.ReadKey();
   }
  }
}

Módulos – Python – Linux

Publicado: 16 de fevereiro de 2014 em Python

Se você sair do interpretador Python e entrar novamente, as definições que você fez (funções e variáveis) são perdidas. Portanto, se você quer escrever um programa um pouco mais longo, é melhor usar um editor de texto para preparar a entrada de código  para o interpretador e executá-lo como um arquivo. Isto é conhecido como criação de um script.

Tal como o seu programa fica maior, você pode querer dividi-lo em vários arquivos para facilitar a manutenção. Você também pode querer usar uma função útil que você escreveu em vários programas sem copiar sua definição em cada programa.

Para suportar isto, Python tem uma maneira de colocar as definições em um arquivo e usá-los em um script ou em uma instância interativa do interpretador. Esse arquivo é chamado de módulo; definições de um módulo pode ser importadas para outros módulos ou ficar no módulo principal.

Sintaxe:

import [modulo]

from [modulo] import [função #1] , [função #2]

from [modulo] import *

Nota:

Em geral, a prática de importação * de um módulo ou pacote é desaprovado,  muitas vezes isto se faz com código mal legível. No entanto, não há problema em usá-lo para poupar a digitação em sessões interativas.

Caminho de Pesquisa de Módulos

Quando um módulo denominado [nome do modulo] é importado, o interpretador primeiro procura por um módulo integrado com esse nome. Se não for encontrado, então ele procura por um arquivo chamado [nome do modulo].py em uma lista de diretórios dadas pela variável sys.path.

sys.path é inicializada a partir destes locais:

  • O diretório que contém o script de entrada (ou o diretório atual).
  • PYTHONPATH (uma lista de nomes de diretório, com a mesma sintaxe que a variável PATH shell).
  • O padrão é dependente da instalação.

Após a inicialização, os programas em Python podem modificar o sys.path. O diretório que contém o script que está sendo executado é colocado no início do caminho de procura, à frente do caminho da biblioteca padrão. Isto significa que os scripts neste diretório serão carregados ao invés de módulos com o mesmo nome no diretório da biblioteca. Este é um erro, a menos se a substituição for proposital.

Exemplo:

Neste simples exemplos temos dois arquivos .py localizados no mesmo diretório e vamos importar as funções de um arquivo para dentro de outro um arquivo principal:

Python

Arquivo #1

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# modulos.py
# Importa OS
import os

# Limpa a tela
os.system("clear")

# Importa modulo
devaberto import devaberto

devaberto.msg("Menssagem enviada pela função do modulo devaberto")

Arquivo #2

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# devaberto.py
def msg(menssagem):
       print menssagem

Data Structures – Lists – Python – Linux

Publicado: 16 de fevereiro de 2014 em Python

Uma lista é um conjunto ordenado de valores, onde cada valor é identificado por um índice. Os valores que compõem uma lista são chamados elementos. Listas são similares a strings, que são conjuntos ordenados de caracteres, com a diferença que os elementos de uma lista podem possuir qualquer tipo

Listas podem ser usadas como Pilhas:

A pilha é uma estrutura de dados que armazena os dados na ordem LIFO (Last In First Out) – em português Último a Entrar Primeiro a Sair). A recuperação de dados será feita na ordem inversa de sua inserção.

Os métodos de lista tornam muito fácil de usar uma lista como uma pilha, onde o último elemento adicionado é o primeiro a ser recuperado (“LIFO”). Para adicionar um item ao topo da pilha, use append (). Para recuperar um item do topo da pilha, use pop () sem um índice explícito.

Comandos :

  • Lista.append ( x ) Adicionar um item ao final da Lista.
  • Lista.extend ( G ) Aumentar a Lista anexando todos os itens na Lista dada.
  • Lista.insert ( i , x ) Insere um item em uma determinada posição. O primeiro argumento é o índice do elemento, o segundo argumento é o valor a ser inserido.
  • Lista.remove ( x ) Retira o primeiro item da Lista cujo valor é x.
  • Lista.pop ( [i]) Remove o item na posição determinada na Lista, Lista.pop( ) remove e retorna o último item da Lista.
  • Lista.clear ( ) Remova todos os itens da Lista.
  • Lista.index ( x ) Retorne o índice na Lista do primeiro item cujo valor é x.
  • Lista.Count ( x ) Retorna o número de vezes que x aparece na Lista.
  • Lista.sort ( ) Organizar os itens da Lista no lugar.
  • Lista.reverse ( ) Inverte os elementos da Lista.

Exemplo:

Neste exemplo temos uma lista de bandas de rock e cantores de rock e vários exemplos de como usar este método.

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Lista.py

# Importa OS
import os

# Limpa a tela
os.system("clear")

# Listas Python

print "Listas Python\n"
print "Comandos: Insert, Append, Index, Reverse, Sort"

# Alimenta variavel
cantor= []

# Lista de Cantores

# Insere um valor = posição, valor
cantor.insert(0,"Ozzy Osbourne")

# Append acrescenta um valor
cantor.append ("Robert Plant")
cantor.append ("Axl Rose")
cantor.append ("Layne Staley")
cantor.append ("Scott Weiland")

# Lista de Bandas
banda = ["Black Sabbath","Led Zeppelin", "Gun n Roses"]
banda.append("Alice in Chains")
banda.append("Stone Temple Pilots")

# Index mostra o indice da lista
print "Robert Plant esta na posição numero: ", cantor.index("Robert Plant") print "\n"

# Função Imprime Listas
 def Lista():
         print "Bandas:"
         print banda
         print "Cantores:"
         print cantor
         print "\n"

print "Lista de Bandas e Cantores:"
Lista()

# Reverse inverte a lista
cantor.reverse()
banda.reverse()

# Imprime Lista
print "Lista Invertida" }
Lista()

# POP (indice)- Sem o indice retira o ultimo da lista (pilha)
# Last in - Firt out
banda.pop()
cantor.pop()

# Imprime Lista print "Pilha - Ultimo a entrar - Primeiro a sair"
Lista()

# Lista de Espera 
# First in - First out # Precisa importar Collections

from  collections import deque
banda = deque(banda)
cantor = deque(cantor)

banda.popleft()
cantor.popleft()

# Imprime Lista
print "Lista de espera - Primeiro a entrar - Primeiro a sair"
Lista()

Classes – Inheritance e Override – C++

Publicado: 16 de fevereiro de 2014 em C/C++

Inheritance (herança)

Programação orientada a objetos permite que classes possam herdar estados e comportamentos comuns usados de outras classes. Neste exemplo, bicicleta torna-se agora a superclasse de MountainBike. Na linguagem de programação, cada classe é permitido ter uma superclasse direta, e cada superclasse tem o potencial para um número ilimitado de subclasses.

Na herança, a classe derivada contém os membros da classe base acrescido de quaisquer novos membros adicionados. Como resultado, uma classe derivada pode se referir a membros da classe base (a não ser se os membros forem redefinidos na classe derivada). O operador de escopo resolução (::) pode ser usado para se referir a membros de classes base, diretos ou indiretos, quando os membros foram redefinidos na classe derivada.

Tipos de Heranças

A linguagem de programação C++ possui dois tipos de herança.

Simples:

Em “herança simples” uma forma comum de herança, as classes têm apenas uma classe base.

Múltiplas:

A nova versão do C + + introduziu um modelo de “herança múltipla”. Num gráfico de múltiplas heranças, as classes de derivados podem ter multiplos números de classes de bases diretas ou seja a classe AB deriva da classa A e de uma outra classe B.

Override

Métodos Override (substituição), em programação orientada a objeto, é um recurso de linguagem que permite que uma subclasse ou classe filha possa fornecer uma implementação específica de um método que já é fornecido por uma de suas superclasses ou classes pai.

A implementação Override das subclasses substitui a implementação na superclasse, fornecendo um método que tem o mesmo nome, mesmos parâmetros ou assinatura, e mesmo tipo de retorno como o método na classe pai.

Exemplo:

Neste exemplo damos a classe MountainBike todos os mesmos campos e métodos da classe bicicleta, e ainda permite que seu código se concentre exclusivamente sobre as características que a tornam única. Isso faz do código de suas subclasses fáceis de ler. Usamos metodos Override neste exemplo de duas maneiras, para substituir um método da subclasse e adicionar mais um construtor com parametros.

No entanto, você deve tomar cuidado para documentar corretamente o estado e o comportamento que cada superclasse define, uma vez que o código não irá aparecer no arquivo de origem de cada subclasse.

C++

Classe #1 – Principal.cpp

#include "stdafx.h"
#include <iostream>
#include <string>
#include "bicicleta.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
 {

// Metodo com Construtor Default
  Bicicleta bike1;
  bike1.modelo = "ZR069";
  bike1.quadro = "Ferro";
  bike1.rodas = "Ferro";
  bike1.freios = "Pastilhas";
  bike1.bicicleta();

  cout << endl;

  // Construtor Override

  Bicicleta bike2("XA 200", "Aluminio", "Pastilhas", "Aluminio");
  bike2.bicicleta();

  cout << endl;

// Herança - Montain Bike
  BicicletaMontanha  bike3;
  bike3.modelo = "Attack 500";
  bike3.quadro = "Fibra de Carbono";
  bike3.rodas = "Aluminio";
  bike3.freios = "Disco";
  bike3.amortecedores = "R3000";
  bike3.garrafa = "Aluminio 500ml";
  bike3.marchas = "18 Velocidades";
  bike3.gps = "Discovery 2.5";

// Metodo Override

  bike3.bicicleta();
  system("pause");
  return 0;

}

Classe #2 – Bicicleta.h

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class Bicicleta
 {
 public:
   string modelo;
   string quadro;
   string freios;
   string rodas;

// Construtor Default
   Bicicleta()   {}

// Construtor Override

  Bicicleta(string bmodelo, string bquadro, string bfreios, string brodas)
  {
   modelo = bmodelo;
   quadro = bquadro;
   rodas  = brodas;
   freios = bfreios;
  }

void bicicleta()
  {
   cout << " Bicicleta:" + modelo << endl;
   cout << " Quadro:" + quadro << endl;
   cout << " Rodas:" + rodas << endl;
   cout << " Freios:" + freios << endl;
  }

};

class BicicletaMontanha : public Bicicleta
 {
 public:
   string marchas;
   string amortecedores;
   string garrafa;
   string gps;

//Metodo Override

void bicicleta()
  {
   cout << " Bicicleta:" + modelo << endl;
   cout << " Quadro:" + quadro << endl;
   cout << " Rodas:" + rodas << endl;
   cout << " Freios:" + freios << endl;
   cout << " Marchas:" + marchas << endl;
   cout << " Amortecedores:" + freios << endl;
   cout << " Garrafa:" + garrafa << endl;
   cout << " Gps:" + gps << endl;
  }
   BicicletaMontanha()
  {
  }

};

Classes – Inheritance, Override e This – C#

Publicado: 16 de fevereiro de 2014 em C#

Inheritance (herança)

Programação orientada a objetos permite que classes possam herdar estados e comportamentos comuns usados de outras classes. Neste exemplo, bicicleta torna-se agora a superclasse de MountainBike. Na linguagem de programação, cada classe é permitido ter uma superclasse direta, e cada superclasse tem o potencial para um número ilimitado de subclasses.

Override

Métodos Override (substituição), em programação orientada a objeto, é um recurso de linguagem que permite que uma subclasse ou classe filha possa fornecer uma implementação específica de um método que já é fornecido por uma de suas superclasses ou classes pai.

A implementação Override das subclasses substitui a implementação na superclasse, fornecendo um método que tem o mesmo nome, mesmos parâmetros ou assinatura, e mesmo tipo de retorno como o método na classe pai.

This

É usado para fazer auto-referência ao próprio contexto em que se encontra e sempre será a própria classe ou o objeto já instanciado.

Dentro de um método de instância ou um construtor, this é uma referência para o objeto atual – o objeto cujo método ou construtor é chamado. Você pode se referir a qualquer membro do objeto atual de dentro de um método de instância ou um construtor usando this.

Exemplo:

Neste exemplo damos a classe MountainBike todos os mesmos campos e métodos da classe bicicleta, e ainda permite que seu código se concentre exclusivamente sobre as características que a tornam única. Isso faz do código de suas subclasses fáceis de ler. Usamos metodos Override neste exemplo de duas maneiras, para substituir um metodo da subclasse e adicionar mais um construtor com parametros. O comando this referencia os campos da própria classe.

No entanto, você deve tomar cuidado para documentar corretamente o estado e o comportamento que cada superclasse define, uma vez que o código não irá aparecer no arquivo de origem de cada subclasse.

C#

Classe #1 – Principal

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesenvolvimentoAberto {

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

            // Metodo com Construtor Default
            Bicicleta bike1 = new Bicicleta();
            bike1.modelo = "ZR069";
            bike1.quadro = "Ferro";
            bike1.rodas  = "Ferro";
            bike1.freios = "Pastilhas";
            bike1.bicicleta();

            Console.WriteLine();

            // Construtor Override
            Bicicleta bike2 = new Bicicleta("XA 200", "Aluminio", "Pastilhas", "Aluminio");
            bike2.bicicleta();

            Console.WriteLine();

            // Herança - Montain Bike
            BicicletaMontanha bike3 = new BicicletaMontanha();
            bike3.modelo        = "Attack 500";
            bike3.quadro        = "Fibra de Carbono";
            bike3.rodas         = "Aluminio";
            bike3.freios        = "Disco";
            bike3.amortecedores = "R3000";
            bike3.garrafa       = "Aluminio 500ml";
            bike3.marchas       = "18 Velocidades";
            bike3.gps           = "Discovery 2.5";

            // Metodo Override
            bike3.bicicleta();

            Console.ReadKey();
         }
     }
 }

Classe #2 – Bicicleta

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesenvolvimentoAberto
 {
     class Bicicleta
     {
       public string modelo;
       public string quadro;
       public string freios;
       public string rodas;

       // Construtor Default
       public Bicicleta()
       {}

       // Construtor Override

       public Bicicleta (string modelo, string quadro, string freios, string rodas)
       {
        this.modelo = modelo;
        this.quadro = quadro;
        this.rodas = rodas;
        this.freios = freios;
       }

       public void bicicleta ()
       {
        Console.WriteLine(" Bicicleta:" + modelo );
        Console.WriteLine(" Quadro:" + quadro );
        Console.WriteLine(" Rodas:" + rodas );
        Console.WriteLine(" Freios:" + freios );
       }

   }
}

Classe #3 – BicicletaMontanha (Sub Classe)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesenvolvimentoAberto
 {
     class BicicletaMontanha : Bicicleta
     {
           public string marchas;
           public string amortecedores;
           public string garrafa;
           public string gps;

         //Metodo Override
         public void bicicleta ()
           {
               Console.WriteLine(" Bicicleta:" + modelo );
               Console.WriteLine(" Quadro:" + quadro );
               Console.WriteLine(" Rodas:" + rodas );
               Console.WriteLine(" Freios:" + freios );
               Console.WriteLine(" Marchas:" + marchas );
               Console.WriteLine(" Amortecedores:" + freios );
               Console.WriteLine(" Garrafa:" + garrafa );
               Console.WriteLine(" Gps:" + gps );
             }
             public BicicletaMontanha()
           {
           }
    }
 }

Classes – Inheritance, Override e This – Java

Publicado: 16 de fevereiro de 2014 em Java

Inheritance (herança)

Programação orientada a objetos permite que classes possam herdar estados e comportamentos comuns usados de outras classes. Neste exemplo, bicicleta torna-se agora a superclasse de MountainBike. Na linguagem de programação Java, cada classe é permitido ter uma superclasse direta, e cada superclasse tem o potencial para um número ilimitado de subclasses.

Override

Métodos Override (substituição), em programação orientada a objeto, é um recurso de linguagem que permite que uma subclasse ou classe filha possa fornecer uma implementação específica de um método que já é fornecido por uma de suas superclasses ou classes pai.

A implementação Override das subclasses substitui a implementação na superclasse, fornecendo um método que tem o mesmo nome, mesmos parâmetros ou assinatura, e mesmo tipo de retorno como o método na classe pai.

This

É usado para fazer auto-referência ao próprio contexto em que se encontra e sempre será a própria classe ou o objeto já instanciado.

Dentro de um método de instância ou um construtor, this é uma referência para o objeto atual – o objeto cujo método ou construtor é chamado. Você pode se referir a qualquer membro do objeto atual de dentro de um método de instância ou um construtor usando this.

Exemplo:

Neste exemplo damos a classe MountainBike todos os mesmos campos e métodos da classe bicicleta, e ainda permite que seu código se concentre exclusivamente sobre as características que a tornam única. Isso faz do código de suas subclasses fáceis de ler. Usamos metodos Override neste exemplo de duas maneiras, para substituir um metodo da subclasse e adicionar mais um construtor com parametros. O comando this referencia os campos da própria classe.

No entanto, você deve tomar cuidado para documentar corretamente o estado e o comportamento que cada superclasse define, uma vez que o código não irá aparecer no arquivo de origem de cada subclasse.

Java

Classe #1 – Principal

package org.desenvolvimentoaberto;

public class Principal {

public static void main(String[] args) {
   // Metodo com Construtor Default
   Bicicleta bike1 = new Bicicleta();
   bike1.modelo = "ZR069";
   bike1.quadro = "Ferro";
   bike1.rodas  = "Ferro";
   bike1.freios = "Pastilhas";
   bike1.bicicleta();

   System.out.println();

   // Construtor Override
   Bicicleta bike2 = new Bicicleta("XA 200", "Aluminio", "Pastilhas", "Aluminio");
   bike2.bicicleta();

   System.out.println();

   // Herança - Montain Bike
   BicicletaMontanha bike3 = new BicicletaMontanha();
   bike3.modelo        = "Attack 500";
   bike3.quadro        = "Fibra de Carbono";
   bike3.rodas         = "Aluminio";
   bike3.freios        = "Disco";
   bike3.amortecedores = "R3000";
   bike3.garrafa       = "Aluminio 500ml";
   bike3.marchas       = "18 Velocidades";
   bike3.gps           = "Discovery 2.5";

   // Metodo Override
   bike3.bicicleta();
  }

}

Classe #2 – Bicicleta

package org.desenvolvimentoaberto;
public class Bicicleta {

  public String modelo;
  public String quadro;
  public String freios;
  public String rodas;

  // Construtor Default
  public Bicicleta()
  {}

  // Construtor Override
  public Bicicleta (String modelo, String quadro, String freios, String rodas)
  {
   this.modelo = modelo;
   this.quadro = quadro;
   this.rodas = rodas;
   this.freios = freios;
  }

public void bicicleta ()
  {
   System.out.println(" Bicicleta:" + modelo );
   System.out.println(" Quadro:" + quadro );
   System.out.println(" Rodas:" + rodas );
   System.out.println(" Freios:" + freios );
  }

}

Classe #3 – BicicletaMontanha (Sub Classe)

package org.desenvolvimentoaberto;
public class BicicletaMontanha extends Bicicleta {

  public String marchas;
  public String amortecedores;
  public String garrafa;
  public String gps;

  //Metodo Override
  public void bicicleta ()
  {
      System.out.println(" Bicicleta:" + modelo );
      System.out.println(" Quadro:" + quadro );
      System.out.println(" Rodas:" + rodas );
      System.out.println(" Freios:" + freios );
      System.out.println(" Marchas:" + marchas );
      System.out.println(" Amortecedores:" + freios );
      System.out.println(" Garrafa:" + garrafa );
      System.out.println(" Gps:" + gps );
    }

BicicletaMontanha()
  {
  }
}

Namespaces – C++

Publicado: 15 de fevereiro de 2014 em C/C++

A palavra-chave namespace é usada para declarar um escopo que contém um conjunto de objetos relacionados.  Você pode usar um namespace para organizar elementos de código e para criar globalmente tipos exclusivos.

namespaces, ao contrário de classes, não requerem instanciação, você não precisa de um objeto para usar um namespace específico. Você só precisa prefixar a função que você deseja chamar com namespace_name ::  semelhante à forma como você chamaria uma função de um membro estático de uma classe.

Outra conveniência de namespaces é que eles permitem que você use o mesmo nome da função, quando faz sentido fazê-lo, para executar várias ações diferentes

Namespaces podem ser usados ​​para estruturar um programa em “unidades lógicas”. Os namespaces funcionam da mesma forma que setores de uma empresa, dentro de um namespace você pode incluir todas as funções necessárias para cumprir um determinado objetivo. Por exemplo, se você tiver um programa que se conecte à Internet, você pode ter um namespace para lidar com todas as funções de conexão.

Mais informações sobre namespaces C++ você encontra aqui.

Exemplos:

C++

Cpp #1 – Principal

#include "stdafx.h"
#include <iostream>
#include <string>
#include "menssagem.h"

using namespace std;
using namespace Menssagem;

int _tmain(int argc, _TCHAR* argv[])
 {
  menssagem("Estou usando o namespace menssagem");
  menssagem("namespaces em C++ não necessitam instancias");
  menssagem("Desenvolvimento Aberto - C++");
system("pause");
return 0;
 }

.h #1 – Menssagem

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

namespace Menssagem
 {
  void menssagem(string msg)
  {
   cout << msg << endl;
  }

}

Namespaces – C#

Publicado: 15 de fevereiro de 2014 em C#

Um Namespace é uma construção organizacional. Ele nos ajuda a encontrar e compreender como uma base de código é organizado. Namespaces não são essenciais para programas em C #. Eles normalmente são usados ​​para tornar o código mais compreensível.

Namespaces foram introduzidos no. NET para eliminar as colisões de nomenclatura entre códigos diferentes desenvolvidos em diferentes locais.

Independentemente de você declarar ou não um Namespace de forma explícita em um arquivo fonte C#, o compilador adiciona um Namespace padrão.  Este Namespace sem nome, às vezes conhecida como o Namespace global, está presente em cada arquivo. Qualquer identificador no Namespace global está disponível para uso em um Namespace chamado.

Namespaces implicitamente tem acesso público e isso não pode ser modificado. Use os modificadores de acesso para atribuir restrições a elementos em um Namespace.

Outras informações sobre Namespaces você encontra aqui.

Melhores Praticas:

  • Cada classe pertence a um Namespace.
  • Classes no mesmo Namespace devem servir a um propósito semelhante.
  • Namespaces são apenas estruturas.
  • As classes em outros Namespaces precisam ser importadas.
  • Para facilitar o uso de nomes é possivel criar um alias para um Namespace caso deseje trabalhar com nomes curtos.

Combinar funcionalidade semelhantes:

  • desenvolvimentoaberto.bibliotecas.Livraria
  • desenvolvimentoaberto.bibliotecas.Livros

Separar nomes semelhantes:

  • shopping.Lista
  • pacotes.Lista

Criando um Namespace:

  1. Crie um novo projeto para console.
  2. Na janela Solution Explorer clique no projeto com o botão direito e em Add Item.
  3. Clique em nova classe. Nomeie a classe de Menssagem.
  4. Selecione o nome do Namespace  ConsoleApplication(numero).
  5. Troque para: DesenvolvimentoAberto.
  6. Importante: se um simbolo vermelho aparecer logo abaixo do nome do Namespace que você acabou de trocar, não renomeie o Namespace isto afetara todo o projeto.
  7. Digite o codigo abaixo para a classe Menssagem.
  8. Na Classe Program digite o codigo abaixo. Rode o programa.

Exemplo:

Neste exemplo criamos um namespace vazio e dentro dele um outro namespaces  que contém uma  classe.

Classe #1 – Program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DesenvolvimentoAberto.Msg ;

namespace ConsoleApplication60
 {
     class Program
     {
         static void Main(string[] args)
         {
             // Modo de uso #1 - sem declarar o  using namespace.
             DesenvolvimentoAberto.Msg.Menssagem msg = new DesenvolvimentoAberto.Msg.Menssagem();
             msg.msg("Meu novo namespace modo: #1");

             // Mode de uso #2 - declarando o namespace
             Menssagem msg2 = new Menssagem();
             msg2.msg("Meu novo namespace modo: #2");

            Console.ReadKey();
         }

     }
 }

Classe #2 – Menssagem

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesenvolvimentoAberto
 {
       namespace Msg
       {
        public class Menssagem
         {
             public void msg(string menssagem)
             {
                 Console.WriteLine(menssagem);
             }

         }

       }
 }

Packages – Java

Publicado: 15 de fevereiro de 2014 em Java

Uma Package (pacote) é um agrupamento de tipos relacionados que fornecem proteção de acesso e gerenciamento de espaço de nome(namespaces). Note-se que os tipos refere-se a classes, interfaces, enumerações e tipos de anotações.

Os pacotes servem para organizar as classes semelhantes e em algum momento, todo programador precisa usar uma classe pública que está contida dentro de um pacote. Se a classe está em um pacote diferente, então o programa deve dizer ao compilador onde encontrá-lo. Há três maneiras de fazer referência a uma classe em outro pacote: use o seu nome completo, importe a classe, importe o pacote.

Melhores Praticas:

  • Cada classe pertence a um pacote.
  • Classes no mesmo pacote devem servir a um propósito semelhante.
  • Pacotes são apenas diretórios. As classes em outros pacotes precisam ser importados.

Combinar funcionalidade semelhantes:

  • org.desenvolvimentoaberto.bibliotecas.Livraria
  • org.desenvolvimentoaberto.bibliotecas.Livros

Separar nomes semelhantes:

  • shopping.Lista
  • pacotes.Lista

Pacotes Especiais:

  • Todas as classes  ” podem ver” as classes no mesmo pacote (sem importação necessário).
  • Todas as classes de “podem ver” classes em java.lang.
  • Exemplo : java.lang.String; java.lang.System

Criando uma Package:

  1. Crie um novo projeto Java chamado: DevAberto.
  2. Na janela Package Explorer, navegue até nosso projeto e expanda até encontrar a pasta scr.
  3. Clique com o botão direito e clique em nova package.
  4. Nomeie a package de org.desenvolvimentoaberto.
  5. Clique com o botão direito em nossa package e escolha nova classe.
  6. Nomeie a classe de Menssagem e copie o codigo da classe Menssagem abaixo.
  7. Em nosso projeto na pasta scr, botão direito nova classe.
  8. Na opção package na Janela da classe clique em Browse e escolha (default package).
  9. Nomeie a classe de Principal e clique no checkbox public static void main(String[] args e clique em Finish.
  10. Nossa classe Menssagem não esta visivel dentro da classe Principal.
  11. No editor antes da instrução “public class Principal”, de um enter.
  12. Escreva a seguinte instrução: import org.desenvolvimentoaberto.Menssagem;
  13. Agora a classe Menssagem esta visivel da classe Principal.
  14. Escreva o codigo da classe Principal abaixo e rode o programa.

Exemplo:

Neste exemplo vamos criar um simples pacote e usa-lo de um outro pacote, mostrando os três modos de como referenciar pacotes:

Java

Classe Principal – Pacote #1

import org.desenvolvimentoaberto.Menssagem;

public class Principal
 {

public static void main(String[] args)
  {
      // Você pode chamar as packages de 3 modos diferentes:
      // Modo #1: chamando pelo nome completo da package e classe

      org.desenvolvimentoaberto.Menssagem menssagem = new org.desenvolvimentoaberto.Menssagem();
      menssagem.Menssagem("Meu novo pacote java - modo #1");
      // Modo #2: usando a instrução import e importando a classe especifica
      // import org.desenvolvimentoaberto.Menssagem;
      // Modo #3 importando toda a package e assim todas as classes
      // import org.desenvolvimentoaberto.*;

      Menssagem msg = new Menssagem();
      msg.Menssagem("Meu novo pacote java - modo #2");
  }
}

Classe Menssagem – Pacote #2

package org.desenvolvimentoaberto;

public class Menssagem
{
    public void Menssagem (String menssagem )
    {
       System.out.println( menssagem);
    }
    public Menssagem()
    {
    }
}

Looping – While e Expressões Aritméticas – Abap

Publicado: 15 de fevereiro de 2014 em Abap

A declaração WHILE executa continuamente um bloco de instruções enquanto uma determinada condição é verdadeira.

Sintaxe:

WHILE condição.
[bloco de instruções.]
ENDWHILE.

Operadores Aritméticos

  • (+) – adição.
  • (-) – subtração.
  • (*) – multiplicação.
  • (/) – divisão.
  • DIV – divisão inteira.
  • MOD – Resto da divisão inteira.
  • ** – Potenciação.

Ao usar expressões matemáticas, os operadores +, -, *, **, e /, bem como abertura e fechamento de parênteses, são interpretados como palavras ABAP e devem ser precedidos e seguidos por espaços em branco.

Em operações de divisão, o divisor não pode ser zero se o dividendo não é zero. Com a divisão inteira, você usa os operadores DIV ou MOD em vez de /. DIV calcula o quociente inteiro, MOD calcula o resto da divisão.

Exemplo:

Neste exemplo criamos dois loopings para calcular os números primos em uma faixa de 1 à 1000. Vale  deixar como nota que a linguagem ABAP possui uma sintaxe estilo velha guarda, as linguagens mais modernas reformularam a sintaxe do comando While para que não gere erros de logica.

Podemos ver isto no exemplo abaixo, em ABAP inicializamos o valor do looping e alimentamos o contador fora do comando while, o que não acontece em linguagens como Java, C# e  o moderno C++. Em nosso exemplo a inicialização do looping é essencial para o resultado do calculo e pode ser facilmente esquecida ou não prevista, criando um resultado indesejado, já o contador se não for incrementado  irá entrar em um laço infinito impedindo a continuidade do programa, para entender melhor você pode ver o mesmo exemplo de laço com a sintaxe moderna clicando aqui:

ABAP

*&---------------------------------------------------------------------*
*& Report  ZPRIMOS
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Primos
*&---------------------------------------------------------------------*

REPORT  ZPRIMOS.

DATA : numeros TYPE i,
       primos  TYPE i.

numeros = 1.
*// Inicie a variável primos aqui e obterá um erro logico.

WHILE numeros LE 1000.

   primos  = 2. " // Old Style, tente inicializar a variável fora do looping.
   WHILE primos LE ( numeros - 1 ).

       IF ( ( numeros MOD primos ) EQ 0 ).
         EXIT.
       ENDIF.

   primos = primos + 1. " // Old Style, sem está instrução obterá um laço infinito.
   ENDWHILE.

   IF primos EQ numeros.
     WRITE : numeros, ','.
   ENDIF.

 numeros = numeros + 1. " //Old Style, sem está instrução obterá um laço infinito.
 ENDWHILE.