MORE on classes in …... OOP terminology in Objective-C Class: defines the grouping of data and code type of entity Object or Instance: a specific instantiation.

Slides:



Advertisements
Similar presentations
Object Oriented Programming with Java
Advertisements

Basic Object-Oriented concepts. Concept: An object has behaviors In old style programming, you had: –data, which was completely passive –functions, which.
Python Objects and Classes
Web Application Development Slides Credit Umair Javed LUMS.
Written by: Dr. JJ Shepherd
CERTIFICATION OBJECTIVES Use Class Members Develop Wrapper Code & Autoboxing Code Determine the Effects of Passing Variables into Methods Recognize when.
CS 3800 Su 11 Beg. IOS Dev L4 Obj C part 1 CS 3800 Introduction to IOS programming Summer 2011 G. Zimmerman.
George Blank University Lecturer. CS 602 Java and the Web Object Oriented Software Development Using Java Chapter 4.
Road Map Introduction to object oriented programming. Classes
IPhone Development Crash Course By Dylan Harris
Rossella Lau Lecture 8, DCO10105, Semester B, DCO10105 Object-Oriented Programming and Design  Lecture 8: Polymorphism & C++ pointer  Inheritance.
Terms and Rules Professor Evan Korth New York University (All rights reserved)
1 Pointers, Dynamic Data, and Reference Types Review on Pointers Reference Variables Dynamic Memory Allocation –The new operator –The delete operator –Dynamic.
Intro to Objective-C Syntax: What’s most confusing about Objective-C? Most class names start with NS: NSString, NSObject Parameter lists are not comma.
1 Procedural Concept The main program coordinates calls to procedures and hands over appropriate data as parameters.
Review of C++ Programming Part II Sheng-Fang Huang.
OOP Languages: Java vs C++
Programming Languages and Paradigms Object-Oriented Programming.
CSM-Java Programming-I Spring,2005 Introduction to Objects and Classes Lesson - 1.
More on Classes Inheritance Copyright © 2012 by Yong-Gu Lee
Presented by: Mojtaba Khezrian. Agenda Object Creation Object Storage More on Arrays Parameter Passing For Each VarArgs Spring 2014Sharif University of.
Object Oriented Programming
Introduction to Object Oriented Programming. Object Oriented Programming Technique used to develop programs revolving around the real world entities In.
C Programming Tutorial – Part I CS Introduction to Operating Systems.
Toward iOS programming. Overview  Objective-C is an object oriented language.  follows ANSI C style coding with methods from Smalltalk  Flexible almost.
Programming in Java Unit 2. Class and variable declaration A class is best thought of as a template from which objects are created. You can create many.
By Noorez Kassam Welcome to JNI. Why use JNI ? 1. You already have significantly large and tricky code written in another language and you would rather.
Objective C Basics. It’s C with Some Extras!  Cross Platform language  Mac  Linux/UNIX  Windows  Layer above C (Superset)  Adds Object-Oriented.
Method Overriding Remember inheritance: when a child class inherits methods, variables, etc from a parent class. Example: public class Dictionary extends.
Objective-C First Part adapted from a presentation by Kevin Layer.
1 C - Memory Simple Types Arrays Pointers Pointer to Pointer Multi-dimensional Arrays Dynamic Memory Allocation.
Chapter 0.2 – Pointers and Memory. Type Specifiers  const  may be initialised but not used in any subsequent assignment  common and useful  volatile.
Objective-C OOP Spring OOP Conceptually the same as C++, Java, and all other object oriented languages The syntax, however… …is, well, different.
Objective-C1 CS151 Presentation: Objective C Kai Tai Pang William Sze.
Sadegh Aliakbary Sharif University of Technology Spring 2011.
Chapter 3 Inheritance and Polymorphism Goals: 1.Superclasses and subclasses 2.Inheritance Hierarchy 3.Polymorphism 4.Type Compatibility 5.Abstract Classes.
C Functions Three major differences between C and Java functions: –Functions are stand-alone entities, not part of objects they can be defined in a file.
Chapter 6 Introduction to Defining Classes. Objectives: Design and implement a simple class from user requirements. Organize a program in terms of a view.
Polymorphism, Dynamic Typing, and Dynamic Binding Copyright © 2012 by Yong-Gu Lee
Inheritance. Inheritance - Introduction Idea behind is to create new classes that are built on existing classes – you reuse the methods and fields and.
Constructors & Garbage Collection Ch. 9 – Head First Java.
Object-Oriented Programming Chapter Chapter
Programming With Java ICS201 University Of Ha’il1 Chapter 7 Inheritance.
OOP with Objective-C Categories, Protocols and Declared Properties.
Fall 2015CISC/CMPE320 - Prof. McLeod1 CISC/CMPE320 Today: –Review declaration, implementation, simple class structure. –Add an exception class and show.
Peyman Dodangeh Sharif University of Technology Spring 2014.
1 Classes II Chapter 7 2 Introduction Continued study of –classes –data abstraction Prepare for operator overloading in next chapter Work with strings.
Lec 5 Obj-C part 2 CS 3800 Introduction to IOS programming Lecture 5 Summer 2011.
OBJECTIVE C Kurt Ladendorf. General Knowledge  Super set of C  Smalltalk  Mainly used for iOS and other Apple development.
Quick Review of OOP Constructs Classes:  Data types for structured data and behavior  fields and methods Objects:  Variables whose data type is a class.
Written by: Dr. JJ Shepherd
Basic Object-Oriented concepts. Concept: Classes describe objects Every object belongs to (is an instance of) a class An object may have fields –The class.
OOP Basics Classes & Methods (c) IDMS/SQL News
Programming Fundamentals1 Chapter 7 INTRODUCTION TO CLASSES.
Copyright 2006 Pearson Addison-Wesley, 2008, 2012 Joey Paquet 1 Concordia University Department of Computer Science and Software Engineering SOEN6441 –
Liang, Introduction to C++ Programming, (c) 2007 Pearson Education, Inc. All rights reserved X 1 Chapter 9 Introduction of Object Oriented Programming.
Classes CS 162 (Summer 2009). Parts of a Class Instance Fields Methods.
CSE 332: C++ Exceptions Motivation for C++ Exceptions Void Number:: operator/= (const double denom) { if (denom == 0.0) { // what to do here? } m_value.
Chapter 5 Introduction to Defining Classes Fundamentals of Java.
Design issues for Object-Oriented Languages
The Object-Oriented Thought Process Chapter 03
CS 215 Final Review Ismail abumuhfouz Fall 2014.
Java Primer 1: Types, Classes and Operators
Object Oriented Programming (OOP) LAB # 8
Object Oriented Programming COP3330 / CGS5409
Java Programming Language
Pointers, Dynamic Data, and Reference Types
CISC/CMPE320 - Prof. McLeod
Java Programming Language
SPL – PS3 C++ Classes.
Presentation transcript:

MORE on classes in …..

OOP terminology in Objective-C Class: defines the grouping of data and code type of entity Object or Instance: a specific instantiation of a class with its own state (class variables values) Method: a “function/operator” that an object knows how to perform Instance Variable: this is what we call class variable in other OOP languages

Objective-C as an OOP lang Strict superset of C Mix C with ObjC Or even C++ with ObjC (usually referred to as ObjC++) A very simple language, but some new syntax Single inheritance, classes inherit from one and only one superclass Protocols define behavior that cross classes Dynamic runtime Loosely typed, if you’d like

More on Objective-C Syntax: What’s most confusing about Objective-C? Most class names start with NS: NSString, NSObject Parameter lists are not comma delimited and method names are interrupted by parameter names and types. There are too many brackets and colons. :[ Memory Management. All symbols confuse me. Both C and Objective-C methods are allowed? Weird.

Objective-C Class Methods Instances/Objects respond to instance methods - (id)init; - (float)height; - (void)walk; Classes respond to class methods + (id)alloc; + (id)person; + (Person *)sharedPerson; [ClassName person] [object walk]

Intro to Objective-C Syntax: Method Signatures In Java or C: void doNothing() { // nothing } int addThree(int x) { return x + 3; } int multiplyThreeParameters(int x, int y, int z) { return x * y * z; } // note methods with multiple parameters are given in a parameter list // that is delimited by commas. Key return type method name parameter type parameter name

Intro to Objective-C Syntax: Method Signatures In Objective-C - (void) doNothing { // nothing } - (int) addThree:(int) x { return x + 3; } - (int) multiplyThis:(int) x ByThis:(int) y AndThis:(int) z { return x * y * z; } Key return type method name parameter type parameter name NOTE: methods of Objective-C classes with multiple parameters have a to delimit the end of the parameter name and the continuation of the method name. Actually method name is multiplyThis:ByThis:AndThis

Stop---that was weird---method name is change of the 3 - (int) multiplyThis:(int) x ByThis:(int) y AndThis:(int) z { return x * y * z; } Method name is multiplyThis:ByThis:AndThis

Intro to Objective-C Syntax: Accessing methods of objects In Java: object.method(param1, param2); In C++: object->method(param1, param2); In C: (no objects) method(param1, param2); In Objective-C: [object method:param1 method:param2]; Only a space between no comma

Intro to Objective-C Syntax: Accessing methods of objects In Objective-C: [object method:param1 method:param2]; Example: If you have a string: NSString *msg YOUR BASES BELONG TO US"; And you want to split the sentence into an array of words: NSArray *words = [msg "]; // is required for all string literals, and encodes the string using UTF8

Intro to Objective-C Syntax: Instantiation / Memory Allocation In Java: Object o = new Object(); // Java takes care of garbage collection. In this statement, memory // is automatically allocated for the new object. Memory is also // automatically released when the object is no longer in use. In C: Object *o = (Object *) malloc(sizeof(Object)); free (o); In C++: Object *o = new Object; delete (o);

Intro to Objective-C Syntax: Instantiation In Objective-C: Object *obj = [[Object alloc] init];

Ways of creating objects Asking other objects to create objects for you NSString’s - (NSString *)stringByAppendingString:(NSString *)otherString; NSString’s & NSArray’s - (id)mutableCopy; NSArray’s - (NSString *)componentsJoinedByString:(NSString *)separator; Not all objects handed out by other objects are newly created NSArray’s - (id)lastObject; NSArray’s - (id)objectAtIndex:(int)index; Unless the method has the word “copy” in it, if the object already exists, you get a pointer to it. If the object does not already exist (like the 3 examples above), then you’re creating. Using class methods to create objects NSString’s + (id)stringWithFormat:(NSString *)format,... UIButton’s + (id)buttonWithType:(UIButtonType)buttonType; NSMutableArray’s + (id)arrayWithCapacity:(int)count; NSArray’s + (id)arrayWithObject:(id)anObject;

Allocating and initializing an object from scratch Doing this is a two step process: allocation, then initialization. Both steps must happen one right after the other (nested one inside the other, in fact). Examples: NSMutableArray *stack = [[NSMutableArray alloc] init]; CalculatorBrain *brain = [[CalculatorBrain alloc] init]; About Allocating Heap allocation for a new object is done by the NSObject class method + (id)alloc It allocates enough space for all the instance variables (e.g., the ones created About Initializing Classes can have multiple, different initializers (with arguments) in addition to plain init. If a class can’t be fully initialized by plain init, it is supposed to raise an exception in init. NSObject’s only initializer is init. Ways of creating objects –cont.

More complicated init methods If an initialization method has arguments, it should still start with the four letters init Example: - (id)initWithFrame:(CGRect)aRect; // initializer for UIView UIView *myView = [[UIView alloc] initWithFrame:thePerfectFrame]; Examples of multiple initializers with different arguments From NSString: - (id)initWithCharacters:(const unichar *)characters length:(int)length; - (id)initWithFormat:(NSString *)format,...; - (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding; Classes must designate an initializer for subclassers This is the initializer that subclasses must use to initialize themselves in their designated initializer. Static typing of initializers For subclassing reasons, init methods should be typed to return id (not statically typed) Callers should statically type though, e.g., MyObject *obj = [[MyObject alloc] init]; Ways of creating objects –cont.

Creating you own init Creating your own initialization method Super initializer can return nil if it failed to initialize. Example ---.m MyObject - (id)init { self = [super init]; // call our super’s designated initializer if (self) { // initialize our subclass here } return self;

Intro to Objective-C Syntax: Classes In Java, students can define and implement a class in a single.java file. In C++, students define a class and methods in a.h header file and implement the methods in a.c file. In Objective-C, students define a class and its methods in a.h header file and implement the methods in a.m file. Circle.h Circle.m include

Intro to Objective-C Syntax: Circle : NSObject { // instance variables double radius = 1.0; } // Class methods +(double) getPi; // Instance methods -(double) getArea; -(void) setRadius:(double) Circle.h Key class name superclass return type method name parameter type parameter name Optional parameter name

#import Circle +(double) getPi { return ; } -(double) getArea { double pi = [Circle getPi]; return pi * radius * radius; } -(void) setRadius:(double) r { radius = r; Circle.m

#import "Circle.h" // Non Objective-C function; program origin int main() { Circle *mycirc = [[Circle alloc] init]; [mycirc setRadius:3.0]; double area = [mycirc getArea]; double pi = [Circle getPi]; return 0; } Main.m

Classes --- remember Have both definition file and implementation file : classname.h and classname.m

Prototyping methods When declaring or implementing functions for a class, they must begin with a + or - + indicates a “class method” that can only be used by the class itself. In other words, they’re for private functions ---like static functions in other languages. - indicates “instance methods” to be used by the client program (public functions) –invoked on objects/instance of class

Class Declaration (Interface) Node : NSObject { Node *link; int contents; } +(id)new; -(void)setContent:(int)number; -(void)setLink:(Node*)next; -(int)getContent; node.h Class is Node who’s parent is NSObject { class variables } +/- private/public methods of Class Class variables are private

Class Definition (Implementation) #import Node +(id)new { return [Node alloc];} -(void)setContent:(int)number {contents = number;} -(void)setLink:(Node*)next { [link autorelease]; link = [next retain]; } -(int)getContent {return contents;} -(Node*)getLink {return node.m Like your C++.cpp file >>just give the methods here

Creating class instances ClassName *object = [[ClassName alloc] init]; OR ClassName *object= [[ClassName alloc] initWith*];

Destroying a class object = nil; The underlying system will take care of removing the object from memory for you automatically. Note: a lot of programs don’t explicitly set objects to nil but, is an option for you. Like NULL in C ++ Like null in Java

Do you need to test for nill if (object == nill) //or if (object) { //do whatever } Actually, in Objective-C if an objects is nil and you send a message (method call) to it does nothing….however, if you are expecting results and try to use them you could get in trouble –so checking in this case is important.

Setting values for class variables of an object ---- THROUGH methods ClassName *object = [[ClassName alloc] init]; [object setXXXMethod:value1]; [object setYYYYMethod:value2];

Two kinds of methods – calss and instance methods Class Method call is like a STATIC method – call on the class itself Example for class NSDate –has class method “date” that will return pointer to an instance of NSDate associated with current date NSDate *now = [NSDate date]; Instance method is like normal function – call on an object Example for class NSDate –has instance method “timeIntervalSince1970 ” that will return seconds of the date object since 1970 double seconds = [now timeIntervalSince1970];

Method calls uses “Message syntax” [receiver message] [receiver message:argument] [receiver message:arg1 andArg:arg2] Example of a Class method to construct and new object NSDate *now = [NSDate date];

More Terminology Message expression [receiver method: argument] Message [receiver method: argument] Selector [receiver method: argument] Method The code selected by a message

Message/Method call with multiple arguments [ Object methodp1:v1 methodp2:v2 methodp3:v3] What is the actual method name? It is (yes it is odd!) methodp1:methodp2:methodp3 Example NSCalendar *cal = [NSCalendar currentCalendar]; NSUInteger day = [cal ordinalityOfUnit:NSDayCalendarUnit forDate:now]; What is the name of the method ? It is ordinalityOfUnit:forDate

Nesting Method call [[ Object method1] method 2] method 1 executed first and on the results method 2 is executed Example without nesting NSCalendar *cal = [NSCalendar currentCalendar]; NSUInteger day = [cal ordinalityOfUnit:NSDayCalendarUnit forDate:now]; Example WITH nesting NSUInteger day = [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit forDate:now]

Some arbitrary examples Person *voter; //assume this exists [voter castBallot]; int theAge = [voter age]; [voter setAge:21]; if ([voter canLegallyVote]) { // do something voter-y } [voter NSString *name = [[voter spouse] name];

Accessor Methods Two kinds: setter methods and getter methods - - used to set and get instance variables. Example Person : NSObject { //two instance variables float heightInMeters; int weightInKilos; } - (void)setHeightInMeters:(float)h; //setter instance method - (void)setWeightInKilos:(int)w; //setter instance method - (void)weightInKilos; //getter instance method - (void)heightInMeters; //getter insance method - (float) bodyMassIndex; //instance NOTE: the convention of naming the setter methods as setVariableName NOTE: the convention of naming the getter methods same as the variable they access

Accessor Methods Example Person - (float) heightInMeters { return heightInMeters; } - (int) weightInKilos { return weightInKilos; } - (void) setHeightInMeters:(float)h { heightInMeters = h; } - (void) setWeightInKilos:(int)w { weightInKilos = w;} - (float) bodyMassIndex { return weightInKilos / (heightInMeters * heightInMeters);

Lets use our Accessor Methods Example main.m Int main(int argc, const char * argv[]) { //Create an instance of Person Person *person = [[Person alloc] init]; //Give instance variables some values [person setWeightInKilos:96]; [person setHeightInMeters:1.8]; //Call bodyMassIndex method float bmi = [person bodyMassIndex]; //print out (%d, %f) has a BMI of %f”, [person weightInKilos], [person heightInMeters], bmi); NOTE: %f mean insert float value, %d is an integer value --- same as you see in printf for C

Properties --simple way to create accessor methods Declare in one line the getter and setter methods for a variable Example -- new Person : NSObject { //two instance variables float heightInMeters; int weightInKilos; float heightInMeters; //will create setter and getter method for this float weightInKilos; //will create setter and getter method for this var - (float) bodyMassIndex; //instance In Person.h

Properties --just have Declare in one line the getter and setter methods for a variable Example -- new Person : NSObject { //don’t need to declare the variables here // ---they are done float heightInMeters; //will create setter and getter method for this float weightInKilos; //will create setter and getter method for this var - (float) bodyMassIndex; //instance

Properties --continued annotation new Person.m #import heightInMeters, weightInKilos; - (float) bodyMassIndex { return weightInKilos / (heightInMeters * heightInMeters); } Now in.m file must annotation Do not need to create the methods

Properties can take (a1,a2,*) var (nonatomic, readonly, strong) NSString *itemName; nonatomic / atomic = dealing with threading nonatomic = (YOU USE THIS FOR IOS), not thread-safe NOTE: no problem if this is UI code because all UI code happens on the main thread of the application. atomic = (don’t do this for iOS), thread safe, default readwrite/readonly readwrite= default value, declares both a setter and a getter. readonly =means only create setter method. weak/strong/assign = dealing with memory management strong= strong reference to object stored in variable –see ARC weak = weak reference to object stored in variable –see ARC assign = default for variables that are primitive data types

Keyword --self self is like “this” in other OOP languages //some code inside a method of a class float h = [self heightInMeters]; //method calss to getter for the variable heightInMeters //another example a method in a class that adds itself (object) to an array that is passed -(void) addYourselfToArray  NSMutableArray *) theArray { [theArray addObject:self]; }

Inheritence In.h ClassName : ParentClass { //class variables }

Example of Inheritance Create class Employee that has Person as parent and adds class variable of an employee id Employee.h file #import Employee : Person { int employeeID; int employeeID; //remember short cut to declare accessor methods // for employeeID class

Child class Can access Parent’s methods and variables Overriding methods //Employee.m file //override the #import employeeID; //remember this genearteds the setemployeeID() and employeeID() methods - (float) bodyMassIndex //overridden method of previous Person parent class { return 19.0; super = keyword to mean parent class - (float) bodyMassIndex //overridden method of previous Person parent class { float normalBMI = [super bodyMassIndex] ; //first call Person’s bodyMassIndex method return normalBMI*0.9; }

Instance variables typically in one of 4 categories Primitive data types int age; float number; Object-type attributes NSString myName; NSNumber To-one relationship = point to a single “complex” object Employee top_Employee; Person spouse; To-many relationships = these are collections (objects or data) NSMutableArray *friends; NSArray * s;

Class Example with some different “kinds” of instance vars #import Employee : Person { int employeeID; //primitive data NSString *lastName; //object type Person *spouse; //To-one more complex object NSMutableArray *children; //To-many collections } //method declarations Employee.h IMPORTANT Have you noticed that object instance variables are always Pointers to objects.

STOP: huh? Variables are always pointers to Objects Objects don’t live inside other objects. You only points from one object to another MePerson -> spouse (another Person) Result: you end up with a lot of distinct objects in your program’s memory Luckily we have Automatic Reference Counting for our iOS programs to take care of memory leaking and getting rid of no longer needed objects!!! Yes!

Object Typing Suppose have Vehicle class and child Ship Vehicle Ship : Vehicle - Ship *s = [[Ship alloc] init]; [s shoot]; [s move]; Vehicle *v = s; [v shoot]; //THIS CAUSES a COMPILER WARNING –but not a runtime error

Object Typing Suppose have Vehicle class and child Ship class id obj =...; [obj shoot]; //This is NOT a compiler warning The compiler knows that the method shoot exists, possible that obj might respond to it --- NO compiler warning not typed obj enough for the compiler to be sure it’s wrong. Will crash at runtime if obj is not a Ship (unless is an object of some other class that implements a shoot method).

Object Typing Suppose have Vehicle class and child Ship class id obj =...; [obj someMethodNameThatNoObjectAnywhereRespondsTo]; has never heard of this method. COMPILER WARNING

Object Typing Suppose have Vehicle class and child Ship class NSString *hello [hello shoot]; The compiler knows that NSString objects do not respond to shoot. crash at runtime. COMPILER WARNING

Object Typing Suppose have Vehicle class and child Ship class NSString *hello Ship *helloShip = (Ship *)hello; [helloShip shoot]; We are “casting” here. The compiler thinks we know what we’re doing. No compiler error as helloShip is thought to be a ship.. HOWEVER, it is not so, RUNTIME ERROR

NSObject Base class for pretty much every object in the iOS SDK Methods - (NSString *)description is a useful method to override (it’s in NSLog()). - (id)copy not all objects implement mechanism (raises exception if not) - (id)mutableCopy not all objects implement mechanism (raises exception if not)

linkList class #import linkList +(id)new {return [linkList alloc];} -(void)insert:(int)value { id temp = [Node new]; [temp setContent:value]; [temp setLink:head]; head = [temp retain]; [temp release]; } -(void)append:(int)value { id last = [head getLink]; while ([last getLink] != nil) {last = [last getLink];} id temp = [Node new]; [temp setContent:value]; [last setLink:temp]; [temp release]; } -(void)remove { id temp = head; head = [head getLink]; [temp release]; } -(int)getValue { return [head linkList.m Class linkList is child of previous Node class

Stack class #import Stack : linkList {} +(id)new; -(void)push:(int)value; #import Stack +(id)new {return [Stack alloc];} -(void)push:(int)value {[self insert:value];} -(int)pop { int ret = [self getValue]; //getValue method of parent linkList [self remove]; //remove method of parent linkList return ret; stack.h stack.m Self is like the C++/Java word this. Remember alloc creates the object in memory

Example: main.m #import "stack.h” int main(){ Stack *s = [Stack new]; [s push:1]; [s push:2]; printf("%d\t", [s pop]); [s push:3]; printf("%d\t", [s pop]); [s release]; return 0; } $ gcc -x objective-c node.m linkList.m stack.m main.c -framework Cocoa -o stackTest $./stackTest main.c new is the same as in C++/Java Note only need to import “stack.h” because stack imports LinkList.h which imports Node.h which imports cocoa.h