SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
CS193p
                            Spring 2010




Wednesday, March 31, 2010
Enrollment Closed
                     You should have received an e-mail
                     It will confirm your grading status (P/NC or not)
                     As usual, we were oversubscribed for grading option
                     Sorry to anyone who didn’t get the option they wanted
                     If you received e-mail, but are not in Axess, do it!


                     ... and an invitation to iPhone Developer Program

                     If not, e-mail cs193p@cs.stanford.edu.




Wednesday, March 31, 2010
Communication

                            E-mail
                            Questions are best sent to cs193p@cs.stanford.edu
                            Sending directly to instructor or TA’s risks slow response.


                            Web Site
                            Very Important!
                            http://cs193p.stanford.edu
                            All lectures, assignments, code, etc. will be there.
                            This site will be your best friend when it comes to getting info.




Wednesday, March 31, 2010
Office Hours
                            Andreas
                            Monday 6pm to 8pm
                            Thursday 6pm to 8pm
                            Gates B26A
                            Bring your Stanford ID card for access to the building


                            Sonali
                            Friday 11am to 1pm
                            Thursday 1pm to 3pm
                            Gates B26B




Wednesday, March 31, 2010
Today’s Topics
                            MVC
                            Calculator


                            Objective-C
                            Declaring and implementing objects
                            Sending messages between objects


                            Interface Builder
                            “Wiring up” objects to send messages to each other
                            Setting up the properties of objects


                            Xcode
                            Managing all your code
                            Running your application in the simulator




Wednesday, March 31, 2010
Our Calculator
                               CalculatorViewController

                                     Controller

                                                          UILabel



                            Model                         View
                                               UIButton              UIButton
                 CalculatorBrain                    UIButton  UIButton
                                               UIButton    UIButton UIButton



Wednesday, March 31, 2010
Header File (public API)


                                                       Model

          @interface




          @end


Wednesday, March 31, 2010
Header File (public API)


                                                       Model

          @interface CalculatorBrain




          @end


Wednesday, March 31, 2010
Header File (public API)


                                                       Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject




          @end


Wednesday, March 31, 2010
Header File (public API)


                                                       Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }




          @end


Wednesday, March 31, 2010
Header File (public API)


                                                       Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }


          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;



          @end


Wednesday, March 31, 2010
Header File (public API)


                                                                            Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }
                                 Specifying void as the return type means
                                    that this method returns no value.
          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;



          @end


Wednesday, March 31, 2010
Header File (public API)


                                                                Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }
                     The name of this method is “setOperand:”

          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;



          @end


Wednesday, March 31, 2010
Header File (public API)


                                                                                Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }
                                          It takes one argument, a double called “anOperand”

          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;



          @end


Wednesday, March 31, 2010
Header File (public API)


                                                                 Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }
                                                       Don’t forget a semicolon here!

          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;



          @end


Wednesday, March 31, 2010
Header File (public API)


                                                               Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }


          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;

                               This method returns a double.


          @end


Wednesday, March 31, 2010
Header File (public API)


                                                                                 Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }


          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;

                                               It takes a pointer to an NSString object as its argument.
                                                  That’s right, we’re passing an object to this method.
          @end


Wednesday, March 31, 2010
Header File (public API)


                                                       Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }


          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;

          - (NSArray *)foo:(int)zap bar:(id)pow;

          @end


Wednesday, March 31, 2010
Header File (public API)


                                                                                 Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }


          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;

          - (NSArray *)foo:(int)zap bar:(id)pow;

          @end                   This method takes two arguments and is called “foo:bar:”



Wednesday, March 31, 2010
Header File (public API)


                                                                      Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }


          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;

          - (NSArray *)foo:(int)zap bar:(id)pow;

                               It returns a pointer to an NSArray
          @end
                                (a collection class in Foundation).


Wednesday, March 31, 2010
Header File (public API)


                                                                                   Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }


          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;

          - (NSArray *)foo:(int)zap bar:(id)pow;

          @end                                               The second argument is of type “id”
                                                       This means “a pointer to *ANY* kind of object!”


Wednesday, March 31, 2010
Header File (public API)


                                                       Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }


          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;

          - (NSArray *)foo:(int)zap bar:(id)pow;

          @end


Wednesday, March 31, 2010
Header File (public API)


                                                       Model
          #import <Foundation/Foundation.h>

          @interface CalculatorBrain : NSObject
          {
                      double operand;
          }


          - (void)setOperand:(double)anOperand;

         - (double)performOperation:(NSString *)operation;



          @end


