Confronto Tecnologico Entre Java e Mono (.Net Framework)

Confronto Tecnologico Entre Java e Mono (.Net Framework)

(Parte 1 de 6)

Monografia apresentada como exigência para a obtenção do título de Bacharel do curso de Sistemas de Informação, ministrado pela Universidade do Contestado – UnC Campus Marcílio Dias, sob orientação do professor Saulo José Benvenutti.

Este(a) (Trabalho de Conclusão de Curso, Monografia, Dissertação, Tese) foi submetido(a) ao processo de avaliação pela Banca Examinadora como requisito parcial para a obtenção do Título (Grau) de:

Licenciado(a) ou Bacharel em Sistemas de Informação.

E aprovado(a) na sua versão final em 10/1/2009, atendendo às normas da legislação vigente da Universidade do Contestado – UnC e Coordenação do Curso de Sistemas de Informação.

Este trabalho foi baseado em duas plataformas de desenvolvimento de aplicações, de diferentes empresas, a Novell e sua plataforma Mono .NET Framework, e a Sun Microsystems com sua plataforma Java. Em sua primeira parte foi apresentado a origem do Java, seus conceitos e características, a ideia de um ambiente multiplataforma, características da maquina virtual e os conceitos do gerenciamento de memória. É descrito em sua segunda parte as características quanto a capacidade de interconexão TCP/IP no desenvolvimento sob aplicações distribuídas e comunicação entre objetos através de componentes; mostrando o processo de evolução até o surgimento do .NET Framework, interoperabilidade entre objetos localmente ou remotamente, WebServices e protocolo SOAP. Na terceira parte é abordado as arquiteturas .NET Framework, quanto a sua normalização até a estrutura Mono, outras plataformas derivadas da especificação .NET, como o Rotor e DotGNU, e a arquitetura Java com base na sua estrutura geral, seja no modo de compilação e funcionamento. Quanto a Quarta parte deste trabalho descreve de uma maneira geral os conceitos de orientação a objetos que esta fixado sob as tecnologias estudas (Java e Mono), as linguagens suportada por cada plataforma, os principais ambientes de desenvolvimento destacados para cada plataforma e seus modos de conexão a banco de dados. No processo de finalização na quinta parte inicia o processo de comparação das tecnologias Java e Mono .NET Framework, analisando e demonstrando alguns de seus pontos críticos como desempenho em relação ao sistema operacional seja Windows ou Linux aqui comparado. Em uma analise breve comentando sobre as linguagens Java e C# as quais foram utilizadas no processo de comparação, os ambientes de desenvolvimento trabalhados e a maneira utilizada na conexão com o banco de dados. São mostrados a este capítulo tabelas e gráficos focando a analise quantitativa afim de melhor demonstrar o comparativo executado nestas plataformas. As considerações finais levantadas para este trabalho, nota as várias semelhanças contida na estrutura Java e Mono .NET, no entanto cada uma possui suas vantagens e desvantagens, mais seguem a mesma tendencia de mercado.

Palavras chave: Tecnologia; Plataforma; Mono; JAVA; Desenvolvimento; Linguagem; Maquina Virtual.

This work was based on two platforms, application development, from different companies, Novell and the Mono .NET Framework platform, and Sun Microsystems with its Java platform. In the first part was made the source of Java, its concepts and features, the idea of a multiplatform environment, characteristics of the virtual machine and the concepts of memory management. It is described in the second part features as the ability to interconnect TCP/IP development in distributed applications and communication between objects across components, showing the process of evolution until the appearance .NET Framework, interoperability between objects locally or remotely, WebServices and SOAP protocol. The third part deals with the .NET Framework architecture, and its standardization by the structure Mono, other platforms derived from the specification .NET, as the rotor and DotGNU, and Java architecture based on its overall structure, perhaps in the way of compiling and operation. In the fourth part of this work describes in general the concepts of object orientation that is settled in the studied technologies (Java and Mono), the supported languages by each platform, the main development environments assigned to each platform and its modes of connection to the database. In the process of finalizing the fifth part begins the process of comparing Java and Mono .NET Framework technologies, analyzing and demonstrating some of its critical points such a performance relative to the operating system is Windows or Linux here compared. In a brief review commenting on the Java and C# which were used in the comparison, the development environment worked and the way used to connect to the database. Are shown in this chapter charts and tables focusing on quantitative analysis in order to better demonstrate the comparative run on these platforms. The final considerations raised for this work demonstrates several similarities between the structure of Java and Mono .NET, the advantages and disadvantages of each platform has, but following the same trend. Final considerations raised in this study, note the many similarities contained in the structure Java and Mono .NET, but each one has its advantages and disadvantages, most follow the same trend of the market.

