Objective C

26 respostas
L

Estou estudando as ferramentas da Apple e estou impressionado. O Objective C é muito bom, e estou gostando mais do que Java. É bom porque é uma linguagem de baixo nível e dinâmica. Quem é fã de Ruby ou Groovy saiba que ele faz tudo aquilo (adicionar métodos em tempo de execução, blocos, etc.), só que mais rápido. A memória é gerenciada pelo sistema automático de contagem de referências, então não tem problemas comuns às linguagens gerenciadas.

Outra dica é que mesmo que você estude a linguagem em si, seja através de livro ou internet, você provavelmente ficará perdido no Xcode, pois ele é muito diferente do Eclipse e Visual Studio. Um livro sensacional que vai ter dar a “luz” no Xcode e na plataforma Apple é esse aqui.

A filosofia é totalmente diferente, por exemplo, não se escreve código de interface. Toda a informação da interface fica em um arquivo separado, e o código é apenas referenciado de uma forma mais parecida com Delphi. Aliás, é mil vezes mais inteligente do que ficar extendendo JFrames. Pelo amor de Deus, quem projetou o Swing precisa fazer um curso com a Apple.

26 Respostas

W

Longino:
Estou estudando as ferramentas da Apple e estou impressionado. O Objective C é muito bom, e estou gostando mais do que Java. É bom porque é uma linguagem de baixo nível e dinâmica. Quem é fã de Ruby ou Groovy saiba que ele faz tudo aquilo (adicionar métodos em tempo de execução, blocos, etc.), só que mais rápido. A memória é gerenciada pelo sistema automático de contagem de referências, então não tem problemas comuns às linguagens gerenciadas.

Se o Object C for baixo nivel, papai noel existe e a Dilma eh a mulher mais bonta do Brasil. :slight_smile:

Nao entendi, o que voce quis dizer com nao se escreve codigo de interface e que fica num arquivo separado. Ate onde eu sei interface em Objective C eh mais ou menos igual Header Files em C nao eh?? Voce criar a interface num arquivo normalmente com a extensao .h e faz a implementacao num outro arquivo.

Eu nao gosto Objective C, eh estranho, dificil de aprender, eh complexo ate para fazer coisas simples, fora que eh muito chato. Eu ficaria feliz se a Apple tivesse escolhido outra linguagem de programacao para desenvolver apps para iPhone e iPad.

//Daniel

D

windsofhell:
Longino:
Estou estudando as ferramentas da Apple e estou impressionado. O Objective C é muito bom, e estou gostando mais do que Java. É bom porque é uma linguagem de baixo nível e dinâmica. Quem é fã de Ruby ou Groovy saiba que ele faz tudo aquilo (adicionar métodos em tempo de execução, blocos, etc.), só que mais rápido. A memória é gerenciada pelo sistema automático de contagem de referências, então não tem problemas comuns às linguagens gerenciadas.

Se o Object C for baixo nivel, papai noel existe e a Dilma eh a mulher mais bonta do Brasil. :slight_smile:

Nao entendi, o que voce quis dizer com nao se escreve codigo de interface e que fica num arquivo separado. Ate onde eu sei interface em Objective C eh mais ou menos igual Header Files em C nao eh?? Voce criar a interface num arquivo normalmente com a extensao .h e faz a implementacao num outro arquivo.

Eu nao gosto Objective C, eh estranho, dificil de aprender, eh complexo ate para fazer coisas simples, fora que eh muito chato. Eu ficaria feliz se a Apple tivesse escolhido outra linguagem de programacao para desenvolver apps para iPhone e iPad.

//Daniel

a documentação deles não é nada didática…um grande incentivo à gastar com cursos no exterior…

J

douglaskd:

a documentação deles não é nada didática…um grande incentivo à gastar com cursos no exterior…

Uma das primeiras coisas que me chamou a atenção quando comecei a desenvolver para iOS é a qualidade da documentação oficial.

D

JoseIgnacio:
douglaskd:

a documentação deles não é nada didática…um grande incentivo à gastar com cursos no exterior…

Uma das primeiras coisas que me chamou a atenção quando comecei a desenvolver para iOS é a qualidade da documentação oficial.

pois é

J

windsofhell:

Eu nao gosto Objective C, eh estranho, dificil de aprender, eh complexo ate para fazer coisas simples, fora que eh muito chato. Eu ficaria feliz se a Apple tivesse escolhido outra linguagem de programacao para desenvolver apps para iPhone e iPad.

