SlideShare a Scribd company logo
1 of 19
Download to read offline
Objective-C
                vs. C++ / Java




Studenckie Koło Naukowe “MacKN”
Błażej Biesiada
Agenda
• Co to jest Obj-C?
• Historia
• Dlaczego Obj-c?
• Składnia
• Elementy charakterystyczne
• Co dalej?
Co to jest Obj-C?

• skrót od Objective-C ;-)
• rozszerzenie języka C
• obiektowość oparta na Smalltalku-u
• wykorzystywany głównie w Mac OS X
Historia

StepStone    NeXT      GNU Obj-C

  1986        1988       1993



 Apple      Mac OS X   Obj-C 2.0
  1996        2001       2007
Dlaczego Obj-C?

• Cocoa
• iPhone OS
• Objective-C 2.0
• A dlaczego C++? Think different!
[obj msg] vs. obj.met()


[obiekt wiadomosc];
[obiekt wiadomosc: arg1: arg2: arg3];
[obiekt ustawSzerokosc: arg1 Wysokosc: arg2 Glebokosc: arg3];
*.m vs. *.cpp
//ClassName.h                          //ClassName.m

@interface ClassName : ItsSuperclass   @implementation ClassName

{                                      + (id)alloc {


      float height;                   
      //...


      BOOL filled;                    }


      NSColor *fillColor;             - (void)display {

}                                      
      //...

+ (id)alloc;                           }

- (void)display;                       @end

@end
val / setVal vs. getVal / setVal


• sekcje @private, @protected, @public
• domyślnie @protected
• Key Value Coding, czyli nie tylko konwencja
id vs. void

• id - typ wskaźnikowy
• void - brak wyniku funkcji
• NIL - obiekt używany zamiast NULL
@try vs. try
Cup *cup = [[Cup alloc] init];

@try {

     [cup fill];

}

@catch (NSException *exception) {

     NSLog(@quot;main: Caught %@: %@quot;, [exception name], [exception reason]);

}

@finally {

     [cup release];

}
protokoły vs. interfejsy

@protocol MyProtocol
                                 @interface MyClass ( MyProtocol )
- (void)requiredMethod;
                                 {
@optional
                                     int myVal;
- (void)anOptionalMethod;
                                 }
- (void)anotherOptionalMethod;
                                 - (void)myOwnClassMethod;
@required
                                 @end
- (void)anotherRequiredMethod;

@end
@synchronized() vs. synchronized


- (void)criticalMethod
{
    @synchronized(self) {
        // Critical code.
        ...
    }
}
Inne różnice

• #import vs. #include
• self vs. this
• [super msg] vs. super.met()
Properties, czyli coś nowego
 @interface MyClass : NSObject
 {
        NSString *value;
 }
 @property(copy, readwrite) NSString *value;
 @end



 @implementation MyClass
        @synthesize value;
 @end
Kategorie klas
#import quot;ClassName.hquot;
@interface ClassName ( CategoryName )
       // deklaracje metod
@end




#import quot;ClassName+CategoryName.hquot;
@implementation ClassName ( CategoryName )
       // definicje metod
@end
Coś więcej?

• Rozszerzenia klas
• Fast enumeration
• współpraca z C++
Co dalej?


“The Objective-C 2.0 Programming Language”
        http://developer.apple.com/
www.mackn.agh.edu.pl
Dziękuję za uwagę!

More Related Content

Viewers also liked

Entrance Ticket and Warm Up
Entrance Ticket and Warm UpEntrance Ticket and Warm Up
Entrance Ticket and Warm UpMcCarty
 
Learning, growing and sharing: The use of Media in Mission
Learning, growing and sharing: The use of Media in MissionLearning, growing and sharing: The use of Media in Mission
Learning, growing and sharing: The use of Media in MissionPhil Prior
 
Erlang
ErlangErlang
Erlangkonryd
 
Bazaar Mercurial
Bazaar MercurialBazaar Mercurial
Bazaar Mercurialkonryd
 