Keywords: Technology; Platform; Mono; Java; Development; Language; Virtual Machine.

Figura 1: Segmentação da maquina virtual Java. O Autor(2009)24
25
(2004)26
Figura 4: Estrutura do Mono. NANTZ (2004)39
4
Figura 6: Plataforma Java Standard Edition v 1.4. Sun Microsystems, Inc. (2009)48
Figura 7: Java code cycle. Ciclo de execução do código fonte Java. BAGNALL (2002)49
de dados. BRILL(2001)59
Figura 9: Arquitetura ADO.NET. MSDN (2009)60
Autor(2009)61
tecnologias Java e Mono .NET. Autor(2009)62
Mono. Autor (2009)63
sob o sistema operacional Linux, através do gnome-terminal. Autor (2009)67
Figura 14: Script SQL da tabela, utilizado no comparativo. Autor (2009)87
Figura 15: Dados inseridos no banco. Autor (2009)87
interface é a mesma. Autor (2009)89
Figura 17: Splash NetBeans 6.7.1. Autor (2009)89
Figura 18: Tela Principal. SharpDevelop 3.1 (Win32). Autor (2009)90
Figura 19: Splash SharpDevelop 3.1. Autor (2009)90
Figura 20: Tela Principal. MonoDevelop 2.0, Linux. Autor (2009)91
Figura 21: Splash MonoDevelop 2.0. Autor (2009)91
Figura 2: Logomarca: Java. Sun (2009)92
Figura 23: Logomarca: Mono. Mono (2009)92
gravados para um arquivo de texto. Autor (2009)93

LISTA DE FIGURAS Figura 2: Funcionamento inicial do Garbage collector - GC através do heap. MSDN(2008). Figura 3: Diagrama demonstrando o processo de gerenciamento de memória. Simmons Figura 5: Cycle compiler .NET. Ciclo de execução do código fonte .NET. BAGNALL (2002) Figura 8: Estrutura base do JDBC. O desenvolvedor trabalha com objetos simples em Java. O DriverManager em conjunto com o driver especifico, fornece o acesso ao banco Figura 10: Principio básico de acesso a base de dados PostgreSQL, utilizando o NpgSQL. Figura 1: Especificação dos softwares utilizados no processo de comparação das Figura 12: Topologia Cliente-Servidor, aplicada nos teste entre as plataformas Java e Figura 13: Resultados obtidos no processo de gravação de dados em arquivo, executados Figura 16: Tela Principal. Netbeans 6.7 (Win32), sob outro sistema operacional sua Figura 24: Aplicativo Java, sendo executado sobre o Console do Windows (MS-DOS). No Linux foi executado sob o console gnome-terminal. Os resultados quanto ao tempo eram Figura 25: Aplicativo Mono .NET, sendo executado sobre o Console do Windows (MSDOS). No Linux foi executado sob o console gnome-terminal. Os resultados quanto ao tempo eram gravados para um arquivo de texto. Autor(2009)............................................93

sob o sistema operacional Windows, através do console DOS. Autor (2009)67
sistema operacional Windows. Autor(2009)68
listados. Teste efetuado sob o sistema operacional Windows. Autor(2009)68
sistema operacional Windows. Autor(2009)69
o sistema operacional Windows. Autor(2009)69
sistema operacional Linux. Autor(2009)70
operacional Linux. Autor(2009)70
efetuado sob o sistema operacional Linux. Autor(2009)71