//Daniel

Acho que desenvolvedores de apps estão muito felizes que não precisam lidar com monstruosidades feito Swing e nem fragmentação do Android.

D

Existem mulheres altas, médias e baixas, magras, normais e gordas, negras, morenas, ruivas e loiras e todas elas são uma combinação de um pouco de cada um disso e tem quem goste de mulheres loiras, gordas e baixas e há quem prefira as negras, magras e altas.
Há quem não prefira mulher, pois acha os homens mais interessantes por alguma razão. Há quem não se interesse por pessoas, apenas por dinheiro.
Assim o mundo gira. Se você tem uma mulher do jeito que gosta, ótimo.

O

Objective C não é uma linguagem de baixo nível. Para tarefas de baixo nível, vc utiliza a API em C do Core Foundation, que a apple chama de “Procedural C”.

Longino:
A filosofia é totalmente diferente, por exemplo, não se escreve código de interface. Toda a informação da interface fica em um arquivo separado, e o código é apenas referenciado de uma forma mais parecida com Delphi. Aliás, é mil vezes mais inteligente do que ficar extendendo JFrames. Pelo amor de Deus, quem projetou o Swing precisa fazer um curso com a Apple.

Na verdade não é bem assim…
Para desenhar interfaces vc utiliza o interface builder, que gera um arquivo xml(.xib) que contém toda a informação dos componentes e posicionamento dos mesmos. Mas isso tem uma limitação, se vc quiser desenhar interfaces mais elaboradas e dinâmicas, será necessário codificar as interfaces na mão, assim como no Java. Não é tão trabalhoso quanto Swing mas não é tão simples assim tb…

J

Objective C não é uma linguagem de baixo nível. Para tarefas de baixo nível, vc utiliza a API em C do Core Foundation, que a apple chama de “Procedural C”.

Longino:
A filosofia é totalmente diferente, por exemplo, não se escreve código de interface. Toda a informação da interface fica em um arquivo separado, e o código é apenas referenciado de uma forma mais parecida com Delphi. Aliás, é mil vezes mais inteligente do que ficar extendendo JFrames. Pelo amor de Deus, quem projetou o Swing precisa fazer um curso com a Apple.

Na verdade não é bem assim…
Para desenhar interfaces vc utiliza o interface builder, que gera um arquivo xml(.xib) que contém toda a informação dos componentes e posicionamento dos mesmos. Mas isso tem uma limitação, se vc quiser desenhar interfaces mais elaboradas e dinâmicas, será necessário codificar as interfaces na mão, assim como no Java. Não é tão trabalhoso quanto Swing mas não é tão simples assim tb…

Toda IDE usa um esquema de xml para guardar as propriedades de componentes gráficos. O delphi usa, qcreator usa, visual studio usa, netbeans usa(.form) Com exceção ao eclipse(win builder) que constrói o código diretamente usando java.

Agora eu li uma coisa nesse tópico que me deixou intrigado, e se eu não tivesse lido não acreditaria. Alguns aqui juraram no guj que a linguagem c era uma linguagem defasada e que nada a partir dela era bom. E agora estão usando objective c que nada mais é que linguagem c orientada a objetos.
Realmente o mundo gira bastante, além de ser um lugar pequeno. Isso é bom.

R

Objective C não é uma linguagem de baixo nível. Para tarefas de baixo nível, vc utiliza a API em C do Core Foundation, que a apple chama de “Procedural C”.

Longino:
A filosofia é totalmente diferente, por exemplo, não se escreve código de interface. Toda a informação da interface fica em um arquivo separado, e o código é apenas referenciado de uma forma mais parecida com Delphi. Aliás, é mil vezes mais inteligente do que ficar extendendo JFrames. Pelo amor de Deus, quem projetou o Swing precisa fazer um curso com a Apple.

Na verdade não é bem assim…
Para desenhar interfaces vc utiliza o interface builder, que gera um arquivo xml(.xib) que contém toda a informação dos componentes e posicionamento dos mesmos. Mas isso tem uma limitação, se vc quiser desenhar interfaces mais elaboradas e dinâmicas, será necessário codificar as interfaces na mão, assim como no Java. Não é tão trabalhoso quanto Swing mas não é tão simples assim tb…

Toda IDE usa um esquema de xml para guardar as propriedades de componentes gráficos. O delphi usa, qcreator usa, visual studio usa, netbeans usa(.form) Com exceção ao eclipse(win builder) que constrói o código diretamente usando java.

