SlideShare a Scribd company logo
1 of 112
Download to read offline
Objective-C for Java
Developers, Lesson 1
Raffi Khatchadourian
For Quinnipiac University
Monday, March 3, 2014
Inspired by:
Learn Objective-C for Java Developers by James Bacanek,
Apress 2009
Expected
Background
Familiarity with:
Object-Oriented Programming
concepts.
How they are manifested in Java.
Why is this topic
important?
Why is this topic
important?
Objective-C is the language typically
used to write native software for
Mac.
Why is this topic
important?
Objective-C is the language typically
used to write native software for
Mac.
No cross-
platform
interpretation
Why is this topic
important?
Objective-C is the language typically
used to write native software for
Mac.
No cross-
platform
interpretation
Mac UI look-
and-feel
Why is this topic
important?
Objective-C is the language typically
used to write native software for
Mac.
No cross-
platform
interpretation
Mac UI look-
and-feel
Non-native
languages?
Why is this topic
important?
Objective-C is the language
used to write
Mac.
Objective-C is the language used to
write native software for iOS.
Why is this topic
important?
Objective-C is the language
used to write
Mac.
Objective-C is the language used to
write native software for iOS.
Not
browser based
Overview
Objective-C basics.
How Objective-C is:
Similar to Java.
Different from Java.
Not directly about iOS development.
But! Topics can be applied to iOS
development.
Objective-C
Objective-C
High-level, Object-Oriented language.
Objective-C
High-level, Object-Oriented language.
Roots in SmallTalk.
Objective-C
High-level, Object-Oriented language.
Roots in SmallTalk.
Strict superset of C with a lot of “twitter” (@
symbols).
Objective-C
High-level, Object-Oriented language.
Roots in SmallTalk.
Strict superset of C with a lot of “twitter” (@
symbols).
Strongly-typed with dynamic features!
Objective-C
High-level, Object-Oriented language.
Roots in SmallTalk.
Strict superset of C with a lot of “twitter” (@
symbols).
Strongly-typed
Requires a compiler (llvm).
Objective-C
High-level, Object-Oriented language.
Roots in SmallTalk.
Strict superset of C with a lot of “twitter” (@
symbols).
Strongly-typed
Requires a compiler (llvm).
Language is multi-platform but not all libraries are
(Cocoa/Cocoa Touch).
Main Differences
with Java
Main Differences
with Java
Fast.
Main Differences
with Java
Fast.
Dynamic.
Main Differences
with Java
Fast.
Dynamic.
Syntax.
Main Differences
with Java
Fast.
Dynamic.
Syntax.
Memory management and object
ownership.
Brief History
Began as a way to add Object-Oriented
Programming to C [Bacanek09].
Driven by Brad Cox and Tim Love in 1986.
Adopted by NeXT and used in the NEXTSTEP OS.
Faced fierce competition with C++.
Apple purchased NeXT in 1996, released Mac OS
X.
Student Class Declaration
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@property (readonly, nonatomic) NSString *fullName;
@property int age;
@property (getter = isEnrolled) BOOL enrolled;
@end
Header Files
// Student.h
Header Files
// Student.h
Objective-C classes are split into two different files.
Header Files
// Student.h
Objective-C classes are split into two different files.
A header file (.h).
Header Files
// Student.h
Objective-C classes are split into two different files.
A header file (.h).
Contains the class declaration.
Header Files
// Student.h
Objective-C classes are split into two different files.
A header file (.h).
Contains the class declaration.
An implementation file (.m).
Header Files
// Student.h
Objective-C classes are split into two different files.
A header file (.h).
Contains the class declaration.
An implementation file (.m).
Contains the class definition.
Header Files
// Student.h
Objective-C classes are split into two different files.
A header file (.h).
Contains the class declaration.
An implementation file (.m).
Contains the class definition.
Clients (other programmers) receive the .h file and the
object file but not the .m file.
Header Files
// Student.h
Objective-C classes are split into two different files.
A header file (.h).
Contains the class declaration.
An implementation file (.m).
Contains the class definition.
Clients (other programmers) receive the .h file and the
object file but not the .m file.
Information
hiding,
abstraction
#import statements
// Student.h
#import <Foundation/Foundation.h>
#import statements
// Student.h
#import <Foundation/Foundation.h>
#import is similar to Java import
statements.
#import statements
// Student.h
#import <Foundation/Foundation.h>
#import is similar to Java import
statements.
Must by accessible to the compiler.
#import statements
// Student.h
#import <Foundation/Foundation.h>
#import is similar to Java import
statements.
Must by accessible to the compiler.
Processed by the pre-compiler.
#import statements
// Student.h
#import <Foundation/Foundation.h>
#import is similar to Java import
statements.
Must by accessible to the compiler.
Processed by the pre-compiler.
Must specify framework/library header file.
Class Declarations
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
Class Declarations
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
@interface specifies the:
Class Declarations
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
@interface specifies the:
Class name.
Class name
Class Declarations
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
@interface specifies the:
Class name.
Information about the class (e.g., subclass, implemented
protocols).
Similar to
java.lang.Object
Class Declarations
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
@interface specifies the:
Class name.
Information about the class (e.g., subclass, implemented
protocols).
No
multiple
inheritance
Class Declarations
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
@interface specifies the:
Class name.
Information about the class (e.g., subclass, implemented
protocols).
The interface of the class (instance variables, methods,
and properties)
Class Declarations
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
@interface specifies the:
Class name.
Information about the class (e.g., subclass, implemented
protocols).
The interface of the class (instance variables, methods,
and properties)
Delimited by @end.
Class Declarations
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
Class Declarations
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
No packages (namespaces) in
Objective-C.
No
packages
Class Declarations
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
No packages (namespaces) in
Objective-C.
Use prefixes in class names (e.g.,
FBStudent)
No
packages
Class Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@end
Class Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@end
A way for clients to indirectly access instance variables.
Class Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@end
A way for clients to indirectly access instance variables.
Can be read/write and read-only.
Class Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@end
A way for clients to indirectly access instance variables.
Can be read/write and read-only.
Compiler synthesizes accessor and mutator methods based on
property attributes.
Class Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@end
A way for clients to indirectly access instance variables.
Can be read/write and read-only.
Compiler synthesizes accessor and mutator methods based on
property attributes.
“Provide
clients with a copy of
firstName”
Class Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@end
A way for clients to indirectly access instance variables.
Can be read/write and read-only.
Compiler synthesizes accessor and mutator methods based on
property attributes.
“Provide
clients with a copy of
firstName”
Could
also use strong or
weak
Class Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@end
A way for clients to indirectly access instance variables.
Can be read/write and read-only.
Compiler synthesizes accessor and mutator methods based on
property attributes.
You can create your own in the implementation file.
“Provide
clients with a copy of
firstName”
Could
also use strong or
weak
Class Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@end
A way for clients to indirectly access instance variables.
Can be read/write and read-only.
Compiler synthesizes accessor and mutator methods based on
property attributes.
You can create your own in the implementation file.
NSString * is a reference to a string object (String firstName).
“Provide
clients with a copy of
firstName”
Could
also use strong or
weak
Objective-C Memory
Management
Objective-C Memory
Management
No garbage collector.
Objective-C Memory
Management
No garbage collector. Why?
Objective-C Memory
Management
No garbage collector.
Automated Reference Counting.
Objective-C Memory
Management
No garbage collector.
Automated Reference Counting.
Each object is associated with a
count of (other) objects that refer to
them.
Objective-C Memory
Management
Objective-C Memory
Management
Two types of references:
Weak:
“I need to refer to this object but I don’t
own it.”
Strong:
“I am an owner of this object.”
Objective-C Memory
Management
Two types of references:
Weak:
“I need to refer to this object but I don’t
own it.”
Strong:
“I am an owner of this object.”
Objects are deallocated when no strong references
to them remain.
Objective-C Memory
Management
Objective-C Memory
Management
An object with only weak references
may be deallocated.
Objective-C Memory
Management
An object
may be deallocated.
The reference is set to nil (null).
Objective-C Memory
Management
An object
may be deallocated.
The reference is set to nil (null).
What
happens when a
method is called on
a null reference
in Java?
ARC = Garbage
Collection?
ARC = Garbage
Collection?
ARC = Garbage
Collection?
Not exactly.
ARC = Garbage
Collection?
Not exactly.
Need to:
ARC = Garbage
Collection?
Not exactly.
Need to:
Specify ownership.
ARC = Garbage
Collection?
Not exactly.
Need to:
Specify ownership.
Beware of “retain cycles.”
“Retain Cycles”
“Retain Cycles”
o1
“Retain Cycles”
o1 o2
strong
“Retain Cycles”
o1 o2
strong
strong
“Retain Cycles”
o1 o2
strong
strong
Objects are deallocated when no strong
references to them remain.
“Retain Cycles”
o1 o2
strong
strong
Leak!
Objects are deallocated when no strong
references to them remain.
“Retain Cycles”
o1
o2
strong
strong
o3
“Retain Cycles”
o1
o2
strong
strong
o3
strong
Derived Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@property (readonly, nonatomic) NSString *fullName;
@end
Derived Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@property (readonly, nonatomic) NSString *fullName;
@end
Derived Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@property (readonly, nonatomic) NSString *fullName;
@end
readonly so that we will derive this
property from other properties.
Derived Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@property (readonly, nonatomic) NSString *fullName;
@end
readonly
property from other properties.
atomic is similar to synchronized in
Java.
Derived Properties
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@property (readonly, nonatomic) NSString *fullName;
@end
atomic by
default
readonly
property from other properties.
atomic is similar to synchronized in
Java.
Integer Property
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@property (readonly, nonatomic) NSString *fullName;
@property int age;
@end
Boolean Property
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@property (readonly, nonatomic) NSString *fullName;
@property int age;
@property (getter = isEnrolled) BOOL enrolled;
@end
Boolean Property
// Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@property (readonly, nonatomic) NSString *fullName;
@property int age;
@property (getter = isEnrolled) BOOL enrolled;
@end
Changes
the name of the
accessor
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Student Class Definition
// Student.m
Implementation files have an
extension of .m
Student Class Definition
// Student.m
#import "Student.h"
#import the header file.
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
@end
Class definition body
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
}
@end
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
}
@end
Method definition for derived property.
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
}
@end
Method definition for derived property.
Read-only, no mutator method.
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
}
@end
Method definition for derived property.
Read-only, no mutator method.
Instance method
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
}
@end
Method definition for derived property.
Read-only, no mutator method.
Instance method
Method name
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
}
@end
Method definition for derived property.
Read-only, no mutator method.
Instance method
Return
type
Method name
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Method invocation between []
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Method invocation between []
Format string is similar to C and Java OutputStream.format()
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Method invocation between []
Format string is similar to C and Java OutputStream.format()
@ means object reference
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Method invocation between []
Format string is similar to C and Java OutputStream.format()
@ means object reference
Class
method
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Method invocation between []
Format string is similar to C and Java OutputStream.format()
@ means object reference
Argument list
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Method invocation between []
Format string is similar to C and Java OutputStream.format()
@ means object reference
Method
name
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Method invocation between []
Format string is similar to C and Java OutputStream.format()
@ means object reference
Like Java
this
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Method invocation between []
Format string is similar to C and Java OutputStream.format()
@ means object reference
Property
Student Class Definition
// Student.m
#import "Student.h"
@implementation Student
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",
[self firstName],
[self lastName]];
}
@end
Method invocation between []
Format string is similar to C and Java OutputStream.format()
@ means object reference
Client Demo
Conclusion
Both Objective-C and Java are high-level, compiled,
Object-Oriented languages.
Objective-C is not cross-platform but can be faster
than Java.
Java is very structured, while Objective-C can be
either structured or dynamic.
Objective-C is a strict superset of C.
Objective-C uses automatic reference counting
(ARC) instead of garbage collection.
Questions?

