(Object-C)学习笔记(二) --OC语言面向对象和基本概念
现在的高级编程语言大部分都是面向对象编程的。
那么什么是面向对象呢?我用我的见解举个例子:假设你正在用word编辑这么两件事 1.一个人走到桌子前面(1)拿起可乐(2)打开盖子(3)喝光(4)放下瓶子(5)。 2.一个人走到桌子前面(1)拿起点心(2)吃了(3)。
那么如果是用面向过程的方式来编程,第一件事是一个大括号,里面写着这5步。第二件事是一个大括号,里面写着3步。写这么两件事全部手写,不允许黏贴复制,一共8步。
如果使用面向对象的方式来编程,把这个过程分为了动作和物品,把这些步骤写出来但是放到一边,需要什么就复制粘贴什么,相同的动作或者物品不需要写两遍。上面两件事一共写7步就行,当然如果你第二件事喝雪碧的话,你只需要5步+一瓶雪碧就行了。
1.面向过程
数据结构+算法
2.面向对象
属性+行为
为什么使用面向对象的编程思想
使用面向对象的编程思想,可以大大降低开发周期和成本,提高开发效率,提升代码的复用性,降低开发难度,提高了代码的可读性和可维护性。
什么是类
面向对象的重要概念。类是一个抽象的概念,我们常说的一类人,就是这个意思。比如说学生,工人这都是代表的一大部分人。具体到OC语言中,类(class)是一对相关联的.m .h文件(名字相同)。这一对就是一个类。
什么是对象
对象就是一个实例化的类,比如学生当中有一个张三,跟抽象化的学生不一样,你可以准确知道张三的ID、姓名、身高、体重等。
变量
在.h里面声明的叫做公共变量,在.m里面声明的叫做私有变量。
@public 可以在任意位置访问
@package 可以在包内部访问
@protect 可以在本类及子类中访问
@practice 只能在本类在访问
成员变量和实例变量
在类中声明的变量就叫成员变量,当类被实例化成一个实例时,这个实例里的变量就叫实例变量。
方法
方法是类的一部分,代表类可以干什么,类似于c的函数。
方法定义:-(void)show; 多参方法:-(void)show:(NSString)name andAge:(int)age;
括号里面的void是返回值 返回什么类型的 写什么类型
实例方法与类方法
-开头的是实例方法,一般只能由实例对象调用。+开头的是类方法,由类名直接调用。
什么是属性
属性有三部分组成,分别是setter和getter方法,以及一个存放值的实例变量。在如今的iOS版本中,setter和getter是隐藏的,我们定义属性时 只在.h或.m中
@property NSString* name; 定义就行.
示例代码:
1 #import <Foundation/Foundation.h> 2 3 @interface TRStudent : NSObject 4 @property NSString* name; 5 @property int age; 6 @property int ID; 7 @property NSString* address; 8 -(id)initWithName:(NSString*)name andAge:(int)age andID:(int)ID andAddress:(NSString*)address; 9 -(void)show; 10 @end
1 @implementation TRStudent 2 -(id)init 3 { 4 if (self=[super init]) { 5 self.name=@"liu"; 6 self.age=45; 7 self.ID=123456; 8 self.address=@"趵突泉"; 9 } 10 return self; 11 } 12 -(id)initWithName:(NSString *)name andAge:(int)age andID:(int)ID andAddress:(NSString *)address 13 { 14 if (self=[super init]) { 15 self.name=name; 16 self.age=age; 17 self.ID=ID; 18 self.address=address; 19 } 20 return self; 21 } 22 -(void)show 23 { 24 NSLog(@"%@ %d %d %@",self.name,self.age,self.ID,self.address); 25 } 26 @end
1 int main(int argc, const char * argv[]) { 2 @autoreleasepool { 3 TRStudent *trs=[[TRStudent alloc]init]; 4 [trs show]; 5 TRStudent *trs1=[[TRStudent alloc]initWithName:@"wang" andAge:15 andID:1234 andAddress:@"红叶谷"]; 6 [trs1 show]; 7 }//cocoa .h .m 分开放的 8 return 0; 9 }