Wednesday, March 31, 2010
Implementation File
                            (private and public)

                                                   Model
          #import “CalculatorBrain.h”

          @implementation CalculatorBrain




          @end


Wednesday, March 31, 2010
Implementation File
                            (private and public)

                                                   Model
          #import “CalculatorBrain.h”

          @implementation CalculatorBrain

          - (void)setOperand:(double)anOperand
          {
                     <code goes here>
          }

         - (double)performOperation:(NSString *)operation
         {
                     <code goes here>
                     return aDouble;
         }
          @end


Wednesday, March 31, 2010
Implementation File
                            (private and public)

                                                      Model
          #import “CalculatorBrain.h”

          @implementation CalculatorBrain          No semicolon this time!

          - (void)setOperand:(double)anOperand
          {
                     <code goes here>
          }

         - (double)performOperation:(NSString *)operation
         {
                     <code goes here>
                     return aDouble;
         }
          @end


Wednesday, March 31, 2010
Implementation File
                            (private and public)

                                                   Model
          #import “CalculatorBrain.h”

          @implementation CalculatorBrain

          - (void)setOperand:(double)anOperand
          {
                     <code goes here>
          }

         - (double)performOperation:(NSString *)operation
         {
             [operation sendMessage:argument];
             return aDouble;
         }
          @end


Wednesday, March 31, 2010
Implementation File
                            (private and public)

                                                   Model
          #import “CalculatorBrain.h”

          @implementation CalculatorBrain

          - (void)setOperand:(double)anOperand
          {
                     <code goes here>
          }

         - (double)performOperation:(NSString *)operation
         {
             [operation sendMessage:argument];
             return aDouble;
         }           Square brackets mean “send a message.”
          @end


Wednesday, March 31, 2010
Implementation File
                            (private and public)

                                                                                  Model
          #import “CalculatorBrain.h”

          @implementation CalculatorBrain

          - (void)setOperand:(double)anOperand
          {
                     <code goes here>
          }

         - (double)performOperation:(NSString *)operation
         {
             [operation sendMessage:argument];
             return aDouble;
         }
          @end                 This is the object to send the message to
                        (in this case, the NSString called “operation” that was
                             passed as an argument to performOperation:).

Wednesday, March 31, 2010
Implementation File
                            (private and public)

                                                   Model
          #import “CalculatorBrain.h”

          @implementation CalculatorBrain

          - (void)setOperand:(double)anOperand
          {
                     <code goes here>
          }

         - (double)performOperation:(NSString *)operation
         {
             [operation sendMessage:argument];
             return aDouble;
         }                         This is the message to send.
          @end


Wednesday, March 31, 2010
Implementation File
                            (private and public)

                                                             Model
          #import “CalculatorBrain.h”

          @implementation CalculatorBrain

          - (void)setOperand:(double)anOperand
          {
                     <code goes here>
          }

         - (double)performOperation:(NSString *)operation
         {
             [operation sendMessage:argument];
             return aDouble;
         }                        And this is its one (in this case) argument.
          @end


Wednesday, March 31, 2010
Controller

      #import <UIKit/UIKit.h>

      @interface CalculatorViewController : UIViewController
      {
         CalculatorBrain * brain;
                IBOutlet UILabel * display;
      }


      - (IBAction)digitPressed:(UIButton *)sender;
      - (IBAction)operationPressed:(UIButton *)sender;

      @end

Wednesday, March 31, 2010
Controller
                                    Our Controller inherits from
                                     UIViewController. UIKit
      #import <UIKit/UIKit.h>         supports MVC primarily
                                        through this class.

      @interface CalculatorViewController : UIViewController
      {
         CalculatorBrain * brain;
                IBOutlet UILabel * display;
      }


      - (IBAction)digitPressed:(UIButton *)sender;
      - (IBAction)operationPressed:(UIButton *)sender;

      @end

Wednesday, March 31, 2010
Controller

      #import <UIKit/UIKit.h>

      @interface CalculatorViewController : UIViewController
      {
         CalculatorBrain * brain;        This is going to point to our
                                                 CalculatorBrain   Model
                IBOutlet UILabel * display;
      }


      - (IBAction)digitPressed:(UIButton *)sender;
      - (IBAction)operationPressed:(UIButton *)sender;

      @end