Gráfico 1: Resultados obtidos no processo de gravação de dados em arquivo, executados Gráfico 2: Gráfico demonstrando e comparando o desempenho no processo de inserção em uma bateria de 10 testes, a cada teste 10000 inseridos um a um. Teste efetuado sob o Gráfico 3: Gráfico demonstrando e comparando o desempenho no processo de listagem, também entendido como localização em uma bateria de 10 testes, a cada teste 10000 Gráfico 4: Gráfico demonstrando e comparando o desempenho no processo de alteração em uma bateria de 10 testes, a cada teste 10000 alterados um a um. Teste efetuado sob o Gráfico 5: Gráfico demonstrando e comparando o desempenho no processo de remoção em uma bateria de 10 testes, a cada teste 10000 removidos um a um. Teste efetuado sob Gráfico 6: Gráfico demonstrando e comparando o desempenho no processo de inserção em uma bateria de 10 testes, a cada teste 10000 inseridos um a um. Teste efetuado sob o Gráfico 7: Gráfico demonstrando e comparando o desempenho no processo de listagem ou também considerado com uma localização em uma bateria de 10 testes, a cada teste 10000 registros foram listados em modo console. Teste efetuado sob o sistema Gráfico 8: Gráfico demonstrando e comparando o desempenho no processo de alteração em uma bateria de 10 testes, a cada teste 10000 registros alterados um a um. Teste Gráfico 9: Gráfico demonstrando e comparando o desempenho no processo de remoção em uma bateria de 10 testes, a cada teste 10000 registros removidos um a um. Teste efetuado sob o sistema operacional Linux. Autor(2009).....................................................71

(2003, adaptado)74
(2009)74
Java e o Mono .NET. Autor (2009)75

Active Data ObjectsADO Abstract Window ToolkitAWT Active Server PagesASP Application Foundation ClassesAFC Application Programming InterfaceAPI Base Class LibraryBCL Common Development and Distribution LicenseCDDL Common Gateway InterfaceCGI Common Infraestruture LanguageCLI Common Intermediate LanguageCIL Common Language EspecificationCLS Common Language RuntimeCLR Common Object Request Broker ArchitectureCORBA Common Type SystemCTS Compact FrameworkCF Component Object ModelCOM Corporation for National Research InitiativesCNRI Distributed Architecture Internetwork DNA Distributed Component Object ModelDCOM Distributed Computing EnvironmentDCE Dynamic Data ExchangeDDE Dynamic Link libraryDLL Enterprise Java BeansEJB European Computer Manufacturers AssociationECMA Executive Committee CE Enterprise Resource PlanningERP eXtensible Markup LanguageXML eXtensible Stylesheet Language TransformationsXSLT Framework Class LibraryFCL Global Assembly CacheGAC GNU Public LicenseGPL Graphical User InterfacesGUI Hypertext Transfer ProtocolHTTP Interface Definition LanguageIDL Intermediate Language IL International Standards OrganizationISO Internet Foundation ClassesIFC Internet Information ServiceIIS Java Class LibraryJCL Java Community ProcessJCP Java Data ObjectsJDO Java Database ConnectivityJDBC Java Development KitJDK Java Naming and Directory InterfaceJNDI Java Runtime EnvironmentJRE Java Specification RequestsJSR Java Virtual MachineJVM Just in TimeJIT Library GNU Public LicenseLGPL

Matz Ruby ImplementationIRM Massachusetts Institute of TechnologyMIT Microsoft MS Microsoft Intermediate LanguageMSIL Mozilla Public LicenseMPL Microsoft Transaction ServerMTS Network File SystemNFS Object Linking and EmbeddingOLE Object Management GroupOMG Object OrientedOO Object Oriented ProgrammingOOP Objective CAMLOcaml Open Database ConnectivityODBC Open Graphics LibraryOpenGL Open Software FoundationOSF Open Source InitiativeOSI Portable ExecutePE Publicly Available SpecificationPAS Remote Method InvocationRMI Remote Procedure CallRPC Remote Procedure CallsRPC Server Message BlockSMB Shared Source CLISSCLI Simple Object Access ProtocolSOAP Software Development KitSDK Structured Query LanguageSQL Universal Description, Discovery and IntegrationUDDI Unified Modeling LanguageUML Virtual Execution SystemVES Virtual MachineVM Visual BasicVB Visual StudioVS Web Service Definition LanguageWSDL World Wide WebWWW