More Related Content

What's hot

Intro To C++ - Class 05 - Introduction To Classes, Objects, & Strings
Intro To C++ - Class 05 - Introduction To  Classes, Objects, & StringsIntro To C++ - Class 05 - Introduction To  Classes, Objects, & Strings
Intro To C++ - Class 05 - Introduction To Classes, Objects, & StringsBlue Elephant Consulting
 
Intro To C++ - Class 03 - An Introduction To C++ Programming, Part II
Intro To C++ - Class 03 - An Introduction To C++ Programming, Part IIIntro To C++ - Class 03 - An Introduction To C++ Programming, Part II
Intro To C++ - Class 03 - An Introduction To C++ Programming, Part IIBlue Elephant Consulting
 
Programming Paradigm & Languages
Programming Paradigm & LanguagesProgramming Paradigm & Languages
Programming Paradigm & LanguagesGaditek
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNico Ludwig
 
Intro To C++ - Class 06 - Introduction To Classes, Objects, & Strings, Part II
Intro To C++ - Class 06 - Introduction To Classes, Objects, & Strings, Part IIIntro To C++ - Class 06 - Introduction To Classes, Objects, & Strings, Part II
Intro To C++ - Class 06 - Introduction To Classes, Objects, & Strings, Part IIBlue Elephant Consulting
 
