SlideShare a Scribd company logo
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?
Ad

More Related Content

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
Blue Elephant Consulting
 
C#/.NET Little Wonders
C#/.NET Little WondersC#/.NET Little Wonders
C#/.NET Little Wonders
BlackRabbitCoder
 
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
Blue Elephant Consulting
 
C sharp
C sharpC sharp
C sharp
Satish Verma
 
Programming Paradigm & Languages
Programming Paradigm & LanguagesProgramming Paradigm & Languages
Programming Paradigm & Languages
Gaditek
 
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
Nico Ludwig
 
C programming
C programming C programming
C programming
Rohan Gajre
 
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
Blue 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 lota
maggybells
 
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
Eelco Visser
 
Java Tokens
Java  TokensJava  Tokens
Java Tokens
Madishetty Prathibha
 
Web Development with Smalltalk
Web Development with SmalltalkWeb Development with Smalltalk
Web Development with Smalltalk
Mariano Martínez Peck
 
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 TopLink
Bill 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 developers
Sanjaya Prakash Pradhan
 
C sharp
C sharpC sharp
C sharp
Ahmed Vic
 
Welcome to the .Net
Welcome to the .NetWelcome to the .Net
Welcome to the .Net
Amr 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 Vyas
rsnarayanan
 
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
 
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
Blue 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 II
Blue Elephant Consulting
 
Programming Paradigm & Languages
Programming Paradigm & LanguagesProgramming Paradigm & Languages
Programming Paradigm & Languages
Gaditek
 
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
Nico 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 II
Blue 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 lota
maggybells
 
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
Eelco 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 TopLink
Bill 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 developers
Sanjaya Prakash Pradhan
 
Welcome to the .Net
Welcome to the .NetWelcome to the .Net
Welcome to the .Net
Amr 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 Vyas
rsnarayanan
 
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
 

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
Jé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 doc
Jé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.com
McdonaldRyan108
 
PRG 421 Massive success / tutorialrank.com
PRG 421 Massive success / tutorialrank.comPRG 421 Massive success / tutorialrank.com
PRG 421 Massive success / tutorialrank.com
Bromleyz1
 
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.0
Robert Lemke
 
Chapter 2.1
Chapter 2.1Chapter 2.1
Chapter 2.1
sotlsoc
 
Prg421
Prg421Prg421
Prg421
john roy
 
OOPM Introduction.ppt
OOPM Introduction.pptOOPM Introduction.ppt
OOPM Introduction.ppt
vijay251387
 
iOS Application Development
iOS Application DevelopmentiOS Application Development
iOS Application Development
Compare Infobase Limited
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
Ankur Dongre
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
Ankur Dongre
 
Cocoa for Web Developers
Cocoa for Web DevelopersCocoa for Web Developers
Cocoa for Web Developers
georgebrock
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java Developers
Muhammad 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·.docx
braycarissa250
 
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
Blue Elephant Consulting
 
Apache ant
Apache antApache ant
Apache ant
K. M. Fazle Azim Babu
 
Android coding guide lines
Android coding guide linesAndroid coding guide lines
Android coding guide lines
lokeshG38
 
Owner - Java properties reinvented.
Owner - Java properties reinvented.Owner - Java properties reinvented.
Owner - Java properties reinvented.
Luigi Viggiano
 
OOPs Interview Questions PDF By ScholarHat
OOPs Interview Questions PDF By ScholarHatOOPs Interview Questions PDF By ScholarHat
OOPs Interview Questions PDF By ScholarHat
Scholarhat
 
Writing documentation with Asciidoctor
Writing documentation  with  AsciidoctorWriting documentation  with  Asciidoctor
Writing documentation with Asciidoctor
Jé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 doc
Jé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.com
McdonaldRyan108
 
PRG 421 Massive success / tutorialrank.com
PRG 421 Massive success / tutorialrank.comPRG 421 Massive success / tutorialrank.com
PRG 421 Massive success / tutorialrank.com
Bromleyz1
 
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.0
Robert Lemke
 