1 INTRODUÇÃO13
1.1 TEMA13
1.2 APRESENTAÇÃO13
1.3 PROBLEMA14
1.4 JUSTIFICATIVA15
1.5 OBJETIVOS16
1.5.1 Objetivo Geral16
1.5.2 Objetivos específicos16
1.6 PROCEDIMENTO METODOLOGICO17
1.7 PLANO DE METAS18
CAPITULO I19
2 ORIGEM DO JAVA E O CONCEITO MULTIPLATAFORMA19
2.1 FUNDAMENTOS DO JAVA19
2.1.1 Ideia Multiplataforma21
2.2 CARACTERISTICAS DO JAVA21
2.3 MAQUINA VIRTUAL23
2.3.1 JVM (Java Virtual Machine)23
2.4 GARBAGE COLLECTOR (GERENCIADOR DE RECURSOS DA MEMÓRIA)24
2.4.1 Funcionamento do gerenciador de memória25
CAPITULO I27
3 APLICAÇÕES DISTRIBUÍDAS E O SURGIMENTO DO .NET FRAMEWORK27
3.1 TECNOLOGIAS DISTRIBUÍDAS27
3.1.1 CORBA27
3.1.2 Java RMI28
3.1.3 Interface Definition Language (IDL)28
3.1.4 Java EJB28
3.2 A MICROSOFT E A COMPUTAÇÃO DISTRIBUÍDA29
3.2.1 DCE/RPC30
3.2.2 OS PIONEIROS COM, MTS, DCOM30
3.2.3 COM+32
3.2.4 .NET REMOTING32
3.3 WEBSERVICES3
3.3.1 Protocolo SOAP3
3.4 A EVOLUÇÃO ATÉ O SURGIMENTO DO .NET FRAMEWORK3
3.4.1 Fatos ocorridos sob o surgimento do .NET Framework34
CAPITULO I36
4 ARQUITETURAS MONO .NET FRAMEWORK E JAVA36
4.1 ARQUITETURA .NET FRAMEWORK36
4.1.1 NORMALIZAÇÃO36
4.1.2 SSCLI/Rotor37
4.1.3 Portable .NET37
4.1.4 Compact Framework37
4.1.5 Mono (.NET Framework)38
4.1.6 Licenças usadas no Mono39
4.1.7 Common Type System (CTS)40
4.1.8 Common Language Specification40
4.1.9 Conceito Multilinguagem40
4.1.10 Linguagem Intermediária41
4.1.1 ASSEMBLY41
4.1.13 Just in Time Compiler43
4.1.14 Framework Class Library43
4.1.15 Ciclo de execução do .NET4
4.1.16 Compilando Código Fonte em código nativo45
4.2 ARQUITETURA JAVA46
4.2.1 Normalização do Java46
4.2.2 Java Community Process46
4.2.3 Java Foundation Classes47
4.2.4 ByteCode47
4.2.5 JIT Compiler47
4.2.6 Class Loader47
4.2.7 Distribuições da Plataforma Java48
4.2.8 Ciclo de execução do JAVA49
4.2.9 Licença49
CAPITULO IV50
5 LINGUAGENS DE PROGRAMAÇÃO, IDE's E MODOS DE ACESSO A DADOS50
5.1 Conceitos de Orientação a Objetos50
5.2 Linguagens de programação suportas pela plataforma JAVA50
5.2.1 Java50
5.2.2 Groovy51
5.2.3 JRuby51
5.2.4 Jython51
5.3.1 C#51
5.3.2 VB.NET52
5.3.3 Object Pascal52
5.3.4 J# (JSharp)52
5.3.5 F# (FSharp)53
5.3.6 IronRuby53
5.3.7 IronPython53
5.3.8 Boo53
5.3.9 C++54
5.3.10 C# Versus Visual Basic .NET54
5.3.1 C# versus Java54
Framework)5
5.4.1 Camadas principais de uma IDE5
5.4.2 MonoDevelop56
5.4.3 Sharp Develop56
5.4.4 Visual Studio57
5.4.4.1 DelphiPrism57
5.4.5 Eclipse57
5.4.6 Netbeans58
5.5 COMPONENTES DE ACESSO A DADOS58
5.5.1 JDBC58
5.5.2 ADO.NET59
5.5.3 Outros modos de acesso a dados com o .NET60
5.5.4 Open DataBase Connectivity (ODBC)60
5.5.4.1 NPGSQL60
5.5.4.2 PgSqlNET Free Express61
6.1 PROCESSO DE DESENVOLVIMENTO PRÁTICO62
6.2 ANALISE DO APLICATIVO COMPARADO63
6.2.1 Analise do processo de desenvolvimento prático64
6.2.1.1 Das linguagens de programação Java e C#64
6.2.1.2 Da maneira de conexão com o banco de dados64
6.3 BANCO DE DADOS UTILIZADO64
6.3.1 PostgreSQL64
6.3.2 Analise no processo de teste quanto ao banco de dados64
6.3.2.1 Do desempenho no acesso a dados65
6.4 ANALISE DOS AMBIENTES DE DESENVOLVIMENTO UTILIZADOS65
6.5 RESULTADOS OBTIDOS NOS TESTES6
6.5.1 Resultados obtidos no processo de gravação em arquivo texto67
6.5.2 Comparativo: CRUD. Testes efetuados no Sistema Operacional Windows68
6.5.3 Comparativo: CRUD. Testes efetuados no Sistema Operacional LINUX70
6.6 DOS APLICATIVOS COMPARADOS72
6.7 DOS SISTEMAS OPERACIONAIS USADOS NOS TESTES72
FRAMEWORK73
6.8.1 Analise dos tipos de dados das linguagens Java e C#73
6.8.2 Analise dos ambientes de desenvolvimento74
6.8.3 Aspectos gerais das plataformas estudadas75
6.8.4 Analise conceitual das licenças utilizadas76
CAPITULO VI7
7 CONCLUSÃO7
7.1 SUGESTÃO PARA TRABALHOS FUTUROS80
REFERENCIAS81
APÊNDICE A84
Algoritmo exemplo C#84
Algoritmo exemplo Java84
Algoritmo JAVA demonstrando um laço de repetição e gravação em arquivo85
Algoritmo C# demonstrando um laço de repetição e gravação em arquivo86