Python's dynamic nature (rough slides, November 2004)
Python's dynamic nature (rough slides, November 2004)Python's dynamic nature (rough slides, November 2004)
Python's dynamic nature (rough slides, November 2004)Kiran Jonnalagadda
 
Margareth lota
Margareth lotaMargareth lota
Margareth lotamaggybells
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionEelco Visser
 
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)Batch Scripting with Drupal (Featuring the EntityFieldQuery API)
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)Ranel Padon
 
EJB 3.0 Java Persistence with Oracle TopLink
EJB 3.0 Java Persistence with Oracle TopLinkEJB 3.0 Java Persistence with Oracle TopLink
EJB 3.0 Java Persistence with Oracle TopLinkBill Lyons
 
C#.net interview questions for dynamics 365 ce crm developers
C#.net interview questions for dynamics 365 ce crm developersC#.net interview questions for dynamics 365 ce crm developers
C#.net interview questions for dynamics 365 ce crm developersSanjaya Prakash Pradhan
 
Welcome to the .Net
Welcome to the .NetWelcome to the .Net
Welcome to the .NetAmr Shawky
 
Overview Of .Net 4.0 Sanjay Vyas
Overview Of .Net 4.0   Sanjay VyasOverview Of .Net 4.0   Sanjay Vyas
Overview Of .Net 4.0 Sanjay Vyasrsnarayanan
 
