[quote=marcosalex]Reparem que o Sergio quando falam de coisas que o Java não tem, diz que basta desenvolver, que o JAva suporta, portanto ele nao aceita os argumentos.
Por outro lado, quando fala de frameworks que o java já tem, diz que é vantagem porque no .net você teria de desenvolver, o que toma tempo e portanto nao aceita os argumentos.
Como argumentar com alguém que tem dois pesos e duas medidas é impossivel…[/quote]
[quote=marcosalex]Reparem que o Sergio quando falam de coisas que o Java não tem, diz que basta desenvolver, que o JAva suporta, portanto ele nao aceita os argumentos.
Por outro lado, quando fala de frameworks que o java já tem, diz que é vantagem porque no .net você teria de desenvolver, o que toma tempo e portanto nao aceita os argumentos.
Como argumentar com alguém que tem dois pesos e duas medidas é impossivel…[/quote]
suponho que esse sergio ai seja eu. nesse caso o que tenho a dizer é :você não entendeu nada.
Bem simples, para vc entender:
Java = > Plataforma virtual = > Base para fazer plataformas de aplicação
Frameworks Java => pedaços de plataforma de aplicação
.NET => Plataforma virtual + alguns pedaços de plataforma de aplicação prontos => Base para fazer plataformas de aplicação, mas não é obrigatorio usar dessa forma se usar os pedaços já existentes.
Fazer frameworks em java é uma necessidade porque é para isso que o java serve. Em .NET não é obrigatório.
[quote=sergiotaborda]Eu não me estava a referir ao método newInstance de Class. Foi um exemplo de um método qualquer… foi mal usar esse nome,
mas decorre da citação da conversa.[/quote]
Eu também não. Pelo que entendi, você tinha falado que quando temos um método com um parâmetro genérico, precisamos declarar o mesmo parâmetro na classe para que o compilador possa determinar o tipo correto:
[code]class ClasseGenerica {
public static T metodoEstaticoGenericoSemArgumentos() {
}
}[/code]
E eu falei que não precisa, pois podemos informar explicitamente o tipo do parâmetro do método ao chamá-lo:
Mas talvez eu tenha entendido errado o que você falou. Se for o caso, desculpe-me.
[quote=sergiotaborda][quote=marcosalex]Reparem que o Sergio quando falam de coisas que o Java não tem, diz que basta desenvolver, que o JAva suporta, portanto ele nao aceita os argumentos.
Por outro lado, quando fala de frameworks que o java já tem, diz que é vantagem porque no .net você teria de desenvolver, o que toma tempo e portanto nao aceita os argumentos.
Como argumentar com alguém que tem dois pesos e duas medidas é impossivel…[/quote]
suponho que esse sergio ai seja eu. nesse caso o que tenho a dizer é :você não entendeu nada.
Bem simples, para vc entender:
Java = > Plataforma virtual = > Base para fazer plataformas de aplicação
Frameworks Java => pedaços de plataforma de aplicação
.NET => Plataforma virtual + alguns pedaços de plataforma de aplicação prontos => Base para fazer plataformas de aplicação, mas não é obrigatorio usar dessa forma se usar os pedaços já existentes.
Fazer frameworks em java é uma necessidade porque é para isso que o java serve. Em .NET não é obrigatório.
[/quote]
Ninguém é obrigado a programar nenhum framework em java, nem no .net. Você pode optar por swing ou awt, ou swt. Com .net winforms ou gtk, atk, ou wxwidgets. Basta ter uma máquina virtual, e uma linguagem. A não ser que não exista nenhum disponível na net que não se enquadre no seu projeto. Mas, isso diz respeito tanto ao java como ao .net.
Ao comparar uma plataforma com outra, deve-se levar em conta performance, linguagens disponíveis a ela, e ferramentas(frameworks).
Respondendo ao tópico, java ganha no item 1, e no item3.
DotNet por possuir uma linguagem flexível como c#, que te dá poder de escolha, no item2.
O ponto era exatamente esse, só tem sentido falar em ROI se você levar em conta o ambiente. Então, quando você fala em “mundo corporativo”, você está se referindo a que? Automação comercial? Ou industrial? Ou das corporações que fazem produtos de prateleira, para usuários domésticos?
Se for o mercado de jogos, por exemplo, a quantidade de jogadores Windows é ainda superior a essa e você vai estar, efetivamente, falando em multiplataforma para um mercado de menos de 2% dos jogadores. No de celulares, a estatística se inverte, e você vai ter quase 95% dos usuários querendo jogos em Java, já que o aparelho muda de ano em ano, e há um número sem-fim de modelos no mercado.
Em muitas aplicações caseiras, você vai ter exatamente essa estatística, ou próxima dela. Isso inclui aplicações para exibir vídeo, navegadores, messenger, etc… não é a toa que existem muito mais empresas grandes investindo em aplicações para usuário final em Windows do que em Linux, ou mesmo Mac.
Por outro lado, você pode tentar fazer algum servidor web, e nesse caso, pode ser que seja interessante suportar apenas as plataformas Unix, e deixar até mesmo o Windows de lado. Tudo vai depender do grau de interatividade com a máquina que sua aplicação exigir. Ou que seu cliente quiser.
Multiplataforma é interessante para a maior parte das aplicações de automação comercial hoje em dia. Até porque, você geralmente as instalará num parque de máquinas grande, onde você deverá suportar praticamente todo o tipo de ambiente.
Mas elas não são as únicas aplicações existentes. Certamente é um mercado grande, e trabalhando com web será praticamente o único mercado que você poderá ver em sua carreira inteira. Não estou desmerecendo, em hipótese nenhuma, nem a dimensão, nem a importância desse mercado, ou as pessoas que só atuarão nele (até pq, acho que todos nós morreremos sem atuar em todos os mercados possíveis e imagináveis).
Mas, só faz sentido em falar em ROI, ou analisar o ganho financeiro de uma linguagem, se você souber de que mercado estamos falando. Até por isso, discutir sobre linguagens é geralmente inútil. Isso volta naquela questão. Se você trabalha dentro de uma grande empresa, com servidores IIS, SQL Servers, e um parque de máquinas Windows (foi aprovado assim pela infra, não vão mudar, pois teria que mudar o manual de processos), por que você teria que desenvolver em multi-plataforma para essa mesma empresa?[/quote]
talvez a palavra corporativo não tenha sido bem usada por mim, ou mal interpretada por você, mas eu disse mais de uma vez a palavra varejo la em cima. Jogos jamais serão usados em empresas, a menos que o dono queira ir a falência. quem joga é usuário de computador pessoal e não empresa(corporativo ?). Se o .Net da suporte para isso, ponto pra ele sem duvida, acho que vai ganhar do java sempre ai.
Mas o que eu quis dizer é que existem empresas grandes, multinacionais que optaram por usar Linux em todas as suas maquinas de atendimento, incluindo alguns hipermercados que eu pude observar aqui no Brasil, que é um pais MS. Juntando isso aos que já usam Unix e Linux para web, eu acho que o número de Windows rodando em maquinas de empresas não tenha esse volume todo mais(95%). Linux é uma opção barata, se tiver uma empresa de nome dando suporte, ele se torna muito viável para maquinas estilo terminal e acredite não são poucas não. Imagine quantos call-centers devem existir. Para softwares desse tipo não vejo em que o .Net e mesmo o mono seria melhor, e usar mono não teria suporte de nenhuma empesa. Nesse caso a melhor opção é java. E só para firmar o que eu disse, os softwares que eu ví eram feitos em Swing. Mas não estou puxando a sardinha, apenas achei exagero dizer que fazer em java é muito mais difícil que fazer em .Net, e que Windows domina 95% do mercado. Agora se contar computadores pessoais ai vai dar mais de 120% para o windows pirata.
Onde que o .Net é multi-plataforma, se só funciona na plataforma Microsoft? O mono? Isso não vinga, ninguém se interessa em desenvolver em uma ferramenta que o mercado não adotou e nem vai adotar.
O mono está em dispositivos que o java ainda não chegou. Por exemplo o IPod.
E digo mais, o mono está se desenvolvendo mais rápido que o java, e pode levar as plataformas unix, o que o java ainda não levou, como aplicativos win e jogos.
É como o pessoal citou acima. Existem outros tipos de mercados diferentes do corporativo.
[quote=tnaires][quote=sergiotaborda]Eu não me estava a referir ao método newInstance de Class. Foi um exemplo de um método qualquer… foi mal usar esse nome,
mas decorre da citação da conversa.[/quote]
Eu também não. Pelo que entendi, você tinha falado que quando temos um método com um parâmetro genérico, precisamos declarar o mesmo parâmetro na classe para que o compilador possa determinar o tipo correto:
[code]class ClasseGenerica {
public static T metodoEstaticoGenericoSemArgumentos() {
}
}[/code]
E eu falei que não precisa, pois podemos informar explicitamente o tipo do parâmetro do método ao chamá-lo:
Mas talvez eu tenha entendido errado o que você falou. Se for o caso, desculpe-me.[/quote]
Repare, são coisas diferentes. quando vc usa um método puramente covariante o compilador não sabe quem é T, e por isso vc pode escrever class.metodo() para informar o compilador do tipo que vc pretende usar.
Mas para ter acesso dentro do método em si , ao tipo correto de T, esse truque não funciona por é só para o compilador.
Quando vc usa na def da classe e depois criar um objeto com um tipo concreto a classe está tipada e portanto vc pode acessar ao tipo dela. Via reflection API, ok, mas esse é o jeito padrão de acessar metadados em java.
[quote=juliocbq][quote=sergiotaborda]
Bem simples, para vc entender:
Java = > Plataforma virtual = > Base para fazer plataformas de aplicação
Frameworks Java => pedaços de plataforma de aplicação
.NET => Plataforma virtual + alguns pedaços de plataforma de aplicação prontos => Base para fazer plataformas de aplicação, mas não é obrigatorio usar dessa forma se usar os pedaços já existentes.
Fazer frameworks em java é uma necessidade porque é para isso que o java serve. Em .NET não é obrigatório.
[/quote]
Ninguém é obrigado a programar nenhum framework em java, nem no .net. Você pode optar por swing ou awt, ou swt. Com .net winforms ou gtk, atk, ou wxwidgets. Basta ter uma máquina virtual, e uma linguagem. A não ser que não exista nenhum disponível na net que não se enquadre no seu projeto. Mas, isso diz respeito tanto ao java como ao .net.
[/quote]
O seu pensamento e conclusão são as de 99,99% dos desenvolvedores que não entendem o que é uma plataforma de aplicação - eles acham que é a própria aplicação.
Eu tentei deixar o mais claro possivel : java não foi feito com a intensão de ser uma plataforma de aplicação. .NET foi. Essa é uma diferença importante.
O fato de vc poder usar as API de forma “crua” não significa nada porque sempre, em algum ponto, vc terá que as usar. O conceito aqui é mais alto nivel que usar APIs, é definir API para a aplicação cuja implementação é baseada nas API cruas, mas que do ponto de vista da aplicação poderiam ser mágicas.
A forma como vc faz o design do plataforma de aplicação define as propriedades da aplicação. òbviamente vc pode fazer “nenhum design” e usar tudo cru, mas se vc tem experiencia suficiente com desenvolvimento, vc sabe que isso é impossivel.Sempre vc adapta a API crua, às suas necessidades. O nivel de abstração com que vc faz isso define a espessura da sua camada de aplicação.
quando no .NET vc arasta um componente, o configura para ligar no banco e "magicamente"ele trás as linhas da tabela vc não programou nada. Vc usou a plataforma de aplicação que já está inclusa no .NET. tente fazer o mesmo em java (é possivel,existem componentes iguais, mas normalmente não free) vc tem que fazer, ou comprar feito, porque java não contém nada da plataforma de aplicação. java não sugere nada para o seu design , por isso que vc precisa saber patterns e boas práticas ou vc está na lama.
Essa é uma comparação simplista, virada ao desenvolvedor. Arquitetos têm que pensar em custos, integração com outras aplicações em outras tecnologias, aderencia a protocolos, mas sobretudo custos, tanto de implementação quando de manutenção e evolução (a evolução é que f… um sistema e o torna obsoleto)
Se vc faz um sistema por 1.000 e gasta 10.000 por ano para o manter e um outro que custa 100.000 e custa 1000 para manter, qual vc prefere ?
As variáveis da equação arquitetural (que é onde se escolher a plataforma) são de mais alto nivel do que a linguagem ou o codigo ou a facilidade que o programador terá. A facilidade é coisa para o designer se preocupar,mas ai a plataforma já foi escolhida. Um bom designer lhe dará uma plataforma de aplicação simples e eficiente em qualquer plataforma.
[quote]A forma como vc faz o design do plataforma de aplicação define as propriedades da aplicação. òbviamente vc pode fazer “nenhum design” e usar tudo cru, mas se vc tem experiencia suficiente com desenvolvimento, vc sabe que isso é impossivel.Sempre vc adapta a API crua, às suas necessidades. O nivel de abstração com que vc faz isso define a espessura da sua camada de aplicação.
quando no .NET vc arasta um componente, o configura para ligar no banco e "magicamente"ele trás as linhas da tabela vc não programou nada. Vc usou a plataforma de aplicação que já está inclusa no .NET. tente fazer o mesmo em java (é possivel,existem componentes iguais, mas normalmente não free) vc tem que fazer, ou comprar feito, porque java não contém nada da plataforma de aplicação. java não sugere nada para o seu design , por isso que vc precisa saber patterns e boas práticas ou vc está na lama. [/quote]
Claro que não. O que eu quero dizer é que ninguém é obrigado usar frameworks. Você citou que dotnet precisava, antes, no outro post. Para você ter uma idéia, eu raramente uso banco de dados em aplicações, a maioria dos dados que preciso armazenar são gravados em arquivos serializados.
Não podemos confundir atuações. Um arquiteto trabalha de uma forma, um doutor numa universidade com outra, um analista de outra maneira, um engenheiro de outra, e por ae vai.
[quote=juliocbq][quote]A forma como vc faz o design do plataforma de aplicação define as propriedades da aplicação. òbviamente vc pode fazer “nenhum design” e usar tudo cru, mas se vc tem experiencia suficiente com desenvolvimento, vc sabe que isso é impossivel.Sempre vc adapta a API crua, às suas necessidades. O nivel de abstração com que vc faz isso define a espessura da sua camada de aplicação.
quando no .NET vc arasta um componente, o configura para ligar no banco e "magicamente"ele trás as linhas da tabela vc não programou nada. Vc usou a plataforma de aplicação que já está inclusa no .NET. tente fazer o mesmo em java (é possivel,existem componentes iguais, mas normalmente não free) vc tem que fazer, ou comprar feito, porque java não contém nada da plataforma de aplicação. java não sugere nada para o seu design , por isso que vc precisa saber patterns e boas práticas ou vc está na lama. [/quote]
Claro que não. O que eu quero dizer é que ninguém é obrigado usar frameworks. Você citou que dotnet precisava, antes, no outro post.
[/quote]
Não. Releia com atenção. Eu falei exactamente o contrário Java precisa usar frameworks externos ao core (JSE,JME,JEE) porque o core não tem logica de negocio alguma, .NET não. Em .NET existem componentes que já fazem um monte de coisa sem precisar plugar nada. Simplesmente configura e voi-la.
Pois é, mas vc usa as classes de I/O não usa ? Ora ai está, vc usa o core.
Agora, se vc criou uma API para gerenciar isso, ai a sua aplicação não usa mais o core directamente, usa a sua API. Essa sua
API é um pedaço da plataforma de aplicação.
A conversa não tem nada a haver com isso. Não é uma questão de gosto ou de contexto ou de ramo de negocio. É uma questão tecnica sobre como se decide qual plataforma virtual usar numa arquitetura. um dos fatores é : qual é a facilidade de montar uma plataforma de aplicação em cima dessa plataforma virtual ? é a resposta a esta pergunta que não é trivial porque conforme a aplicação, a plataforma para ela será diferente. Um jogo tem uma plataforma diferente que um sistema cadastro. Para um será mais facil usar a plataforma virtual X e para outro a Y. Mas isso é apenas 1 dos fatores para a escolha. Existem dezenas…
O java tem seu desnvolvimento constante, enquanto que o mono está parado, totalmente estagnado. Pessoalmente, não pretendo utilizar uma ferramenta que não irá me acrescentar nada.
Fazer frameworks em java é uma necessidade porque é para isso que o java serve. Em .NET não é obrigatório.
[/quote]
Não é necessidade. Como te falei, cada caso de trabalho é um caso.[/quote]
Para que fique bem claro: é uma necessidade sim.
O fato das pessoas não fazerem é um problema. É uma deficiência na educação que causa problemas e prejuizos.
É como lavar as mãos. é necessário. Se vc não fizer terá problemas.
Ninguem obriga, mas isso não significa que não seja necessário.
Fazer frameworks em java é uma necessidade porque é para isso que o java serve. Em .NET não é obrigatório.
[/quote]
Não é necessidade. Como te falei, cada caso de trabalho é um caso.[/quote]
Para que fique bem claro: é uma necessidade sim.
O fato das pessoas não fazerem é um problema. É uma deficiência na educação que causa problemas e prejuizos.
É como lavar as mãos. é necessário. Se vc não fizer terá problemas.
Ninguem obriga, mas isso não significa que não seja necessário.[/quote]
Sergio, na sua área pode até ser, mas acredite, algumas pessoas desenvolvem software para uso interno, em instituições científicas, e em engenharia de hardware(que também desenvolve software). O que você está dizendo não tem o menor cabimento nessas citadas, e nem por isso, não têm qualidade. Nem todo mundo vai vender para setor corporativo, ou mesmo comercializar um software, entende?
Fazer frameworks em java é uma necessidade porque é para isso que o java serve. Em .NET não é obrigatório.
[/quote]
Não é necessidade. Como te falei, cada caso de trabalho é um caso.[/quote]
Para que fique bem claro: é uma necessidade sim.
O fato das pessoas não fazerem é um problema. É uma deficiência na educação que causa problemas e prejuizos.
É como lavar as mãos. é necessário. Se vc não fizer terá problemas.
Ninguem obriga, mas isso não significa que não seja necessário.[/quote]
Sergio, na sua área pode até ser, mas acredite, algumas pessoas desenvolvem software para uso interno, em instituições científicas, e em engenharia de hardware(que também desenvolve software). O que você está dizendo não tem o menor cabimento nessas citadas, e nem por isso, não têm qualidade. Nem todo mundo vai vender para setor corporativo, ou mesmo comercializar um software, entende?
Cada caso é um caso.[/quote]
Acho que vc ainda não entendeu : o que eu estou dizendo não depende do objetivo do software. Não depende da aplicação (do caso).Aqui o “cada caso é um caso” não se aplica. O que eu estou dizendo advem da plataforma em si, e essa é a mesma para todos os casos. A necessiadade de uma plataforma de aplicação é omnipresente seja qual for o seu caso. Reflita sobre isto e só continue lendo depois que entendeu isto.
Se vc a usa, se vc a implementa, conscientemente ou não, com qualidade ou não, se vc sequer sabe o que é isso ou não, etc… é outro assunto. O ponto aqui é: em Java - seja qual for o uso - é esperado que vc monte uma plataforma de aplicação em cima do core (as editions). Todo o design, decisões, trade-offs, etc… servem para saber a diferença.
Consulte o JCP. Todas as requisições de API que , de alguma forma, podem ser consideradas da plataforma de aplicação não foram aceites. Isto é proposital. Porque a plataforma java é virtual e a sun nunca a quiz consporcar (porque eles sabem o que fazem) … agora daqui para a frente os tempo são outros e talvez java fique mais poluido como o .NET, mas até agora estes são os fatos.
Fazer frameworks em java é uma necessidade porque é para isso que o java serve. Em .NET não é obrigatório.
[/quote]
Não é necessidade. Como te falei, cada caso de trabalho é um caso.[/quote]
Para que fique bem claro: é uma necessidade sim.
O fato das pessoas não fazerem é um problema. É uma deficiência na educação que causa problemas e prejuizos.
É como lavar as mãos. é necessário. Se vc não fizer terá problemas.
Ninguem obriga, mas isso não significa que não seja necessário.[/quote]
Sergio, na sua área pode até ser, mas acredite, algumas pessoas desenvolvem software para uso interno, em instituições científicas, e em engenharia de hardware(que também desenvolve software). O que você está dizendo não tem o menor cabimento nessas citadas, e nem por isso, não têm qualidade. Nem todo mundo vai vender para setor corporativo, ou mesmo comercializar um software, entende?
Cada caso é um caso.[/quote]
Acho que vc ainda não entendeu : o que eu estou dizendo não depende do objetivo do software. Não depende da aplicação (do caso).Aqui o “cada caso é um caso” não se aplica. O que eu estou dizendo advem da plataforma em si, e essa é a mesma para todos os casos. A necessiadade de uma plataforma de aplicação é omnipresente seja qual for o seu caso. Reflita sobre isto e só continue lendo depois que entendeu isto.
Se vc a usa, se vc a implementa, conscientemente ou não, com qualidade ou não, se vc sequer sabe o que é isso ou não, etc… é outro assunto. O ponto aqui é: em Java - seja qual for o uso - é esperado que vc monte uma plataforma de aplicação em cima do core (as editions). Todo o design, decisões, trade-offs, etc… servem para saber a diferença.
Consulte o JCP. Todas as requisições de API que , de alguma forma, podem ser consideradas da plataforma de aplicação não foram aceites. Isto é proposital. Porque a plataforma java é virtual e a sun nunca a quiz consporcar (porque eles sabem o que fazem) … agora daqui para a frente os tempo são outros e talvez java fique mais poluido como o .NET, mas até agora estes são os fatos.
[/quote]
Vixi, o Sergio causando encrenca novamente nesse assunto?
Aproveitando o ensejo do Vini vou dizer algumas experiencias que obtive sobre multiplataforma.
Eu enfrento essas indagações frequentemente.
Quando se está negociando com alguma empresa na primeira conversa o termo multiplataforma salta os olhos mas muita coisa chegará a ser examinada até o fechamento da proposta. Primeiro que quem compra nem sempre é quem mais entende das necessidades e segundo que quem vende é treinado para vender e nem sempre detalhes tecnologicos serão o diferencial. Neste bolo existem ainda aqueles que por uma boa comissão receberão seu produto de braços abertos.
Trabalhar com usuário nunca é coisa facil, logo estações clientes acabam sendo plataforma windows até porque o tempo que se perde, o treinamento que precisa ser pago nem compensa mudar de plataforma. No lado servidor quase sempre vai entrar em conta o que o Vini disse, a empresa já terá seu parque computacional. Mudar a infraestrutura demanda tempo e profissionais capacitados para trabalhar em linux ou mac são dificeis e caros. Para piorar, hoje em dias as empresas querem ganhar por todos os lados e acaba que quando o cliente não tem infraestrutura além de vender o software a empresa vende o hardware também.
É dureza de aceitar mas em muitas empresas o departamento de TI será um dos ultimos a ser consultado na equisição.
Sobre o assunto Java vesus .Net as coisas que o .Net tem e realmente me fazem falta no Java e a questão de um RIA realmente atrativo (espero que não me citem applet novamente) e APIs que me possibilitem trabalhar a fundo com multimida principalmente videos.