1. Object-Oriented Programming Language
Chapter 7 : More on Classes
Atit Patumvan
Faculty of Management and Information Sciences
Naresuan University
วันจันทร์ท่ี 26 มีนาคม 12
2. 2
Separate Interface and Implementation files
Single Source File Separate Source File
SourceCode_A.m SourceCode_A.h
Interface Code Interface Code
SourceCode_A.m
Implementation Code
Implementation Code
Program Code
SourceCode_B.m
Program Code
Atit Patumvan, Faculty of Management and Information Sciences, Naresuan University Object-Oriented Programming Language
วันจันทร์ท่ี 26 มีนาคม 12
3. 3
Separate Interface and Implementation files
Fraction.h
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
:
@end
Fraction.m
#import "Fraction.h"
@implementation Fraction
:
@end
main.m
#import <Foundation/Foundation.h>
#import "Fraction.h"
int main (int argc, const char * argv[]){ ...
Atit Patumvan, Faculty of Management and Information Sciences, Naresuan University Object-Oriented Programming Language
วันจันทร์ท่ี 26 มีนาคม 12
4. 4
Separate Interface and Implementation Files
Program 7.1 main.m
01: #import <Foundation/Foundation.h>
02: #import "Fraction.h"
03:
04: int main (int argc, char * argv[])
05: {
06:! NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
07:! Fraction * myFraction = [[Fraction alloc] init];
08:
09:! [myFraction setNumerator: 1];
10:! [myFraction setDenominator: 3];
11:
12:! // display the fraction
13:
14:! NSLog (@"The value of myFraction is:");
15:! [myFraction print];
16:! [myFraction release];
17:
18:! [pool drain];
19:! return 0;
20: }
Atit Patumvan, Faculty of Management and Information Sciences, Naresuan University Object-Oriented Programming Language
วันจันทร์ท่ี 26 มีนาคม 12
5. 5
Separate Interface and Implementation Files
Program 7.1 Fraction.h
01: #import <Foundation/Foundation.h>
02:
03: // The Fraction class
04:
05: @interface Fraction : NSObject
06: {
07:! int ! numerator;
08:! int ! denominator;
09: }
10:
11: -(void) print;
12: -(void) setNumerator: (int) n;
13: -(void) setDenominator: (int) d;
14: -(int)!numerator;
15: -(int)!denominator;
16: -(double) convertToNum;
17:
18: @end
Atit Patumvan, Faculty of Management and Information Sciences, Naresuan University Object-Oriented Programming Language
วันจันทร์ท่ี 26 มีนาคม 12
7. 7
Compiling Program from the Command line
gcc -framwork Foundation Fraction.m main.m -o main
Using GNUMakefile
01: include $(GNUSTEP_MAKEFILES)/common.make
02:
03: TOOL_NAME = main
04: main_HEADERS = Fraction.h
05: main_OBJC_FILES = main.m Fraction.m
06: main_RESOURCE_FILES =
07:
08: include $(GNUSTEP_MAKEFILES)/tool.make
Atit Patumvan, Faculty of Management and Information Sciences, Naresuan University Object-Oriented Programming Language
วันจันทร์ท่ี 26 มีนาคม 12
16. 16
Local Variables
Program 7.4 Fraction.m
:
21: -(void) reduce
22: {
23:! int u = numerator;
24:! int v = denominator;
25:! int temp;
26:!
27:! while ( v != 0 ){
28:! ! temp = u % v;
29:! ! u = v;
30:! ! v = temp;
31:! }
32:! numerator /= u;
33:! denominator /= u;
34: }
:
Atit Patumvan, Faculty of Management and Information Sciences, Naresuan University Object-Oriented Programming Language
วันจันทร์ท่ี 26 มีนาคม 12
22. 22
Allocating and Return Objects from Methods
Program 7.6 main.m
01: #import <Foundation/Foundation.h>
02: #import "Fraction.h"
03:
04: int main (int argc, char * argv[])
05: {
06:! NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
07:! Fraction * aFraction = [[Fraction alloc] init];
08:! Fraction * sum = [[Fraction alloc] init], * sum2;
09:
10:! int i, n, pow2;
11:
12:! [sum setTo: 0 over: 1];
13:
14:! NSLog(@"Enter you value for n:" );
15:! scanf("%i", &n);
16:!
17:! pow2 = 2;
18:! for(i = 1; i<=n; ++i){
19:! ! [aFraction setTo: 1 over: pow2];
20:! ! sum2 = [sum add: aFraction];
21:! ! [sum release];
22:! ! sum = sum2;
23:! ! pow2 *= 2;
24:! }
25:!
Atit Patumvan, Faculty of Management and Information Sciences, Naresuan University Object-Oriented Programming Language
วันจันทร์ท่ี 26 มีนาคม 12
23. 23
Allocating and Return Objects from Methods
Program 7.6 main.m
26:! NSLog(@"After %i iterations, the sum is %g", n , [sum convertToNum]);
27:
28:! [aFraction release];
29:! [sum release];
30:!
31:! [pool drain];
32:! return 0;
33: }
2012-03-26 11:07:12.238 main[3496] Enter you value for n:
5
2012-03-26 11:07:14.261 main[3496] After 5 iterations, the sum is 0.96875
2012-03-26 11:14:24.890 main[3672] Enter you value for n:
10
2012-03-26 11:14:35.645 main[3672] After 10 iterations, the sum is 0.999023
2012-03-26 11:14:39.991 main[2184] Enter you value for n:
15
2012-03-26 11:14:41.604 main[2184] After 15 iterations, the sum is 0.999969
Atit Patumvan, Faculty of Management and Information Sciences, Naresuan University Object-Oriented Programming Language
วันจันทร์ท่ี 26 มีนาคม 12