Lec 4 06_aug [compatibility mode]
Lec 4 06_aug [compatibility mode]Lec 4 06_aug [compatibility mode]
Lec 4 06_aug [compatibility mode]Palak Sanghani
 

What's hot (20)

Intro To C++ - Class 05 - Introduction To Classes, Objects, & Strings
Intro To C++ - Class 05 - Introduction To  Classes, Objects, & StringsIntro To C++ - Class 05 - Introduction To  Classes, Objects, & Strings
Intro To C++ - Class 05 - Introduction To Classes, Objects, & Strings
 
C#/.NET Little Wonders
C#/.NET Little WondersC#/.NET Little Wonders
C#/.NET Little Wonders
 
Intro To C++ - Class 03 - An Introduction To C++ Programming, Part II
Intro To C++ - Class 03 - An Introduction To C++ Programming, Part IIIntro To C++ - Class 03 - An Introduction To C++ Programming, Part II
Intro To C++ - Class 03 - An Introduction To C++ Programming, Part II
 
C sharp
C sharpC sharp
C sharp
 
Programming Paradigm & Languages
Programming Paradigm & LanguagesProgramming Paradigm & Languages
Programming Paradigm & Languages
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_iv
 
C programming
C programming C programming
C programming
 
Intro To C++ - Class 06 - Introduction To Classes, Objects, & Strings, Part II
Intro To C++ - Class 06 - Introduction To Classes, Objects, & Strings, Part IIIntro To C++ - Class 06 - Introduction To Classes, Objects, & Strings, Part II
Intro To C++ - Class 06 - Introduction To Classes, Objects, & Strings, Part II
 
Python's dynamic nature (rough slides, November 2004)
Python's dynamic nature (rough slides, November 2004)Python's dynamic nature (rough slides, November 2004)
Python's dynamic nature (rough slides, November 2004)
 
Margareth lota
Margareth lotaMargareth lota
Margareth lota
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler Construction
 
Java Tokens
Java  TokensJava  Tokens
Java Tokens
 
Web Development with Smalltalk
Web Development with SmalltalkWeb Development with Smalltalk
Web Development with Smalltalk
 
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)Batch Scripting with Drupal (Featuring the EntityFieldQuery API)
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)
 
EJB 3.0 Java Persistence with Oracle TopLink
EJB 3.0 Java Persistence with Oracle TopLinkEJB 3.0 Java Persistence with Oracle TopLink
EJB 3.0 Java Persistence with Oracle TopLink
 
C#.net interview questions for dynamics 365 ce crm developers
C#.net interview questions for dynamics 365 ce crm developersC#.net interview questions for dynamics 365 ce crm developers
C#.net interview questions for dynamics 365 ce crm developers
 
C sharp
C sharpC sharp
C sharp
 
Welcome to the .Net
Welcome to the .NetWelcome to the .Net
Welcome to the .Net
 
Overview Of .Net 4.0 Sanjay Vyas
Overview Of .Net 4.0   Sanjay VyasOverview Of .Net 4.0   Sanjay Vyas
Overview Of .Net 4.0 Sanjay Vyas
 
Lec 4 06_aug [compatibility mode]
Lec 4 06_aug [compatibility mode]Lec 4 06_aug [compatibility mode]
Lec 4 06_aug [compatibility mode]
 

Similar to Objective-C for Java Developers, Lesson 1

Writing documentation with Asciidoctor
Writing documentation  with  AsciidoctorWriting documentation  with  Asciidoctor
Writing documentation with AsciidoctorJérémie Bresson
 
Comment Asciidoctor peut vous aider pour votre doc
Comment Asciidoctor peut vous aider pour votre docComment Asciidoctor peut vous aider pour votre doc
Comment Asciidoctor peut vous aider pour votre docJérémie Bresson
 
