SlideShare a Scribd company logo
1 of 42
Download to read offline
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

More Related Content

Viewers also liked

Viewers also liked (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
 

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

Model-Driven Software Development - Introduction & Overview
Model-Driven Software Development - Introduction & OverviewModel-Driven Software Development - Introduction & Overview
Model-Driven Software Development - Introduction & OverviewEelco Visser
 
Ios fundamentals with ObjectiveC
Ios fundamentals with ObjectiveCIos fundamentals with ObjectiveC
Ios fundamentals with ObjectiveCMadusha Perera
 
MongoDB Java Development - MongoBoston 2010
MongoDB Java Development - MongoBoston 2010MongoDB Java Development - MongoBoston 2010
MongoDB Java Development - MongoBoston 2010Eliot Horowitz
 
Creating Clean Code with AOP (T3CON10)
Creating Clean Code with AOP (T3CON10)Creating Clean Code with AOP (T3CON10)
Creating Clean Code with AOP (T3CON10)Robert Lemke
 
SQLite Techniques
SQLite TechniquesSQLite Techniques
SQLite Techniquesjoaopmaia
 
Introducing protobuf in Swift
Introducing protobuf in SwiftIntroducing protobuf in Swift
Introducing protobuf in SwiftYusuke Kita
 
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)Altece
 
Data Loading for Ext GWT
Data Loading for Ext GWTData Loading for Ext GWT
Data Loading for Ext GWTSencha
 
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 2017Codemotion
 
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 meetupBrian Cardiff
 
Python programming lanuguage
Python programming lanuguagePython programming lanuguage
Python programming lanuguageBurhan Ahmed
 
MDSD for iPhone and Android
MDSD for iPhone and AndroidMDSD for iPhone and Android
MDSD for iPhone and AndroidHeiko Behrens
 
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)Ovidiu Farauanu
 

Similar to 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)
 

Recently uploaded

Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeThiyagu K
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...Poonam Aher Patil
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfJayanti Pande
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsTechSoup
 
Making and Justifying Mathematical Decisions.pdf
Making and Justifying Mathematical Decisions.pdfMaking and Justifying Mathematical Decisions.pdf
Making and Justifying Mathematical Decisions.pdfChris Hunter
 
Energy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural Resources
Energy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural ResourcesEnergy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural Resources
Energy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural ResourcesShubhangi Sonawane
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxVishalSingh1417
 
Food Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-II
Food Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-IIFood Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-II
Food Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-IIShubhangi Sonawane
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxheathfieldcps1
 
ComPTIA Overview | Comptia Security+ Book SY0-701
ComPTIA Overview | Comptia Security+ Book SY0-701ComPTIA Overview | Comptia Security+ Book SY0-701
ComPTIA Overview | Comptia Security+ Book SY0-701bronxfugly43
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxVishalSingh1417
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...Nguyen Thanh Tu Collection
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphThiyagu K
 
Unit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptxUnit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptxVishalSingh1417
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104misteraugie
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxRamakrishna Reddy Bijjam
 
Seal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxSeal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxnegromaestrong
 

Recently uploaded (20)

Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
Making and Justifying Mathematical Decisions.pdf
Making and Justifying Mathematical Decisions.pdfMaking and Justifying Mathematical Decisions.pdf
Making and Justifying Mathematical Decisions.pdf
 
Energy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural Resources
Energy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural ResourcesEnergy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural Resources
Energy Resources. ( B. Pharmacy, 1st Year, Sem-II) Natural Resources
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
Food Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-II
Food Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-IIFood Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-II
Food Chain and Food Web (Ecosystem) EVS, B. Pharmacy 1st Year, Sem-II
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
 
ComPTIA Overview | Comptia Security+ Book SY0-701
ComPTIA Overview | Comptia Security+ Book SY0-701ComPTIA Overview | Comptia Security+ Book SY0-701
ComPTIA Overview | Comptia Security+ Book SY0-701
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot Graph
 
Unit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptxUnit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptx
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docx
 
Seal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxSeal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptx
 

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