Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

1 第一个OC控制台程序

1.1 问题

Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序。其运行于苹果公司的Mac操作系统下。

本案例要求使用集成开发工具Xcode编写OC的HelloWorld程序,在Xcode的控制台中,

1.2 方案

首先,启动集成开发工具Xcode。

然后,创建OC语言的工程。

最后,运行所创建的工程。

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:启动开发工具Xcode

在Dock中找到如下图圈出的图标,单击鼠标左键,界面如图-2所示:

图-2

如果在Dock中没有该图标,则在Finder中的“应用程序”文件夹中查找,界面如图-3所示:

图-3

如果在Finder的“应用程序”文件夹中也没有,则需要从App Store下载免费的Xcode。

步骤二:创建OC的工程文件

启动Xcode后会出现如下图的“Welcome to Xcode”窗口,界面如图-4所示:

图-4

如果上面的窗口未出现,则在桌面的最上边的菜单栏找到Window菜单,按下图选择“Welcome to Xcode”菜单项,同样可以调出上面的窗口,界面如图-5所示:

图-5

显示出Welcome to Xcode窗口后,选择鼠标左键单击Create a new Xcode project,出现Choose a template for your new project对话框窗口,左边选择OS X下的Application,右边选择Command Line Tool,界面如图-6所示:

图-6

单击Next按钮,出现下图。在图中:

1) Product Name为工程名,在本案例中工程名为Day01;

2) Organization Name为所在的公司名称,在本案例中为tarena;

3) Company Indentifier为公司标识,一般为所在公司官网网址的倒序,本案例中为com.tarena;

4) Type为要创建的工程类型,本案例中选择Foundation。

界面如图-7所示:

图-7

单击Next按钮,出现下图,在此对话框窗口中选择工程文件所在的位置,在本案例中,工程文件被放在“文稿文件夹”的“04_OBJECTIVE-C文件夹”中,界面如图-8所示:

图-8

单击Create按钮,OC工程文件就被创建出来了,刚刚创建的工程文件的界面如图-9所示:

图-9

在上图中,使用鼠标左键单击图中左边圈出的main.m,可以见到所创建Day01工程的主程序,界面如图-10所示:

图-10

步骤三:运行Day01的工程文件

创建完Day01的工程文件后,使用鼠标左键单击“运行”按钮运行程序,界面如图-11所示:

图-11

1.4 完整代码

本案例的完整代码如下所示:

  1. #import <Foundation/Foundation.h>
  2. int main(int argc, const char * argv[])
  3. {
  4. @autoreleasepool {
  5. // insert code here...
  6. NSLog(@"Hello, World!");
  7. }
  8. return 0;
  9. }

2 编写Point2类

2.1 问题

本案例需要创建一个Point2类,类中有横坐标x、纵坐标y两个属性,并且有一个能显示位置show方法。在主程序中创建两个Point2类的对象,设置其横纵坐标,并将它们显示出来。

2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义Point2类

在Day01工程中添加Point2类的方法是:在工程导航窗口中,用鼠标指向Day01文件夹,并单击鼠标右键,显示一个菜单,如图-12所示:

图-12

如图-12,选择“New File…”菜单项,打开新文件模板窗口。在该窗口中,选择OS X下的Cocoa,并在右侧选择“Objective-C class”,如图-13所示:

图-13

单击Next按钮,进入选择对话框,如图-14所示:

图-14

在图-14中,Class类名文本框中填入类名Point2;Subclass of父类名下拉框中选择NSObject。然后单击Next按钮,选择Point2类的文件存储地址,如图-15所示:

图-15

此时,一般直接按按钮Create即可。此时将返回工程窗口,在工程导航中,可以见到新生成的Point2类的两个文件,如图-16所示:

图-16

至此,Point2类创建完毕。

步骤二:在Point2类中添加属性

在Day01工程中找到Point2.h文件,在其中的Point2类中添加横坐标x和纵坐标y两个属性。

代码如下所示:

  1. @interface Point2 : NSObject
  2. {
  3. int x;
  4. int y;
  5. }
  6. @end