6 COMPARATIVOS DAS TECNOLOGIAS JAVA E MONO .NET FRAMEWORK...........62 6.4.1 Quanto a produtividade e desempenho nas plataformas Java e Mono .NET..6 6.8 COMPARATIVO GERAL ENTRE AS PLATAFORMAS JAVA E MONO .NET

Código fonte da tabela utilizada no comparativo87
Dados inseridos na tabela87
Código fonte: Projeto. CRUD-Java-Java-JDBC – JAVA87
Código fonte: Projeto. CRUD-Mono-CSharp-NpgSQL – Mono .NET Framework87

APÊNDICE B – Código fonte do aplicativo utilizando um CRUD no acesso a dados87

Dados utilizado8
Plataformas8
IDE's8
Banco de Dados8

APÊNDICE C - Disponibilidade da Documentação, Plataforma, IDE's e o Banco de

APÊNDICE D – Ambientes de Desenvolvimento utilizados na Implementação dos Aplicativos, Logomarca das plataformas comparada e Tela das aplicações.............89

1 INTRODUÇÃO 1.1 TEMA

1.2 APRESENTAÇÃO

Tanto o Mono .NET Framework e o JAVA, são uma plataforma de desenvolvimento de software. Quando desenvolvemos um software, de uma forma geral, estamos desenvolvendo para um sistema operacional e hardware específico, assim tornando dependentes dos mesmos. A proposta .NET e JAVA é desenvolver não mais para um sistema operacional ou hardware, mas sim para sua plataforma, onde o software funcionará onde quer que o framework ou maquina virtual estiver disponível: de computadores a celulares.

A linha existente de programadores no mercado atual, cada um evangeliza sua plataforma de desenvolvimento. Mesmo havendo hipótese de que uma plataforma não atenda seus requisitos, a empresa detentora de sua tecnologia procura não deixar totalmente visível a sua comunidade seus defeitos, porém, por se tratar de dois ambientes open source, os bugs a cada dia que passa são corrigidos e novas versões são disponibilizadas.

Até hoje não existe uma linha comparativa que possa confrontar as tecnologias

Java e Mono .NET afim de demonstrar seu desempenho e viabilidade. A questão é: a relação entre Java e Mono .NET, é mais um caso de religião do que tecnologia, ou, uma questão cultural de organização que influencia na adoção de uma plataforma de desenvolvimento, seja pelo que ela oferece e por influenciar no próprio mercado.