PRG 421 Education Specialist / snaptutorial.com
PRG 421 Education Specialist / snaptutorial.comPRG 421 Education Specialist / snaptutorial.com
PRG 421 Education Specialist / snaptutorial.comMcdonaldRyan108
 
PRG 421 Massive success / tutorialrank.com
PRG 421 Massive success / tutorialrank.comPRG 421 Massive success / tutorialrank.com
PRG 421 Massive success / tutorialrank.comBromleyz1
 
iOS development introduction
iOS development introduction iOS development introduction
iOS development introduction paramisoft
 
Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0Robert Lemke
 
Chapter 2.1
Chapter 2.1Chapter 2.1
Chapter 2.1sotlsoc
 
OOPM Introduction.ppt
OOPM Introduction.pptOOPM Introduction.ppt
OOPM Introduction.pptvijay251387
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial EnAnkur Dongre
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial EnAnkur Dongre
 
Cocoa for Web Developers
Cocoa for Web DevelopersCocoa for Web Developers
Cocoa for Web Developersgeorgebrock
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java DevelopersMuhammad Abdullah
 
Assignment 2Assignment Content1. Top of FormResource·.docx
Assignment 2Assignment Content1. Top of FormResource·.docxAssignment 2Assignment Content1. Top of FormResource·.docx
Assignment 2Assignment Content1. Top of FormResource·.docxbraycarissa250
 
Intro To C++ - Class 07 - Headers, Interfaces, & Prototypes
Intro To C++ - Class 07 - Headers, Interfaces, & PrototypesIntro To C++ - Class 07 - Headers, Interfaces, & Prototypes
Intro To C++ - Class 07 - Headers, Interfaces, & PrototypesBlue Elephant Consulting
 
Android coding guide lines
Android coding guide linesAndroid coding guide lines
Android coding guide lineslokeshG38
 
Owner - Java properties reinvented.
Owner - Java properties reinvented.Owner - Java properties reinvented.
Owner - Java properties reinvented.Luigi Viggiano
 
C# Summer course - Lecture 1
C# Summer course - Lecture 1C# Summer course - Lecture 1
C# Summer course - Lecture 1mohamedsamyali
 

Similar to Objective-C for Java Developers, Lesson 1 (20)

Writing documentation with Asciidoctor
Writing documentation  with  AsciidoctorWriting documentation  with  Asciidoctor
Writing documentation with Asciidoctor
 
Comment Asciidoctor peut vous aider pour votre doc
Comment Asciidoctor peut vous aider pour votre docComment Asciidoctor peut vous aider pour votre doc
Comment Asciidoctor peut vous aider pour votre doc
 
PRG 421 Education Specialist / snaptutorial.com
PRG 421 Education Specialist / snaptutorial.comPRG 421 Education Specialist / snaptutorial.com
PRG 421 Education Specialist / snaptutorial.com
 
PRG 421 Massive success / tutorialrank.com
PRG 421 Massive success / tutorialrank.comPRG 421 Massive success / tutorialrank.com
PRG 421 Massive success / tutorialrank.com
 
iOS development introduction
iOS development introduction iOS development introduction
iOS development introduction
 
Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0Fluent Development with FLOW3 1.0
Fluent Development with FLOW3 1.0
 
Chapter 2.1
Chapter 2.1Chapter 2.1
Chapter 2.1
 
Prg421
Prg421Prg421
Prg421
 
OOPM Introduction.ppt
OOPM Introduction.pptOOPM Introduction.ppt
OOPM Introduction.ppt
 
iOS Application Development
iOS Application DevelopmentiOS Application Development
iOS Application Development
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
 
Cocoa for Web Developers
Cocoa for Web DevelopersCocoa for Web Developers
Cocoa for Web Developers
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java Developers
 
Assignment 2Assignment Content1. Top of FormResource·.docx
Assignment 2Assignment Content1. Top of FormResource·.docxAssignment 2Assignment Content1. Top of FormResource·.docx
Assignment 2Assignment Content1. Top of FormResource·.docx
 
Intro To C++ - Class 07 - Headers, Interfaces, & Prototypes
Intro To C++ - Class 07 - Headers, Interfaces, & PrototypesIntro To C++ - Class 07 - Headers, Interfaces, & Prototypes
Intro To C++ - Class 07 - Headers, Interfaces, & Prototypes
 
Apache ant
Apache antApache ant
Apache ant
 
Android coding guide lines
Android coding guide linesAndroid coding guide lines
Android coding guide lines
 
Owner - Java properties reinvented.
Owner - Java properties reinvented.Owner - Java properties reinvented.
Owner - Java properties reinvented.
 
C# Summer course - Lecture 1
C# Summer course - Lecture 1C# Summer course - Lecture 1
C# Summer course - Lecture 1
 

More from Raffi Khatchadourian

Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...Raffi Khatchadourian
 
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...Raffi Khatchadourian
 
A Tool for Rejuvenating Feature Logging Levels via Git Histories and Degree o...
A Tool for Rejuvenating Feature Logging Levels via Git Histories and Degree o...A Tool for Rejuvenating Feature Logging Levels via Git Histories and Degree o...
A Tool for Rejuvenating Feature Logging Levels via Git Histories and Degree o...Raffi Khatchadourian
 
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...Raffi Khatchadourian
 
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...Raffi Khatchadourian
 
An Empirical Study of Refactorings and Technical Debt in Machine Learning Sys...
An Empirical Study of Refactorings and Technical Debt in Machine Learning Sys...An Empirical Study of Refactorings and Technical Debt in Machine Learning Sys...
An Empirical Study of Refactorings and Technical Debt in Machine Learning Sys...Raffi Khatchadourian
 
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...Raffi Khatchadourian
 
An Empirical Study on the Use and Misuse of Java 8 Streams
An Empirical Study on the Use and Misuse of Java 8 StreamsAn Empirical Study on the Use and Misuse of Java 8 Streams
An Empirical Study on the Use and Misuse of Java 8 StreamsRaffi Khatchadourian
 
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams
Safe Automated Refactoring for Intelligent Parallelization of Java 8 StreamsSafe Automated Refactoring for Intelligent Parallelization of Java 8 Streams
Safe Automated Refactoring for Intelligent Parallelization of Java 8 StreamsRaffi Khatchadourian
 
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams
Safe Automated Refactoring for Intelligent Parallelization of Java 8 StreamsSafe Automated Refactoring for Intelligent Parallelization of Java 8 Streams
Safe Automated Refactoring for Intelligent Parallelization of Java 8 StreamsRaffi Khatchadourian
 
A Brief Introduction to Type Constraints
A Brief Introduction to Type ConstraintsA Brief Introduction to Type Constraints
A Brief Introduction to Type ConstraintsRaffi Khatchadourian
 
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams ...
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams ...Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams ...
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams ...Raffi Khatchadourian
 
A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
A Tool for Optimizing Java 8 Stream Software via Automated RefactoringA Tool for Optimizing Java 8 Stream Software via Automated Refactoring
A Tool for Optimizing Java 8 Stream Software via Automated RefactoringRaffi Khatchadourian
 
Porting the NetBeans Java 8 Enhanced For Loop Lambda Expression Refactoring t...
Porting the NetBeans Java 8 Enhanced For Loop Lambda Expression Refactoring t...Porting the NetBeans Java 8 Enhanced For Loop Lambda Expression Refactoring t...
Porting the NetBeans Java 8 Enhanced For Loop Lambda Expression Refactoring t...Raffi Khatchadourian
 
Towards Safe Refactoring for Intelligent Parallelization of Java 8 Streams
Towards Safe Refactoring for Intelligent Parallelization of Java 8 StreamsTowards Safe Refactoring for Intelligent Parallelization of Java 8 Streams
Towards Safe Refactoring for Intelligent Parallelization of Java 8 StreamsRaffi Khatchadourian
 
Proactive Empirical Assessment of New Language Feature Adoption via Automated...
Proactive Empirical Assessment of New Language Feature Adoption via Automated...Proactive Empirical Assessment of New Language Feature Adoption via Automated...
Proactive Empirical Assessment of New Language Feature Adoption via Automated...Raffi Khatchadourian
 
Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...Raffi Khatchadourian
 
Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...Raffi Khatchadourian
 
Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...
Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...
Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...Raffi Khatchadourian
 
Poster on Automated Refactoring of Legacy Java Software to Default Methods
Poster on Automated Refactoring of Legacy Java Software to Default MethodsPoster on Automated Refactoring of Legacy Java Software to Default Methods
Poster on Automated Refactoring of Legacy Java Software to Default MethodsRaffi Khatchadourian
 

More from Raffi Khatchadourian (20)

Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
 
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
 
A Tool for Rejuvenating Feature Logging Levels via Git Histories and Degree o...
A Tool for Rejuvenating Feature Logging Levels via Git Histories and Degree o...A Tool for Rejuvenating Feature Logging Levels via Git Histories and Degree o...
A Tool for Rejuvenating Feature Logging Levels via Git Histories and Degree o...
 
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
 
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...
Actor Concurrency Bugs: A Comprehensive Study on Symptoms, Root Causes, API U...
 