Chapter 2.1
Chapter 2.1Chapter 2.1
Chapter 2.1
sotlsoc
 
OOPM Introduction.ppt
OOPM Introduction.pptOOPM Introduction.ppt
OOPM Introduction.ppt
vijay251387
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
Ankur Dongre
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
Ankur Dongre
 
Cocoa for Web Developers
Cocoa for Web DevelopersCocoa for Web Developers
Cocoa for Web Developers
georgebrock
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java Developers
Muhammad 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·.docx
braycarissa250
 
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
Blue Elephant Consulting
 
Android coding guide lines
Android coding guide linesAndroid coding guide lines
Android coding guide lines
lokeshG38
 
Owner - Java properties reinvented.
Owner - Java properties reinvented.Owner - Java properties reinvented.
Owner - Java properties reinvented.
Luigi Viggiano
 
OOPs Interview Questions PDF By ScholarHat
OOPs Interview Questions PDF By ScholarHatOOPs Interview Questions PDF By ScholarHat
OOPs Interview Questions PDF By ScholarHat
Scholarhat
 
Ad

More from Raffi Khatchadourian (20)

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
 
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Raffi Khatchadourian
 
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
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 Streams
Raffi 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 Streams
Raffi 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 Streams
Raffi Khatchadourian
 
A Brief Introduction to Type Constraints
A Brief Introduction to Type ConstraintsA Brief Introduction to Type Constraints
A Brief Introduction to Type Constraints
Raffi 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 Refactoring
Raffi 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 Streams
Raffi 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
 
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
 
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Raffi Khatchadourian
 
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
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 Streams
Raffi 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 Streams
Raffi 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 Streams
Raffi Khatchadourian
 
A Brief Introduction to Type Constraints
A Brief Introduction to Type ConstraintsA Brief Introduction to Type Constraints
A Brief Introduction to Type Constraints
Raffi 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 Refactoring
Raffi 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 Streams
Raffi 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
 
Ad

Recently uploaded (20)

Config 2025 presentation recap covering both days
Config 2025 presentation recap covering both daysConfig 2025 presentation recap covering both days
Config 2025 presentation recap covering both days
TrishAntoni1
 
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
James Anderson
 
Zilliz Cloud Monthly Technical Review: May 2025
Zilliz Cloud Monthly Technical Review: May 2025Zilliz Cloud Monthly Technical Review: May 2025
Zilliz Cloud Monthly Technical Review: May 2025
Zilliz
 
Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Everything You Need to Know About Agentforce? (Put AI Agents to Work)Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Cyntexa
 
Building the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdfBuilding the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdf
Cheryl Hung
 
Cybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and MitigationCybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and Mitigation
VICTOR MAESTRE RAMIREZ
 
Viam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdfViam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdf
camilalamoratta
 
fennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solutionfennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solution
shallal2
 
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Mike Mingos
 
Developing System Infrastructure Design Plan.pptx
Developing System Infrastructure Design Plan.pptxDeveloping System Infrastructure Design Plan.pptx
Developing System Infrastructure Design Plan.pptx
wondimagegndesta
 
Slack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teamsSlack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teams
Nacho Cougil
 
Top-AI-Based-Tools-for-Game-Developers (1).pptx
Top-AI-Based-Tools-for-Game-Developers (1).pptxTop-AI-Based-Tools-for-Game-Developers (1).pptx
Top-AI-Based-Tools-for-Game-Developers (1).pptx
BR Softech
 
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
Lorenzo Miniero
 
Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?
Eric Torreborre
 
IT484 Cyber Forensics_Information Technology
IT484 Cyber Forensics_Information TechnologyIT484 Cyber Forensics_Information Technology
IT484 Cyber Forensics_Information Technology
SHEHABALYAMANI
 
Build With AI - In Person Session Slides.pdf
Build With AI - In Person Session Slides.pdfBuild With AI - In Person Session Slides.pdf
Build With AI - In Person Session Slides.pdf
Google Developer Group - Harare
 