Wednesday, March 31, 2010
These hook up to our   View

            Controller

      #import <UIKit/UIKit.h>

      @interface CalculatorViewController : UIViewController
      {
         CalculatorBrain * brain;
                IBOutlet UILabel * display;
      }


      - (IBAction)digitPressed:(UIButton *)sender;
      - (IBAction)operationPressed:(UIButton *)sender;

      @end

Wednesday, March 31, 2010
View

            Controller

      #import <UIKit/UIKit.h>

      @interface CalculatorViewController : UIViewController
      {                            Model
         CalculatorBrain * brain;
                IBOutlet UILabel * display;
      }


      - (IBAction)digitPressed:(UIButton *)sender;
      - (IBAction)operationPressed:(UIButton *)sender;

      @end

Wednesday, March 31, 2010
CalculatorViewController.xib


Wednesday, March 31, 2010
“File’s Owner” is our
                    Controller

   CalculatorViewController.xib


Wednesday, March 31, 2010
Wednesday, March 31, 2010
Wednesday, March 31, 2010
Wednesday, March 31, 2010
Xcode



                 A picture (or demo) is worth 1,000 words.




Wednesday, March 31, 2010

Contenu connexe

En vedette (7)

Lecture 06
Lecture 06Lecture 06
Lecture 06
 
Lecture 03
Lecture 03Lecture 03
Lecture 03
 
Lecture 04
Lecture 04Lecture 04
Lecture 04
 
String slide
String slideString slide
String slide
 
String handling(string class)
String handling(string class)String handling(string class)
String handling(string class)
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome Economy
 
The Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post FormatsThe Six Highest Performing B2B Blog Post Formats
The Six Highest Performing B2B Blog Post Formats
 

Similaire à Lecture 2#- (Intro to Obj-C, Interface Builder and Xcode)

MongoDB Java Development - MongoBoston 2010
MongoDB Java Development - MongoBoston 2010MongoDB Java Development - MongoBoston 2010
MongoDB Java Development - MongoBoston 2010
Eliot Horowitz
 
MDSD for iPhone and Android
MDSD for iPhone and AndroidMDSD for iPhone and Android
MDSD for iPhone and Android
Heiko Behrens
 

Similaire à Lecture 2#- (Intro to Obj-C, Interface Builder and Xcode) (20)

Model-Driven Software Development - Introduction & Overview
Model-Driven Software Development - Introduction & OverviewModel-Driven Software Development - Introduction & Overview
Model-Driven Software Development - Introduction & Overview
 
Ios fundamentals with ObjectiveC
Ios fundamentals with ObjectiveCIos fundamentals with ObjectiveC
Ios fundamentals with ObjectiveC
 
Reversing Google Protobuf protocol
Reversing Google Protobuf protocolReversing Google Protobuf protocol
Reversing Google Protobuf protocol
 
C++ Programming
C++ ProgrammingC++ Programming
C++ Programming
 
C++ Programming
C++ ProgrammingC++ Programming
C++ Programming
 
MongoDB Java Development - MongoBoston 2010
MongoDB Java Development - MongoBoston 2010MongoDB Java Development - MongoBoston 2010
MongoDB Java Development - MongoBoston 2010
 
Creating Clean Code with AOP (T3CON10)
Creating Clean Code with AOP (T3CON10)Creating Clean Code with AOP (T3CON10)
Creating Clean Code with AOP (T3CON10)
 
Using SQLite
Using SQLiteUsing SQLite
Using SQLite
 
SQLite Techniques
SQLite TechniquesSQLite Techniques
SQLite Techniques
 
Iphone course 1
Iphone course 1Iphone course 1
Iphone course 1
 
Introducing protobuf in Swift
Introducing protobuf in SwiftIntroducing protobuf in Swift
Introducing protobuf in Swift
 
Objective-C A Beginner's Dive (with notes)
Objective-C A Beginner's Dive (with notes)Objective-C A Beginner's Dive (with notes)
Objective-C A Beginner's Dive (with notes)
 
Data Loading for Ext GWT
Data Loading for Ext GWTData Loading for Ext GWT
Data Loading for Ext GWT
 
Briefly Rust - Daniele Esposti - Codemotion Rome 2017
Briefly Rust - Daniele Esposti - Codemotion Rome 2017Briefly Rust - Daniele Esposti - Codemotion Rome 2017
Briefly Rust - Daniele Esposti - Codemotion Rome 2017
 
Streams of information - Chicago crystal language monthly meetup
Streams of information - Chicago crystal language monthly meetupStreams of information - Chicago crystal language monthly meetup
Streams of information - Chicago crystal language monthly meetup
 
Python programming lanuguage
Python programming lanuguagePython programming lanuguage
Python programming lanuguage
 
Android Architecture components
Android Architecture componentsAndroid Architecture components
Android Architecture components
 
MDSD for iPhone and Android
MDSD for iPhone and AndroidMDSD for iPhone and Android
MDSD for iPhone and Android
 
Hems
HemsHems
Hems
 
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
 

Dernier

The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
heathfieldcps1
 

Dernier (20)

Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptx
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...
Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...
Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...
 
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptxHMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
 
Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
Micro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfMicro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdf
 
Fostering Friendships - Enhancing Social Bonds in the Classroom
Fostering Friendships - Enhancing Social Bonds  in the ClassroomFostering Friendships - Enhancing Social Bonds  in the Classroom
Fostering Friendships - Enhancing Social Bonds in the Classroom
 
ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfUnit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdf
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - English
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
 

Lecture 2#- (Intro to Obj-C, Interface Builder and Xcode)

  • 1. CS193p Spring 2010 Wednesday, March 31, 2010
  • 2. Enrollment Closed You should have received an e-mail It will confirm your grading status (P/NC or not) As usual, we were oversubscribed for grading option Sorry to anyone who didn’t get the option they wanted If you received e-mail, but are not in Axess, do it! ... and an invitation to iPhone Developer Program If not, e-mail cs193p@cs.stanford.edu. Wednesday, March 31, 2010
  • 3. Communication E-mail Questions are best sent to cs193p@cs.stanford.edu Sending directly to instructor or TA’s risks slow response. Web Site Very Important! http://cs193p.stanford.edu All lectures, assignments, code, etc. will be there. This site will be your best friend when it comes to getting info. Wednesday, March 31, 2010
  • 4. Office Hours Andreas Monday 6pm to 8pm Thursday 6pm to 8pm Gates B26A Bring your Stanford ID card for access to the building Sonali Friday 11am to 1pm Thursday 1pm to 3pm Gates B26B Wednesday, March 31, 2010
  • 5. Today’s Topics MVC Calculator Objective-C Declaring and implementing objects Sending messages between objects Interface Builder “Wiring up” objects to send messages to each other Setting up the properties of objects Xcode Managing all your code Running your application in the simulator Wednesday, March 31, 2010
  • 6. Our Calculator CalculatorViewController Controller UILabel Model View UIButton UIButton CalculatorBrain UIButton UIButton UIButton UIButton UIButton Wednesday, March 31, 2010
  • 7. Header File (public API) Model @interface @end Wednesday, March 31, 2010
  • 8. Header File (public API) Model @interface CalculatorBrain @end Wednesday, March 31, 2010
  • 9. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject @end Wednesday, March 31, 2010
  • 10. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } @end Wednesday, March 31, 2010
  • 11. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; @end Wednesday, March 31, 2010
  • 12. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } Specifying void as the return type means that this method returns no value. - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; @end Wednesday, March 31, 2010
  • 13. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } The name of this method is “setOperand:” - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; @end Wednesday, March 31, 2010
  • 14. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } It takes one argument, a double called “anOperand” - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; @end Wednesday, March 31, 2010
  • 15. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } Don’t forget a semicolon here! - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; @end Wednesday, March 31, 2010
  • 16. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; This method returns a double. @end Wednesday, March 31, 2010
  • 17. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; It takes a pointer to an NSString object as its argument. That’s right, we’re passing an object to this method. @end Wednesday, March 31, 2010
  • 18. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; - (NSArray *)foo:(int)zap bar:(id)pow; @end Wednesday, March 31, 2010
  • 19. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; - (NSArray *)foo:(int)zap bar:(id)pow; @end This method takes two arguments and is called “foo:bar:” Wednesday, March 31, 2010
  • 20. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; - (NSArray *)foo:(int)zap bar:(id)pow; It returns a pointer to an NSArray @end (a collection class in Foundation). Wednesday, March 31, 2010
  • 21. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; - (NSArray *)foo:(int)zap bar:(id)pow; @end The second argument is of type “id” This means “a pointer to *ANY* kind of object!” Wednesday, March 31, 2010
  • 22. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; - (NSArray *)foo:(int)zap bar:(id)pow; @end Wednesday, March 31, 2010
  • 23. Header File (public API) Model #import <Foundation/Foundation.h> @interface CalculatorBrain : NSObject { double operand; } - (void)setOperand:(double)anOperand; - (double)performOperation:(NSString *)operation; @end Wednesday, March 31, 2010
  • 24. Implementation File (private and public) Model #import “CalculatorBrain.h” @implementation CalculatorBrain @end Wednesday, March 31, 2010
  • 25. Implementation File (private and public) Model #import “CalculatorBrain.h” @implementation CalculatorBrain - (void)setOperand:(double)anOperand { <code goes here> } - (double)performOperation:(NSString *)operation { <code goes here> return aDouble; } @end Wednesday, March 31, 2010
  • 26. Implementation File (private and public) Model #import “CalculatorBrain.h” @implementation CalculatorBrain No semicolon this time! - (void)setOperand:(double)anOperand { <code goes here> } - (double)performOperation:(NSString *)operation { <code goes here> return aDouble; } @end Wednesday, March 31, 2010
  • 27. Implementation File (private and public) Model #import “CalculatorBrain.h” @implementation CalculatorBrain - (void)setOperand:(double)anOperand { <code goes here> } - (double)performOperation:(NSString *)operation { [operation sendMessage:argument]; return aDouble; } @end Wednesday, March 31, 2010
  • 28. Implementation File (private and public) Model #import “CalculatorBrain.h” @implementation CalculatorBrain - (void)setOperand:(double)anOperand { <code goes here> } - (double)performOperation:(NSString *)operation { [operation sendMessage:argument]; return aDouble; } Square brackets mean “send a message.” @end Wednesday, March 31, 2010
  • 29. Implementation File (private and public) Model #import “CalculatorBrain.h” @implementation CalculatorBrain - (void)setOperand:(double)anOperand { <code goes here> } - (double)performOperation:(NSString *)operation { [operation sendMessage:argument]; return aDouble; } @end This is the object to send the message to (in this case, the NSString called “operation” that was passed as an argument to performOperation:). Wednesday, March 31, 2010
  • 30. Implementation File (private and public) Model #import “CalculatorBrain.h” @implementation CalculatorBrain - (void)setOperand:(double)anOperand { <code goes here> } - (double)performOperation:(NSString *)operation { [operation sendMessage:argument]; return aDouble; } This is the message to send. @end Wednesday, March 31, 2010
  • 31. Implementation File (private and public) Model #import “CalculatorBrain.h” @implementation CalculatorBrain - (void)setOperand:(double)anOperand { <code goes here> } - (double)performOperation:(NSString *)operation { [operation sendMessage:argument]; return aDouble; } And this is its one (in this case) argument. @end Wednesday, March 31, 2010
  • 32. Controller #import <UIKit/UIKit.h> @interface CalculatorViewController : UIViewController { CalculatorBrain * brain; IBOutlet UILabel * display; } - (IBAction)digitPressed:(UIButton *)sender; - (IBAction)operationPressed:(UIButton *)sender; @end Wednesday, March 31, 2010
  • 33. Controller Our Controller inherits from UIViewController. UIKit #import <UIKit/UIKit.h> supports MVC primarily through this class. @interface CalculatorViewController : UIViewController { CalculatorBrain * brain; IBOutlet UILabel * display; } - (IBAction)digitPressed:(UIButton *)sender; - (IBAction)operationPressed:(UIButton *)sender; @end Wednesday, March 31, 2010
  • 34. Controller #import <UIKit/UIKit.h> @interface CalculatorViewController : UIViewController { CalculatorBrain * brain; This is going to point to our CalculatorBrain Model IBOutlet UILabel * display; } - (IBAction)digitPressed:(UIButton *)sender; - (IBAction)operationPressed:(UIButton *)sender; @end Wednesday, March 31, 2010
  • 35. These hook up to our View Controller #import <UIKit/UIKit.h> @interface CalculatorViewController : UIViewController { CalculatorBrain * brain; IBOutlet UILabel * display; } - (IBAction)digitPressed:(UIButton *)sender; - (IBAction)operationPressed:(UIButton *)sender; @end Wednesday, March 31, 2010
  • 36. View Controller #import <UIKit/UIKit.h> @interface CalculatorViewController : UIViewController { Model CalculatorBrain * brain; IBOutlet UILabel * display; } - (IBAction)digitPressed:(UIButton *)sender; - (IBAction)operationPressed:(UIButton *)sender; @end Wednesday, March 31, 2010
  • 38. “File’s Owner” is our Controller CalculatorViewController.xib Wednesday, March 31, 2010
  • 42. Xcode A picture (or demo) is worth 1,000 words. Wednesday, March 31, 2010