Agora eu li uma coisa nesse tópico que me deixou intrigado, e se eu não tivesse lido não acreditaria. Alguns aqui juraram no guj que a linguagem c era uma linguagem defasada e que nada a partir dela era bom. E agora estão usando objective c que nada mais é que linguagem c orientada a objetos.
Realmente o mundo gira bastante, além de ser um lugar pequeno. Isso é bom.

Tem gente que diz que COBOL e LISP também são defasadas.

Vai entender… :roll:

J

Objective C não é uma linguagem de baixo nível. Para tarefas de baixo nível, vc utiliza a API em C do Core Foundation, que a apple chama de “Procedural C”.

Objective-c pode ser ou não uma linguagem baixo nível. Depende de como você programa. Conheço gente que programa baixo nível sem problemas, outros preferem usar a linguagem em sua plenitude.

Na verdade não é bem assim…
Para desenhar interfaces vc utiliza o interface builder, que gera um arquivo xml(.xib) que contém toda a informação dos componentes e posicionamento dos mesmos. Mas isso tem uma limitação, se vc quiser desenhar interfaces mais elaboradas e dinâmicas, será necessário codificar as interfaces na mão, assim como no Java. Não é tão trabalhoso quanto Swing mas não é tão simples assim tb…

Mesmo fazendo a mão garanto que acaba usando uma fração do código necessário pra fazer algo com Swing.

Isso é que chamo de simplicidade.

J
JoseIgnacio:
OliveirakunJava:
Longino:
Estou estudando as ferramentas da Apple e estou impressionado. O Objective C é muito bom, e estou gostando mais do que Java. É bom porque é uma linguagem de baixo nível e dinâmica...

Objective C não é uma linguagem de baixo nível. Para tarefas de baixo nível, vc utiliza a API em C do Core Foundation, que a apple chama de "Procedural C".

Objective-c pode ser ou não uma linguagem baixo nível. Depende de como você programa. Conheço gente que programa baixo nível sem problemas, outros preferem usar a linguagem em sua plenitude.

OliveirakunJava:
Longino:
A filosofia é totalmente diferente, por exemplo, não se escreve código de interface. Toda a informação da interface fica em um arquivo separado, e o código é apenas referenciado de uma forma mais parecida com Delphi. Aliás, é mil vezes mais inteligente do que ficar extendendo JFrames. Pelo amor de Deus, quem projetou o Swing precisa fazer um curso com a Apple.

Na verdade não é bem assim...
Para desenhar interfaces vc utiliza o interface builder, que gera um arquivo xml(.xib) que contém toda a informação dos componentes e posicionamento dos mesmos. Mas isso tem uma limitação, se vc quiser desenhar interfaces mais elaboradas e dinâmicas, será necessário codificar as interfaces na mão, assim como no Java. Não é tão trabalhoso quanto Swing mas não é tão simples assim tb...

Mesmo fazendo a mão garanto que acaba usando uma fração do código necessário pra fazer algo com Swing.

Isso é que chamo de simplicidade.

Objective c não pode ser uma linguagem de baixo nível. O que o compilador faz é te permitir escrever diretamente em c. Existem outras linguagens que também são sets da linguagem c como vala e c++.
Dentro de um programa c++ você pode usar c e com vala é a mesma coisa, consequentemente com objective c:

wiki:
O Objective-C é uma camada muito fina construída sobre a linguagem C e constitui-se num superconjunto estrito de C. Ou seja, é possível compilar qualquer programa C com um compilador Objective-C. O Objective-C deriva sua sintaxe tanto do C quanto do Smalltalk. A maior parte de sua sintaxe (incluindo pré-processamento, expressões, declaração e chamadas de funções) foi herdada da linguagem C, enquanto a sintaxe para os aspectos orientados a objetos foi criada para habilitar passagem de mensagens no estilo Smalltalk.

http://pt.wikipedia.org/wiki/Objective-C

class Demo.HelloWorld : GLib.Object {

    public static int main(string[] args) {

        stdout.printf("Hello, World\n");

        return 0;
    }
}

https://live.gnome.org/Vala/Documentation
https://live.gnome.org/Vala/MultiImplementInC

c++ possui um compilador que já constroi assembly diretamente. vala compila para c e posteriormente para assembly.

Na minha opinião acho que java estaria melhor servido se usasse esse mesmo conceito. Objective c, vala conseguem produzir executáveis muito eficientes. Afinal são programas construidos por um compilador de linguagem c.

L