AI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of DocumentsAI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of Documents
UiPathCommunity
 
AI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamsonAI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamson
UXPA Boston
 
Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Kit-Works Team Study_아직도 Dockefile.pdf_김성호Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Wonjun Hwang
 
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Safe Software
 
Config 2025 presentation recap covering both days
Config 2025 presentation recap covering both daysConfig 2025 presentation recap covering both days
Config 2025 presentation recap covering both days
TrishAntoni1
 
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
James Anderson
 
Zilliz Cloud Monthly Technical Review: May 2025
Zilliz Cloud Monthly Technical Review: May 2025Zilliz Cloud Monthly Technical Review: May 2025
Zilliz Cloud Monthly Technical Review: May 2025
Zilliz
 
Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Everything You Need to Know About Agentforce? (Put AI Agents to Work)Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Cyntexa
 
Building the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdfBuilding the Customer Identity Community, Together.pdf
Building the Customer Identity Community, Together.pdf
Cheryl Hung
 
Cybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and MitigationCybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and Mitigation
VICTOR MAESTRE RAMIREZ
 
Viam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdfViam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdf
camilalamoratta
 
fennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solutionfennec fox optimization algorithm for optimal solution
fennec fox optimization algorithm for optimal solution
shallal2
 
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Optima Cyber - Maritime Cyber Security - MSSP Services - Manolis Sfakianakis ...
Mike Mingos
 
Developing System Infrastructure Design Plan.pptx
Developing System Infrastructure Design Plan.pptxDeveloping System Infrastructure Design Plan.pptx
Developing System Infrastructure Design Plan.pptx
wondimagegndesta
 
Slack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teamsSlack like a pro: strategies for 10x engineering teams
Slack like a pro: strategies for 10x engineering teams
Nacho Cougil
 
Top-AI-Based-Tools-for-Game-Developers (1).pptx
Top-AI-Based-Tools-for-Game-Developers (1).pptxTop-AI-Based-Tools-for-Game-Developers (1).pptx
Top-AI-Based-Tools-for-Game-Developers (1).pptx
BR Softech
 
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
RTP Over QUIC: An Interesting Opportunity Or Wasted Time?
Lorenzo Miniero
 
Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?Shoehorning dependency injection into a FP language, what does it take?
Shoehorning dependency injection into a FP language, what does it take?
Eric Torreborre
 
IT484 Cyber Forensics_Information Technology
IT484 Cyber Forensics_Information TechnologyIT484 Cyber Forensics_Information Technology
IT484 Cyber Forensics_Information Technology
SHEHABALYAMANI
 
AI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of DocumentsAI Agents at Work: UiPath, Maestro & the Future of Documents
AI Agents at Work: UiPath, Maestro & the Future of Documents
UiPathCommunity
 
AI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamsonAI-proof your career by Olivier Vroom and David WIlliamson
AI-proof your career by Olivier Vroom and David WIlliamson
UXPA Boston
 
Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Kit-Works Team Study_아직도 Dockefile.pdf_김성호Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Kit-Works Team Study_아직도 Dockefile.pdf_김성호
Wonjun Hwang
 
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Safe Software
 

Objective-C for Java Developers, Lesson 1

Editor's Notes

  • #2: 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.
  • #3: 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.
  • #4: 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?).
  • #5: No UI stuff.
  • #6: 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.
  • #7: 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.
  • #8: You’ll see a lot of NS’s around. What else happened in 1996?
  • #10: 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)
  • #11: #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.
  • #12: @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.
  • #13: 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.
  • #14: 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.
  • #15: 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).
  • #16: 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).
  • #17: There are some consequences here.
  • #18: Funny that both these photos are taken in St. Louis!
  • #20: What happens? Trivial?
  • #21: Q: Are there tools to detect this? Can we determine this at compile time?
  • #22: 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?
  • #29: 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?
  • #30: Why should we use properties within classes? ANS: Derived class.
  翻译: