面向对象语法1—基础



一.面向对象和面向过程的区别


1.以用电脑听歌为例子

 1>面向过程:打开电脑-->播放在电脑中得歌曲-->关闭电脑睡觉

 2>而面向对象就是找到电脑这个对象,电脑对象有开机,播放歌曲,关闭电脑这3个功能。

2.区别分析:

面向过程关注的解决问题需要哪些步骤,面向对象关注的是解决问题需要哪些对象。两种思想都能达到解决问题的目的,但是解决思路不一样。

3.现实生活中的面向对象的例子

 1> 想打电话\发短信去找手机这个对象,不用分析电话要怎样才能拨通

 2> 去饭店吃饭找服务员这个对象,不用分析怎么到厨房炒菜

 3> 汽车坏了找汽车维修工这个对象,不用分析修车的步骤

 4> 境界:万物皆对象(什么东西都可以当做对象,只要你认为他是)

4.常用术语

 1> 面向过程 ProcedureOriented

 2> 面向对象 ObjectOriented,简称OO

 3> 面向对象编程 ObjectOriented Programming,简称OOP


二.类和对象的关系


1.车子是对象,有自己的属性值,是现实存在的,是类的实例存在物体。

2.车子对象的类是什么,这个类是抽象的,是车子创造的整个过程的所有东西,经历这个过程,车子就制造出来。


三.如何设计类

1.类的设计,只关心3样东西:

 1>事物名称(类名):这个类叫什么名字

 2>属性:这个类包含哪些属性,这些属性值可以来表示对象之间的区别

 3>行为(功能):这个类包含哪几样功能,对象可以拥有这个功能

2.一般而言名词基本都可以当做类。因为名词基本都满足上面的3样东西。

3.拥有相同(或者类似)属性和行为的对象都可以抽像出一个类

4.哪个对象最清楚这个行为,就把这个行为写到哪个对象中去。打开电脑(开机)这个行为应该是属于电脑的。人开

机只是人执行电脑这个对象的开机方法而已。


四.定义OC类 


OC类的定义需要二步:类的声明,类的定义

1.类的声明

 1> 类名和属性命名规则:标示符规则

 2>类名的命名规范:有意义(看到这个类名就想到这个类是干嘛的),多个英文单词组合用驼峰标识,首字母大写,不能有下划线。

//包含头文件
#import  <Foundation/Foundation.h>

//类的声明
@interface Person : NSObject // 声明一个叫Person的类

{
      int age; // 这个人拥有年龄属性

}

- (void)walk; // 这个人拥有走路这个方法

@end // 声明的结束标准,必须写

 3>成员变量

@interface 的大括号里面放得是成员变量,即这个类拥有的属性,里面的成员变量默认值为0。

 4>@public说明这个类里面的成名变量可以被外界访问

 5>NSObject的目的是让Person这个类有创造对象的能力。


2.类的实现

//类的实现
@implementation Person

//走路这个方法的具体实现
- (void) walk
{
     NSLog(@"人走起来了");
}
@end // 实现的结束标志

3.常见错误

 1> 只有类的声明,没有类的实现

 2> 漏了@end

 3>@interface和@implementation嵌套

 4> 两个类的声明嵌套

 5>成员变量没有写在括号里面

 6>方法的声明写在了大括号里面,方法的声明要写在大括号外


4.语法细节

 1>成员变量不能在{}中进行初始化、不能被直接拿出去访问(只能通过指针访问p->age)。

 2>方法不能当做函数一样调用(必须用类或者对象调用)。

 3> 成员变量\方法不能用static等关键字修饰,别跟C语言混在一起。

 4> 类的实现可用写在main函数的后面,主要在声明后面就可以(和函数的声明类似)。


五.创建对象


Person *p = [Person new];

Person *p:定义一个这个类(Person)类型的指针变量 

[Person new]:使用类方法new创造一个类对象,让赋值给Person类型的指针变量 。

注意:

1.[Person new]每次都会创建一个新对象,这个类方法的返回对象的地址,所以用一个类类型的指针变量存放对象的地址。

2.直接访问成员变量用->,例如:p->age = 25;

3.面向对象封装的好处

 1>更加接近人类的思考方式

 2>只需要关注对象,不需要关注步骤


六.OC方法的注意


1.方法(行为)包括:方法名、参数、返回值(声明、实现)

2.OC对象的方法,必须以减号 -开头

3.OC方法中任何数据类型都必须用小括号()扩住

4.OC中,想执行一些行为,就写上一个中括号[行为执行者行为名称]。

5.带参数的方法中,冒号也是方法名的一部分。

6.同一个类中不允许两个对象方法同名

7.对象方法必须由对象来调用

  

七.OC方法和函数的区别


1.OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。函数的声明和实现可以写在任何位置(除了@interface@end之间)。

2.C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有。方法则属于类或者对象。

3.函数内部不能直接通过成员变量名访问某个对象的成员变量

4.对象方法是以-开头的,


八.其它


1.在使用类创建对象之前,会将类加载进内存,为其分配存储空间,类里面存放这方法列表(类方法和对象方法)

2.方法中可以直接用变量名访问成员变量,哪个对象调用这个方法,就访问这个对象里的成员变量

3.创建完对象,会给对象分配一个存储空间,对象里面有属于自己的成员变量,但是方法是存在在类里面,对象通过isa指针去类里面找这个方法,然后调用方法。

4.OC对象不能自动回收,函数调用完毕后,其它局部变量,会被自己回收,但是对象不会自动回收。

5.类里面的成员变量,必须创建好对象才能使用。成员变量是为对象而存在的。

6.类可以只有方法,这个类就叫做工具类。

7.匿名对象:[Person new]创建新对象后,不赋值给指针变量,每次[Person new]都会创建一个新对象。开发中不要使用匿名对象,这样会导致内存泄露。

8.OC方法中一个参数对应一个冒号,这个冒号也是方法名的一部分



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值