É tanto quanto C, pois é um superset em cima dele. Todas as features de C estão lá.

windsofhell:

Nao entendi, o que voce quis dizer com nao se escreve codigo de interface e que fica num arquivo separado. Ate onde eu sei interface em Objective C eh mais ou menos igual Header Files em C nao eh?? Voce criar a interface num arquivo normalmente com a extensao .h e faz a implementacao num outro arquivo.

Não, a interface é montada no Interface Builder e é salva nos ditos arquivos .NIB e carregado em tempo de execução. Ou seja, dificilmente você instanciará objetos você mesmo, a menos que esteja criando uma view customizada.

O código nos arquivos .m é apenas a implementação de eventos e coisas do gênero.

Comparado com o Swing é o paraíso. Lembrou-me do Delphi.

windsofhell:

Eu nao gosto Objective C, eh estranho, dificil de aprender, eh complexo ate para fazer coisas simples, fora que eh muito chato. Eu ficaria feliz se a Apple tivesse escolhido outra linguagem de programacao para desenvolver apps para iPhone e iPad.

Só o fato de permitir alterar classes sem precisar do código fonte já é mais do que o Java faz (e C++). Isso favorece o uso de composição ao invés de herança e torna a manutenção de sistemas mais fácil, pois se uma biblioteca de terceiro “se esquece” de implementar algo que você precisaria, você pode ir lá e adicionar o método você mesmo.

É muito menos burocrático de se trabalhar. O ruim de linguagens dinâmicas geralmente é a velocidade, mas com algo próximo de C você pode ter o melhor dos dois mundos.

L

juliocbq:
Objective c não pode ser uma linguagem de baixo nível. O que o compilador faz é te permitir escrever diretamente em c. Existem outras linguagens que também são sets da linguagem c como vala e c++.
Dentro de um programa c++ você pode usar c e com vala é a mesma coisa, consequentemente com objective c:

Uma linguagem que tem ponteiros e não oferece garantia de segurança de memória é baixo nível. Se C é baixo nível, então Objective C também é.

L

juliocbq:

Agora eu li uma coisa nesse tópico que me deixou intrigado, e se eu não tivesse lido não acreditaria. Alguns aqui juraram no guj que a linguagem c era uma linguagem defasada e que nada a partir dela era bom. E agora estão usando objective c que nada mais é que linguagem c orientada a objetos.
Realmente o mundo gira bastante, além de ser um lugar pequeno. Isso é bom.

Jamais disse que era defasada, apenas que é limitada para determinados nichos. Objective C é um meio termo razoável, que oferece flexibidade e simplicidade na medida certa.

L

Não, a filosofia é totalmente diferente. Quando eles desenvolveram essa interface na NeXT eles fizeram de um jeito diferente mesmo. Os programadores Java (e muitos de outras linguagens) ainda pensam em termos de linha de código. Quer uma tela? Então extenda um JFrame e adicione os widgets na unha mesmo.

Está certo que certos IDEs “escondem” isso o máximo que podem, embora o “máximo” não seja bom o suficiente.

No Cocoa você começa pela interface e apenas implementa actions ou eventos em classes diferentes.

O mais próximo em PC que existe a isso seria Delphi. Em Delphi você poderia desenvolver uma aplicação inteira sem precisar fuçar com o código.

J

Longino:
juliocbq:
Objective c não pode ser uma linguagem de baixo nível. O que o compilador faz é te permitir escrever diretamente em c. Existem outras linguagens que também são sets da linguagem c como vala e c++.
Dentro de um programa c++ você pode usar c e com vala é a mesma coisa, consequentemente com objective c:

Uma linguagem que tem ponteiros e não oferece garantia de segurança de memória é baixo nível. Se C é baixo nível, então Objective C também é.

Não é porque para isso você precisa escrever “linguagem c”:

objective C

Foo* bar = malloc(sizeof(Foo));

C + + não vai compilar a menos que faça o cast explicitamente:

Foo* bar = (Foo*)malloc(sizeof(Foo));

O compilador de objective c entende c, e o de c++ faz a mesma coisa. Isso não quer dizer que c++ é uma linguagem de baixo nível, muito pelo contrário.

Outro exemplo é o pascal que te permite escrever assembly(inline). Pascal é linguagem de alto nível também.

J

Longino:
OliveirakunJava:

Na verdade não é bem assim…
Para desenhar interfaces vc utiliza o interface builder, que gera um arquivo xml(.xib) que contém toda a informação dos componentes e posicionamento dos mesmos. Mas isso tem uma limitação, se vc quiser desenhar interfaces mais elaboradas e dinâmicas, será necessário codificar as interfaces na mão, assim como no Java. Não é tão trabalhoso quanto Swing mas não é tão simples assim tb…

Não, a filosofia é totalmente diferente. Quando eles desenvolveram essa interface na NeXT eles fizeram de um jeito diferente mesmo. Os programadores Java (e muitos de outras linguagens) ainda pensam em termos de linha de código. Quer uma tela? Então extenda um JFrame e adicione os widgets na unha mesmo.

Está certo que certos IDEs “escondem” isso o máximo que podem, embora o “máximo” não seja bom o suficiente.

No Cocoa você começa pela interface e apenas implementa actions ou eventos em classes diferentes.

O mais próximo em PC que existe a isso seria Delphi. Em Delphi você poderia desenvolver uma aplicação inteira sem precisar fuçar com o código.

O qtcreator, visual studio, codeblocks fazem isso. Esse recurso já é bem antigo longino.

** me esqueci de citar o gtk com o glade.

L

juliocbq:

O qtcreator, visual studio, codeblocks fazem isso. Esse recurso já é bem antigo longino.

** me esqueci de citar o gtk com o glade.

Isso é um workaround, e não design. Da mesma forma que o editor do Netbeans que tenta esconder a feiúra do Java. O problema é que se as APIs não foram projetadas com isso em mente, o resultado não é bom.

M

realmente inovador esse método, então é feito o parse do xml para a geração da tela, acho que já vi algo parecido, mas é uma tecnologia muito nova e recente, e deve ser pouco utilizado, chama html, não sei se alguem já mecheu com esse treco.

ps: o android funciona da mesma maneira, e chamar QT e GTK de workaround é triste

J
Longino:
juliocbq:
O qtcreator, visual studio, codeblocks fazem isso. Esse recurso já é bem antigo longino.

** me esqueci de citar o gtk com o glade.

Isso é um workaround, e não design. Da mesma forma que o editor do Netbeans que tenta esconder a feiúra do Java. O problema é que se as APIs não foram projetadas com isso em mente, o resultado não é bom.

não é workaraound. O uso do xml para editores de interface já é um padrão tem bastante tempo. Se você usar o glade vai ver que segue a idéia do interface builder. Vou te mostrar um exemplo com vala:

o xml é carregado aqui:
builder.add_from_file ("sample.ui");
using Gtk;

public void on_button1_clicked (Button source) {
    source.label = "Thank you!";
}

public void on_button2_clicked (Button source) {
    source.label = "Thanks!";
}

int main (string[] args) {     
    Gtk.init (ref args);

    try {
        // If the UI contains custom widgets, their types must've been instantiated once
        // Type type = typeof(Foo.BarEntry);
        // assert(type != 0);
        var builder = new Builder ();
        builder.add_from_file ("sample.ui");
        builder.connect_signals (null);
        var window = builder.get_object ("window") as Window;
        window.show_all ();
        Gtk.main ();
    } catch (Error e) {
        stderr.printf ("Could not load UI: %s\n", e.message);
        return 1;
    } 

    return 0;
}

https://live.gnome.org/Vala/GTKSample#line-423

[youtube]http://www.youtube.com/watch?v=QRtmgZJmzoQ[/youtube]

F

Objective C == lixo

J

porquê?

L

porquê?

Esse tipo de comentário não merece nem resposta.

Se falasse mal do time do moderador ele provavelmente trancaria o tópico ou apagaria a mensagem. Agora isso pode.

L

Não tem nada a ver com HTML. Você está viajando.

EDIT: Aliás, não tem nada a ver com “definir a interface em XML” tampouco. Existe toda uma hierarquia de objetos seguindo o padrão MVC. Portanto você fará praticamente tudo por convenção, bindings, etc, sem precisar mexer em código. Algo como o Rails, “convenção sobre configuração”. É outro mundo.

L

Tosqueira. Não é isso, veja a minha mensagem anterior.

Você ainda está codificando o “main”, pelo amor de Deus.

J

Longino:
juliocbq:

o xml é carregado aqui:

Tosqueira. Não é isso, veja a minha mensagem anterior.

Você ainda está codificando o “main”, pelo amor de Deus.

posta um exemplo pra eu ver.

Criado 8 de setembro de 2012
Ultima resposta 13 de set. de 2012
Respostas 26
Participantes 10