步骤三:在Point2类中添加方法

在Point2类中添加三个方法,它们是为横坐标x赋值的方法,为纵坐标赋值的方法和显示两坐标的方法。

首先,需要在类中声明,代码如下所示:

  1. @interface Point2 : NSObject
  2. {
  3. int x;
  4. int y;
  5. }
  6. -(void)setX:(int)x1;
  7. -(void)setY:(int)y1;
  8. -(void)show;
  9. @end

然后,在Day01工程中找到Point2.m文件中实现方法。

代码如下所示:

  1. #import "Point2.h"
  2. @implementation Point2
  3. -(void)setX:(int)x1
  4. {
  5. x = x1;
  6. }
  7. -(void)setY:(int)y1
  8. {
  9. y = y1;
  10. }
  11. -(void)show
  12. {
  13. NSLog(@"x=%d,y=%d", x, y);
  14. }
  15. @end

步骤四:在主程序中使用Point2类

首先在Day01工程中新添加Point2Main.m文件,用于存储主程序,在主程序中定义两个Point2类的对象,然后将两个对象的横坐标和纵坐标赋值,最后打印这两个对象。

  1. #import "Point2.h"
  2. int main(int argc, const char * argv[])
  3. {
  4. @autoreleasepool {
  5. // insert code here...
  6. Point2 *p = [[Point2 alloc] init];
  7. [p setX:10];
  8. [p setY:20];
  9. [p show];
  10. Point2 *p1 = [[Point2 alloc] init];
  11. [p1 setX:55];
  12. [p1 setY:77];
  13. [p1 show];
  14. }
  15. return 0;
  16. }

2.3 完整代码

本案例中,类Point2声明,即Point2.h文件,完整代码如下所示:

  1. @interface Point2 : NSObject
  2. {
  3. int x;
  4. int y;
  5. }
  6. -(void)setX:(int)x1;
  7. -(void)setY:(int)y1;
  8. -(void)show;
  9. @end

类Point2实现,即Point2.m文件,完整代码如下所示:

  1. @implementation Point2
  2. -(void)setX:(int)x1
  3. {
  4. x = x1;
  5. }
  6. -(void)setY:(int)y1
  7. {
  8. y = y1;
  9. }
  10. -(void)show
  11. {
  12. NSLog(@"x=%d,y=%d", x, y);
  13. }
  14. @end

主程序,即Point2Main.m,完整代码如下所示:

  1. int main(int argc, const char * argv[])
  2. {
  3. @autoreleasepool {
  4. // insert code here...
  5. Point2 *p = [[Point2 alloc] init];
  6. [p setX:10];
  7. [p setY:20];
  8. [p show];
  9. Point2 *p1 = [[Point2 alloc] init];
  10. [p1 setX:55];
  11. [p1 setY:77];
  12. [p1 show];
  13. }
  14. return 0;
  15. }

3 编写Student类

3.1 问题

定义一个Student类,在类中包含以下实例变量int age、char gender、double salary信息,定义一个方法printInfo输出所有实例变量的值,在主函数中对Student类的对象进行赋值并输出。

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义类Student

首先在Day01工程中添加Student.h文件,用于定义类Student。

代码如下所示:

  1. @interface Student : NSObject
  2. {
  3. }
  4. @end

步骤二:定义实例变量

在类Student的声明中添加以下实例变量。

变量age用于存储某学生的年龄。

变量gender用于存储某学生的性别。

变量salary用于存储某学生的津贴。

代码如下所示:

  1. @interface Student : NSObject
  2. {
  3. int age;
  4. char gender;
  5. double salary;
  6. }
  7. @end

步骤三:定义方法

首先,在类Student的声明中添加以下方法的声明。

代码如下所示:

  1. @interface Student : NSObject
  2. {
  3. int age;
  4. char gender;
  5. double salary;
  6. }
  7. -(void)setAge:(int)age1;
  8. -(void)setGender:(char)gender1;
  9. -(void)setSalary:(double)salary1;
  10. -(void)printInfo;
  11. @end