An Empirical Study of Refactorings and Technical Debt in Machine Learning Sys...
An Empirical Study of Refactorings and Technical Debt in Machine Learning Sys...An Empirical Study of Refactorings and Technical Debt in Machine Learning Sys...
An Empirical Study of Refactorings and Technical Debt in Machine Learning Sys...
 
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
Automated Evolution of Feature Logging Statement Levels Using Git Histories a...
 
An Empirical Study on the Use and Misuse of Java 8 Streams
An Empirical Study on the Use and Misuse of Java 8 StreamsAn Empirical Study on the Use and Misuse of Java 8 Streams
An Empirical Study on the Use and Misuse of Java 8 Streams
 
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams
Safe Automated Refactoring for Intelligent Parallelization of Java 8 StreamsSafe Automated Refactoring for Intelligent Parallelization of Java 8 Streams
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams
 
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams
Safe Automated Refactoring for Intelligent Parallelization of Java 8 StreamsSafe Automated Refactoring for Intelligent Parallelization of Java 8 Streams
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams
 
A Brief Introduction to Type Constraints
A Brief Introduction to Type ConstraintsA Brief Introduction to Type Constraints
A Brief Introduction to Type Constraints
 
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams ...
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams ...Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams ...
Safe Automated Refactoring for Intelligent Parallelization of Java 8 Streams ...
 
A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
A Tool for Optimizing Java 8 Stream Software via Automated RefactoringA Tool for Optimizing Java 8 Stream Software via Automated Refactoring
A Tool for Optimizing Java 8 Stream Software via Automated Refactoring
 
Porting the NetBeans Java 8 Enhanced For Loop Lambda Expression Refactoring t...
Porting the NetBeans Java 8 Enhanced For Loop Lambda Expression Refactoring t...Porting the NetBeans Java 8 Enhanced For Loop Lambda Expression Refactoring t...
Porting the NetBeans Java 8 Enhanced For Loop Lambda Expression Refactoring t...
 
Towards Safe Refactoring for Intelligent Parallelization of Java 8 Streams
Towards Safe Refactoring for Intelligent Parallelization of Java 8 StreamsTowards Safe Refactoring for Intelligent Parallelization of Java 8 Streams
Towards Safe Refactoring for Intelligent Parallelization of Java 8 Streams
 
Proactive Empirical Assessment of New Language Feature Adoption via Automated...
Proactive Empirical Assessment of New Language Feature Adoption via Automated...Proactive Empirical Assessment of New Language Feature Adoption via Automated...
Proactive Empirical Assessment of New Language Feature Adoption via Automated...
 
Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...
 
Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...Defaultification Refactoring: A Tool for Automatically Converting Java Method...
Defaultification Refactoring: A Tool for Automatically Converting Java Method...
 
Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...
Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...
Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...
 
Poster on Automated Refactoring of Legacy Java Software to Default Methods
Poster on Automated Refactoring of Legacy Java Software to Default MethodsPoster on Automated Refactoring of Legacy Java Software to Default Methods
Poster on Automated Refactoring of Legacy Java Software to Default Methods
 

Recently uploaded

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 

Recently uploaded (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Objective-C for Java Developers, Lesson 1

Editor's Notes

  1. Thanks for coming to my talk. My name is Raffi Khatchadourian and today I’ll be giving a brief, very first lesson in introducing the Objective-C language and its differences with Java. This talk is inspired by the book entitled Objective-C for Java Developers by James Bacanek, published by Apress in 2009. Please feel free to stop me to ask any questions along the way.
  2. This talk is focused on an audience familiar with Object-Oriented Programming concepts particularly in Java. But, you should be able to relate to the topics discussed if you’re familiar with any Object-Oriented language.
  3. Why did I chose this topic and why I think it is important? Well, Objective-C happens to be the language typically used to write native software for Mac, which is a platform gaining some popularity. According to Gartner, there was a 28.5% increase in home mac sales just last year. What do you think I mean by native here? Any ideas? Native means that machine instructions produced by the compiler are directly executed by the machine, as opposed to non-native software, where instructions are executed by a virtual machine or interpreter. Native software is specifically made for a particular platform, so there’s no cross-platform capabilities (i.e., compile once, run anywhere), and you get a native look-and-feel for your software. Can anyone think of any languages that are non-native, cross-platform? Of course, iOS has become extremely popular with mobile users. iOS is much more of a closed system. Non-native iOS software would be browser based (what language?).
  4. No UI stuff.
  5. Both Java and Objective-C are high-level, object-oriented languages. What do I mean by high level? Object-oriented? Objective-C is based on SmallTalk, an early Object-Oriented language that conceptualized entities (objects) sending and receiving messages to each other to collaboratively solve a task. Like Java, Objective-C can be strongly-typed in that developers can specify types of variables and have certain expectations of the type of variables at run time. Unlike Java, however, Objective-C doesn’t force the developer to always use types, and there’s lots of language support to dynamically alter the behavior at runtime. This can be done in Java as well but much more cumbersomely with the reflection API. With Objective-C, you can defer many decisions to when the program is executed, which allows for great flexibility. For example, you can add a method to the standard string class without subclassing. That means you can call your method anywhere a string is used. Has flavors of AOP. Both Java and Objective-C need a compiler. llvm is a popular Objective-C compiler. (Q: What language doesn’t need a compiler?) Cocoa is the name of the framework that contains many of the classes used to build mac and iOS applications. Cocoa is similar to the JDK.
  6. It is a direct extension of C, which is the fastest high-level language available. Does anyone know how C can be used in Java? Yes! It can be done using the Java Native Interface (JNI), but since Objective-C is in a sense C, no overhead is associated with accessing the native machine. Can be similar to a scripting language if you like. Many decisions left to run time. Can “attach” methods to existing class hierarchies. There are some massive differences in syntax and conventions in Objective-C, particularly in method invocation. We’ll discuss those later. There is no garbage collection in Objective-C. There is a facility called “ARC,” which stands for Automated Reference Counting. It is similar to garbage collection but with some key differences. Also, there’s a notion of objects owning other objects, a relationship that is specified by the developer. This tells the ARC system when to deallocate objects.
  7. You’ll see a lot of NS’s around. What else happened in 1996?
  8. In Java, a class is defined in a single file. In Objective-C (like C++), classes are split between two different files. This is somewhat similar to Java interfaces where you could have an interface file for each class. However, there is another notion in Objective-C similar to a Java interface called a protocol. In most cases, there’s a one-to-one relationship between header files and implementation files, and they normally have the same name except for the extension. This is to enable information hiding. There are cases where this isn’t necessarily true. Can you think of a situation where one header file may have multiple definitions? (ANS: platform specific code)
  9. #import is very similar to Java import statements. Here, we’re telling the compiler that we’ll be using classes declared in the header file Foundation.h in the Foundation framework. This is the main Cocoa framework umbrella header file (it has a bunch of #import statements in it itself). Unlike Java, the compiler will not use a class path to find the file. You need to tell the compiler where your classes are, either through the Xcode project file (a configuration file telling the compiler how to build your product, similar to ant) or the DYLD_LIBRARY_PATH environmental variable.
  10. @interface specifies the interface of the class, but it should not be confused with the Java interface. NSObject is similar to java.lang.object as it is the root of all Cocoa class hierarchies. Inheritance works very similar to Java.
  11. One thing to note is that Objective-C doesn’t have the notion of packages that Java has. Is anyone familiar with C++? What is the equivalent there? ANS: Namespace C has no namespaces or packages and neither does Objective-C. Prefix your type names. For example, we were working at facebook, maybe we’d call this class FBStudent. Common Cocoa prefix is NS. Anyone guess why? You can set Xcode to automatically do this for you.
  12. Synthesize is another word for automatic generation. The compiler will create accessor and mutator methods for you based on these property attributes. Why would we want to provide clients with a copy of the string firstName? ANS: Strings are immutable in Java but that’s not always the case in Objective-C. In fact, there are mutable subclasses of many immutable types in Objective-C. That’s a difference between Objective-C and Java. strong and weak are object ownership property attribute. They specify strong and weak references to other objects. This controls how Objective-C manages memory deallocation.
  13. Let’s break here from the Student class to discuss how Objective-C manages and cleans up memory allocated on the heap. The Objective-C runtime no longer includes a garbage collector (some history here). Instead, it has ARC (anyone know this? ANS: automated reference counting).
  14. Let’s break here from the Student class to discuss how Objective-C manages and cleans up memory allocated on the heap. The Objective-C runtime no longer includes a garbage collector (some history here). Instead, it has ARC (anyone know this? ANS: automated reference counting).
  15. There are some consequences here.
  16. Funny that both these photos are taken in St. Louis!
  17. What happens? Trivial?
  18. Q: Are there tools to detect this? Can we determine this at compile time?
  19. Let’s get back to properties. Now, we’ll add a “full name” derived property. Non-atomic for simplicity. Why would you want this atomic?
  20. Could we have written fullName as a normal method? You get a feel for when to write a property and when to write a method. What is the symbol for a class method?
  21. Why should we use properties within classes? ANS: Derived class.