Os aplicativos desenvolvidos sob estas tecnologias rodam sob maquinas virtuais, que é um fator de desvantagem no desempenho para ambas, em relação há softwares executados nativamente sob um determinado sistema operacional. No entanto esta questão já esta se tornando um mito, e devido a maquina virtual contida no Java e Mono, estas oferecem suporte multiplataforma nas suas aplicações.

15 1.4 JUSTIFICATIVA

sistema operacional, basta apenas ter a plataforma que rode este

As vantagens de plataformas de desenvolvimento, que rodam sobre um framework ou maquina virtual oferece grandes benefícios, quando se trata de portabilidade, não tem a necessidade de recompilar um código só por apenas executar um aplicativo sob outro

A pesquisa nos proporcionará uma visão melhor sobre o paradigma de programação Orientado a Objetos que esta focada tanto em Java como Mono .NET, pois esta permite maior facilidade para reutilização de código, possibilitando o desenvolvedor trabalhar em um nível mais elevado e abstrato, como também a utilização de um único padrão conceitual durante todo o processo de criação de um determinado software.

Por se tratar de tecnologias ascendentes, cada plataforma possui suas particularidades, ou seja, pode ser vantagem para uma linha de desenvolvedores e desvantagem a outra. Pois cada organização tem seu modo de pensamento; e quando uma equipe já se tem o domínio sob uma linguagem de programação, se torna algo inviável modificar este ambiente.

1.5 OBJETIVOS 1.5.1 Objetivo Geral

•Confrontar tecnologias JAVA e Mono .NET, afim de avaliar seu desempenho e mostrar alguns dos recursos, que cada plataforma oferece.

1.5.2 Objetivos específicos

•Estudar os conceitos gerais do Java e do Mono (.NET Framework), identificando suas evoluções.

•Identificar vantagens e desvantagens das plataformas JAVA e Mono .NET explorando algumas de suas características em cada plataforma.

•Identificar as linguagens de programação que são suportadas por cada plataforma e quais as principais formas de conexão com o banco de dados.

•Desenvolver uma aplicação em modo Console, para cada plataforma com intuito de analise de código, aplicação, e desempenho.

•Analisar o desempenho de cada tecnologia, em 2 sistemas operacionais distintos (Windows e Linux).

17 1.6 PROCEDIMENTO METODOLOGICO

Pretende-se realizar o trabalho utilizando-se os métodos descritos a seguir:

•Fazer um levantamento bibliográfico, na internet, em livros, em revistas, artigos científicos clássicos e atuais relacionados ao tema. Este levantamento continuará ao longo de todo o desenvolvimento do trabalho;

•Construir o histórico da plataforma Java, evoluindo até o surgimento do Mono .NET Framework.

•Descrever as principais características de cada tecnologia, linguagens de programação que cada uma suporta, conectividade com o banco de dados.

•Após a elaboração teórica do trabalho, será desenvolvido como estudo de caso um aplicativo sob cada plataforma, visando a conclusão dos objetivos práticos, e analisando seu desempenho quanto ao desenvolvimento e execução do aplicativo nos sistemas operacionais Windows e Linux.

A característica do projeto, é um estudo comparativo o qual tem como objetivo comparar o desempenho das tecnologias Java e Mono .NET Framework.

18 1.7 PLANO DE METAS

•Capítulo 01: Origem do Java; A ideia de um ambiente multiplataforma; Maquinas Virtuais; Gerenciamento de memória (Garbage Colletor);

•Capítulo 02: Conceito de Aplicações distribuídas; Servidores de Componentes; Evolução do COM ao .NET; Outros relevantes fatos quanto o surgimento do .NET;

•Capítulo 03: Arquitetura Java; Arquitetura .NET Framework; Fundamentos do Mono (.NET Framework); Conceito Multilinguagem;

•Capítulo 04: Linguagens de programação; Conceito de Orientação a Objetos; IDE:

Principais ambientes de desenvolvimento disponível em cada tecnologia; Modo de conexão ao banco de dados.

•Capítulo 05: Comparativo prático/teórico: Gráficos analisando o desempenho de carregamento de dados de cada aplicativo implementado; Tabela comparando alguns dos principais pontos importantes de cada plataforma; Comparativo teórico: Linguagens de programação usadas na implementação; Conexão a banco de dados; Sistemas Operacionais que foram testados;

•Capítulo 06: Conclusão;

(Parte 1 de 6)

Comentários