上述代码中,以下代码:

  1. -(void)setAge:(int)age1;

用于对实例变量age进行赋值。

上述代码中,以下代码:

  1. -(void)setGender:(char)gender1;

用于对实例变量gender进行赋值。

上述代码中,以下代码:

  1. -(void)setSalary:(double)salary1;

用于对实例变量salary进行赋值。

上述代码中,以下代码:

  1. -(void)printInfo;

用于将类中的三个实例变量的值输出。

然后,在类Student的实现部分,将类中声明的方法进行实现。类Student的实现部分存放于Day01工程新添加的Student.m文件中。

代码如下所示:

  1. #import "Student.h"
  2. @implementation Student
  3. -(void)setAge:(int)age1
  4. {
  5. age = age1;
  6. }
  7. -(void)setGender:(char)gender1
  8. {
  9. gender = gender1;
  10. }
  11. -(void)setSalary:(double)salary1
  12. {
  13. salary = salary1;
  14. }
  15. -(void)printInfo
  16. {
  17. NSLog(@"age=%d", age);
  18. NSLog(@"gender=%c", gender);
  19. NSLog(@"salary=%lf", salary);
  20. }
  21. @end

步骤四:在主程序中使用Student类

在Day01工程中新添加StudentMain.m文件,用于存储主程序。在该文件中定义Student类的对象,然后将对象的三个实例变量赋值,最后打印这个对象。

代码如下所示:

  1. int main(int argc, const char * argv[])
  2. {
  3. @autoreleasepool {
  4. // insert code here...
  5. Student *stu = [[Student alloc] init];
  6. [stu setAge:25];
  7. [stu setGender:‘M‘];
  8. [stu setSalary:5000];
  9. [stu printInfo];
  10. }
  11. return 0;
  12. }

3.3 完整代码

本案例中,类Student声明,即Student.h文件,完整代码如下所示:

  1. @interface Student : NSObject
  2. {
  3. int age;
  4. char gender;
  5. double salary;
  6. }
  7. -(void)setAge:(int)age1;
  8. -(void)setGender:(char)gender1;
  9. -(void)setSalary:(double)salary1;
  10. -(void)printInfo;
  11. @end

类Student实现,即Student.m文件,完整代码如下所示:

  1. #import "Student.h"
  2. @implementation Student
  3. -(void)setAge:(int)age1
  4. {
  5. age = age1;
  6. }
  7. -(void)setGender:(char)gender1
  8. {
  9. gender = gender1;
  10. }
  11. -(void)setSalary:(double)salary1
  12. {
  13. salary = salary1;
  14. }
  15. -(void)printInfo
  16. {
  17. NSLog(@"age=%d", age);
  18. NSLog(@"gender=%c", gender);
  19. NSLog(@"salary=%lf", salary);
  20. }
  21. @end

主程序,即StudentMain.m,完整代码如下所示:

  1. int main(int argc, const char * argv[])
  2. {
  3. @autoreleasepool {
  4. // insert code here...
  5. Student *stu = [[Student alloc] init];
  6. [stu setAge:25];
  7. [stu setGender:‘M‘];
  8. [stu setSalary:5000];
  9. [stu printInfo];
  10. }
  11. return 0;
  12. }

4 重构Student

4.1 问题

使用属性的概念重构Student类,在类中包含以下实例变量int age、char gender、double salary信息,定义一个方法printInfo输出所有实例变量的值,在主函数中对Student类的对象进行赋值并输出。

4.2 方案

属性的概念就是使用@property自动生成实例变量的setter函数和getter函数,使用属性概念可以使类的编写简化。另外,属性还允许在类外使用点运算符来直接访问实例变量,这样也使得对类的对象中实例变量的访问操作得到简化。

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义类Student

由于是对Student类的重构,所以在Day01工程中新添加Student1.h文件用于定义新的类Student。

代码如下所示:

  1. @interface Student : NSObject
  2. {
  3. }
  4. @end

步骤二:定义实例变量

在类Student的声明中添加以下实例变量。