Wstęp do Subversion
Wstęp do SubversionWstęp do Subversion
Wstęp do Subversionkonryd
 
Concurrency in Python
Concurrency in PythonConcurrency in Python
Concurrency in Pythonkonryd
 
School Law Jeopardy
School Law JeopardySchool Law Jeopardy
School Law JeopardyMcCarty
 
1r trimestre ies
1r trimestre ies1r trimestre ies
1r trimestre iesjribalt1
 
School Law Power Point
School Law Power PointSchool Law Power Point
School Law Power PointMcCarty
 
Adolescent Body Image
Adolescent Body ImageAdolescent Body Image
Adolescent Body ImageMcCarty
 
Quadern tut individual 1011 3ri 4t
Quadern tut individual 1011 3ri 4tQuadern tut individual 1011 3ri 4t
Quadern tut individual 1011 3ri 4tjribalt1
 
Haskell
HaskellHaskell
Haskellkonryd
 
Wprowadzenie do Pythona
Wprowadzenie do PythonaWprowadzenie do Pythona
Wprowadzenie do Pythonakonryd
 
Wstęp do Ruby\'ego
Wstęp do Ruby\'egoWstęp do Ruby\'ego
Wstęp do Ruby\'egokonryd
 
Za co nie lubi Cię Twój hoster
Za co nie lubi Cię Twój hosterZa co nie lubi Cię Twój hoster
Za co nie lubi Cię Twój hosterkonryd
 

Viewers also liked (19)

Entrance Ticket and Warm Up
Entrance Ticket and Warm UpEntrance Ticket and Warm Up
Entrance Ticket and Warm Up
 
Learning, growing and sharing: The use of Media in Mission
Learning, growing and sharing: The use of Media in MissionLearning, growing and sharing: The use of Media in Mission
Learning, growing and sharing: The use of Media in Mission
 
Erlang
ErlangErlang
Erlang
 
Bazaar Mercurial
Bazaar MercurialBazaar Mercurial
Bazaar Mercurial
 
Membership CD
Membership CDMembership CD
Membership CD
 
Wstęp do Subversion
Wstęp do SubversionWstęp do Subversion
Wstęp do Subversion
 
Concurrency in Python
Concurrency in PythonConcurrency in Python
Concurrency in Python
 
School Law Jeopardy
School Law JeopardySchool Law Jeopardy
School Law Jeopardy
 
Scala
ScalaScala
Scala
 
1r trimestre ies
1r trimestre ies1r trimestre ies
1r trimestre ies
 
School Law Power Point
School Law Power PointSchool Law Power Point
School Law Power Point
 
Adolescent Body Image
Adolescent Body ImageAdolescent Body Image
Adolescent Body Image
 
Quadern tut individual 1011 3ri 4t
Quadern tut individual 1011 3ri 4tQuadern tut individual 1011 3ri 4t
Quadern tut individual 1011 3ri 4t
 
Haskell
HaskellHaskell
Haskell
 
Wprowadzenie do Pythona
Wprowadzenie do PythonaWprowadzenie do Pythona
Wprowadzenie do Pythona
 
Wstęp do Ruby\'ego
Wstęp do Ruby\'egoWstęp do Ruby\'ego
Wstęp do Ruby\'ego
 
Fishcsu
FishcsuFishcsu
Fishcsu
 
Wolframi
WolframiWolframi
Wolframi
 
Za co nie lubi Cię Twój hoster
Za co nie lubi Cię Twój hosterZa co nie lubi Cię Twój hoster
Za co nie lubi Cię Twój hoster
 

Similar to Objective C

Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016
Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016
Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016PROIDEA
 
Podstawy JavaScript | DreamLab Academy #7
Podstawy JavaScript | DreamLab Academy #7Podstawy JavaScript | DreamLab Academy #7
Podstawy JavaScript | DreamLab Academy #7DreamLab
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4DreamLab
 
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.jsPatryk Jar
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Krzysztof Kotowicz
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciThe Software House
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł GrajewskiPROIDEA
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPPiotr Gabryjeluk
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationMariusz Koprowski
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktycePHPstokPHPstok
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Semihalf
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.Semihalf
 