变量age用于存储某学生的年龄。

变量gender用于存储某学生的性别。

变量salary用于存储某学生的津贴。

代码如下所示:

  1. @interface Student : NSObject
  2. {
  3. int age;
  4. char gender;
  5. double salary;
  6. }
  7. @end

步骤三:定义属性和方法

首先,在类Student的声明中添加以下属性和方法的声明。

代码如下所示:

  1. @interface Student : NSObject
  2. {
  3. int age;
  4. char gender;
  5. double salary;
  6. }
  7. @property int age;
  8. @property char gender;
  9. @property double salary;
  10. -(void)printInfo;
  11. @end

上述代码中,以下代码:

  1. @property int age;
  2. @property char gender;
  3. @property double salary;

是对类中三个实例变量分别添加的三个属性。以上三行代码将在编译时自动转换成三个setter函数和三个getter函数的声明。

上述代码中,以下代码:

  1. -(void)printInfo;

用于将类中的三个实例变量的值输出。

然后,在类Student的实现部分,将类中声明的属性和方法进行实现。类Student的实现部分存放于Day01工程新添加的Student1.m文件中。

代码如下所示:

  1. #import "Student1.h"
  2. @implementation Student
  3. @synthesize age, gender, salary;
  4. -(void)printInfo
  5. {
  6. NSLog(@"age=%d", age);
  7. NSLog(@"gender=%c", gender);
  8. NSLog(@"salary=%lf", salary);
  9. }
  10. @end

上述代码中,以下代码:

  1. @synthesize age, gender, salary;

用于将类中的三个属性进行实现。将在编译时自动转换成三个setter函数和三个getter函数的函数体。

步骤四:在主程序中使用Student类

在Day01工程中新添加StudentMain1.m文件,用于存储主程序。在该文件中定义Student类的对象,然后将对象的三个实例变量赋值,最后打印这个对象。

代码如下所示:

  1. #import "Student1.h"
  2. int main(int argc, const char * argv[])
  3. {
  4. @autoreleasepool {
  5. // insert code here...
  6. Student *stu = [[Student alloc] init];
  7. stu.Age = 25;
  8. stu.Gender = ‘M‘;
  9. stu.Salary = 5000;
  10. [stu printInfo];
  11. }
  12. return 0;
  13. }

上述代码中,以下代码:

  1. stu.Age = 25;

是使用属性的点运算符在类外访问类的实例变量,该语句在编译时会被自动转换成以下代码:

  1. [stu setAge:25];

4.4 完整代码

本案例中,类Student声明,即Student1.h文件,完整代码如下所示:

  1. @interface Student : NSObject
  2. {
  3. int age;
  4. char gender;
  5. double salary;
  6. }
  7. @property int age;
  8. @property char gender;
  9. @property double salary;
  10. -(void)printInfo;
  11. @end

类Student实现,即Student.m文件,完整代码如下所示:

  1. #import "Student1.h"
  2. @implementation Student
  3. @synthesize age, gender, salary;
  4. -(void)printInfo
  5. {
  6. NSLog(@"age=%d", age);
  7. NSLog(@"gender=%c", gender);
  8. NSLog(@"salary=%lf", salary);
  9. }
  10. @end

主程序,即StudentMain.m,完整代码如下所示:

  1. #import "Student1.h"
  2. int main(int argc, const char * argv[])
  3. {
  4. @autoreleasepool {
  5. // insert code here...
  6. Student *stu = [[Student alloc] init];
  7. stu.Age = 25;
  8. stu.Gender = ‘M‘;
  9. stu.Salary = 5000;
  10. [stu printInfo];
  11. }
  12. return 0;
  13. }
时间: 2024-10-11 22:21:12

Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量的相关文章

简单介绍Javascript匿名函数和面向对象编程

忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方式: function functionVal(variable){ return 3*variable; } 2.使用Function构造函数,将函数的参数和函数体内容作为字符串参数[不建议使用]: var objFunction=new Function('variable','return 3

(转)Objective-C语言--属性和实例变量

本文转自http://blog.csdn.net/addychen/article/details/39525681 使用Objective-C一段时间了,一直没有弄清楚在Objective-C中属性和实例变量,在这里总结一下,Objective-C中先有的实例变量,需要给外部类使用的用@public声明,内部自己使用的用@private或@protect声明.Objective-C添加了属性后,我觉得Apple的考虑应该是,属性用于对外而实力变量主要用于程序内部使用.这样有利于代码的分离,由于

R语言基于S4的面向对象编程

前言 本文接上一篇文章 R语言基于S3的面向对象编程,本文继续介绍R语言基于S4的面向对象编程. S4对象系统具有明显的结构化特征,更适合面向对象的程序设计.Bioconductor社区,以S4对象系统做为基础架构,只接受符合S4定义的R包. 目录 S4对象介绍 创建S4对象 访问对象的属性 S4的泛型函数 查看S4对象的函数 S4对象的使用 1 S4对象介绍 S4对象系统是一种标准的R语言面向对象实现方式,S4对象有明确的类定义,参数定义,参数检查,继承关系,实例化等的面向对象系统的特征. 2

Go语言学习(十一)面向对象编程-类型系统

1.类型系统介绍 对于面向对象编程的支持Go 语言设计得非常简洁而优雅.简洁之处在于,Go语言并没有沿 袭传统面向对象编程中的诸多概念,比如继承.虚函数.构造函数和析构函数.隐藏的 this 指 针等. 一个典型的类型系统通常包含如下基本内容: 基础类型,如 byte . int . bool . float 等: 复合类型,如数组.结构体.指针等: 可以指向任意对象的类型( Any 类型): 面向对象,即所有具备面向对象特征(比如成员方法)的类型: 接口. 因为Java语言自诞生以来被称为最纯

iOS修炼之道:objective-c 类、对象和方法 1

1.类,对象和方法的概念 类是对象的独特表现,每个对象包含各自的私有信息,方法是改变和提供访问的这些数据的手段. 因此,objective-c 采用特定的语法对类和实例应用方法: [classOrInstance method]; 或者理解为消息的传递和接受 [receiver message]; 实例如下: 1 myCar = [[Car new] init]; 2 [myCar dive]; 详细描述关于一个处理分数Objective-c类 代码如下: 1 // 2 // main.m 3

【转载】用平常语言介绍神经网络

http://wenku.baidu.com/link?url=23jM13V3Qe9Zx84FuEMebOMbTSk4i0Oaa5YPAVL1dfbSFC4G20GYDkUbbRvcJILgTGliXHPQgZqx5ToZscEOt0Iwp4eT71mRZhZ64USYk63 用平常语言介绍神经网络 (Neural Networks in Plain English) 因为我们没有能够很好了解大脑,我们经常试图用最新的技术作为一种模型来解释它.在我童年的时候,我们都坚信大脑是一部电话 交换机

Python语言介绍

本文章可以让我们快速了解 python 语言的历史,及以后发展状态,职业方向. 文章收录网上内容: http://www.cnblogs.com/lidong94/p/5478032.html (Python介绍) http://3060674.blog.51cto.com/3050674/1794776(Python职业分析与技能图谱) http://www.cnblogs.com/vamei/archive/2013/02/06/2892628.html (Python简史) http://

Java众神之路(1)-语言介绍

Java语言介绍 1.Java的历史 我个人认为,学习一种技术,不止要关注技术本身,也应该去了解一下它的发展史,这一方面是对技术本身的尊重,另一方面也是希望能够通过该技术的发展历史推测出其未来可能的发展趋势,从而能够处处快人一步. 具体信息参见:http://blog.csdn.net/djsl6071/article/details/1681567 2.Java的特性 Java的特性有简单性.面向对象.分布式.解释型.可靠.安全.平台无关.可移植.高性能.多线程.动态性等. 下面我们将重点介绍

【转】Velocity模板(VM)语言介绍

http://www.blogjava.net/caizh2009/archive/2010/08/20/329495.html Velocity是什么? Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人 员可以只关注页面的显