Similar to Objective C (20)

Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016
Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016
Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016
 
Podstawy JavaScript | DreamLab Academy #7
Podstawy JavaScript | DreamLab Academy #7Podstawy JavaScript | DreamLab Academy #7
Podstawy JavaScript | DreamLab Academy #7
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
 
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHP
 
Kickoff to Node.js
Kickoff to Node.jsKickoff to Node.js
Kickoff to Node.js
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentation
 
05 - Testowalność
05 - Testowalność05 - Testowalność
05 - Testowalność
 
Wzorce projektowe w praktyce
Wzorce projektowe w praktyceWzorce projektowe w praktyce
Wzorce projektowe w praktyce
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
 

Objective C

  • 1. Objective-C vs. C++ / Java Studenckie Koło Naukowe “MacKN” Błażej Biesiada
  • 2. Agenda • Co to jest Obj-C? • Historia • Dlaczego Obj-c? • Składnia • Elementy charakterystyczne • Co dalej?
  • 3. Co to jest Obj-C? • skrót od Objective-C ;-) • rozszerzenie języka C • obiektowość oparta na Smalltalku-u • wykorzystywany głównie w Mac OS X
  • 4. Historia StepStone NeXT GNU Obj-C 1986 1988 1993 Apple Mac OS X Obj-C 2.0 1996 2001 2007
  • 5. Dlaczego Obj-C? • Cocoa • iPhone OS • Objective-C 2.0 • A dlaczego C++? Think different!
  • 6. [obj msg] vs. obj.met() [obiekt wiadomosc]; [obiekt wiadomosc: arg1: arg2: arg3]; [obiekt ustawSzerokosc: arg1 Wysokosc: arg2 Glebokosc: arg3];
  • 7. *.m vs. *.cpp //ClassName.h //ClassName.m @interface ClassName : ItsSuperclass @implementation ClassName { + (id)alloc { float height; //... BOOL filled; } NSColor *fillColor; - (void)display { } //... + (id)alloc; } - (void)display; @end @end
  • 8. val / setVal vs. getVal / setVal • sekcje @private, @protected, @public • domyślnie @protected • Key Value Coding, czyli nie tylko konwencja
  • 9. id vs. void • id - typ wskaźnikowy • void - brak wyniku funkcji • NIL - obiekt używany zamiast NULL
  • 10. @try vs. try Cup *cup = [[Cup alloc] init]; @try { [cup fill]; } @catch (NSException *exception) { NSLog(@quot;main: Caught %@: %@quot;, [exception name], [exception reason]); } @finally { [cup release]; }
  • 11. protokoły vs. interfejsy @protocol MyProtocol @interface MyClass ( MyProtocol ) - (void)requiredMethod; { @optional int myVal; - (void)anOptionalMethod; } - (void)anotherOptionalMethod; - (void)myOwnClassMethod; @required @end - (void)anotherRequiredMethod; @end
  • 12. @synchronized() vs. synchronized - (void)criticalMethod { @synchronized(self) { // Critical code. ... } }
  • 13. Inne różnice • #import vs. #include • self vs. this • [super msg] vs. super.met()
  • 14. Properties, czyli coś nowego @interface MyClass : NSObject { NSString *value; } @property(copy, readwrite) NSString *value; @end @implementation MyClass @synthesize value; @end
  • 15. Kategorie klas #import quot;ClassName.hquot; @interface ClassName ( CategoryName ) // deklaracje metod @end #import quot;ClassName+CategoryName.hquot; @implementation ClassName ( CategoryName ) // definicje metod @end
  • 16. Coś więcej? • Rozszerzenia klas • Fast enumeration • współpraca z C++
  • 17. Co dalej? “The Objective-C 2.0 Programming Language” http://developer.apple.com/