iOSDay10OC类和对象

本次是OC的第一节课,主要是学习和理解类与对象

1、面向对象

 1> OOP(Object Oriented Programming)面向对象编程。

 面向对象以事物为中心,完成某件事情都需要哪些事物来参与,参与该事件的事物都有哪些功能,完成该事件需要这些事物相互协作共同完成,并且完成该事件只是所有事物功能中其中的?个?功能。

 2> 面向对象与面向过程的区别

 3> 面向对象优点

  面向对象具有良好的可扩展性和重用性。

  面向对象可以降低我们代码的耦合度,提高代码的可移植性。

  面向对象接近于日常生活和自然的思考方式,可以提高我们软件开发的效率和质量

 4> 面向对象编程

  面向对象编程的核心是转变考虑问题的方式。当我们看到一个问题的时候,我们不需要再考虑完成该事件需要怎样的步骤,而是考虑完成该事件都需要哪些对象(事物)参与,每一种事物都有哪些特征和行为。完成相应的事件需要不同的事物根据自身的行为,协调完成该事件。

2、OC概述

 1> OC语言的特点

  C语言的超集,允许在OC中使用C语言代码,编译器兼容C语言程序

  具备完善的面向对象特性:封装、继承、多态。

  包含一个运行时系统。

  类库丰富。

 2>OC与Swift

  Objective-C和Swift虽然语法上差异很大,但是背后的思想以及所依托的类库都是相同的。

3、类和对象的概念和区别

 1> 类:具有相同特征和行为的事物的抽象

 2> 对象:类的实例,万事万物皆是对象

4、类和对象的定义

 1> 类的定义

  面向对象的核心思想是类和对象。

  OC中类的定义分为两个部分:接口部分和实现部分。

  接口部分:对外声明类的特征和行为。(.h文件中)

  实现部分:行为的具体实现。(.m文件)

 2> 接口部分

 1 #import <Foundation/Foundation.h>
 2
 3 @interface Person : NSObject
 4 {
 5     // 声明实例变量
 6     NSString *_name;    // 姓名
 7     int _age;     // 年龄
 8     NSString *_sex;     // 性别
 9     double _height;     // 身高
10     NSString *_hobby;   // 爱好
11 }
12
13 // 吃饭
14 - (void)eat;
15
16 // 睡觉
17 - (void)sleep;
18
19 // 学习
20 + (void)study;
21
22 @end

   @interface和@end成对出现,表示类的接口部分(声明部分)

  用来声明类的实例变量(特征)和方法(行为)

  Person表示类名

  : 表示继承关系 : 后面的类名表示父类名

  NSObject 基类

  ① 实例变量

   代码5-10行,声明实例变量必须在大括号{...}中

   OC中的类型,声明实例变量的时候后面加 *

   C语言中的基本数据类型,类型后面不加 *

   实例变量的命名规则:以下划线 ‘_‘ 开头(书写规范), 首字母小写,遵循驼峰命名法

  ② 定义方法

   OC中的方法分为两类

    第一种:‘+‘ 号方法(类方法),由类名调用

    第二种:‘-‘ 号方法(对象方法或实例方法),由对象调用

 3> 实现部分

 1 #import "Person.h"
 2
 3 @implementation Person
 4
 5 // 吃饭
 6 - (void)eat {
 7     NSLog(@"吃");
 8 }
 9
10 // 睡觉
11 - (void)sleep {
12     NSLog(@"睡");
13 }
14
15 // 学习
16 + (void)study {
17     NSLog(@"好好学习,天天向上");
18 }
19 @end

  @implementatiom和@end成对出现,类的实现部分  

  实现Person类中定义的方法

  Person 表示类名

 4> 对象的创建

  类是一个抽象的概念,在实际开发中程序的运行时通过对象间的相互协作来完成

  对象是类的实例,通过类来创建对象

 1 int main(int argc, const char * argv[]) {
 2     @autoreleasepool {
 3         // 第一种
 4         // 申请存储空间
 5         Person *p1 = [Person alloc];
 6         // 初始化p1对象
 7         p1 = [p1 init];
 8
 9         // 第二种(常用)
10         // 消息嵌套机制
11         Person *p2 = [[Person alloc] init]; // alloc 申请存储空间,init 初始化对象
12
13         // 第三种
14         // new 等同于 alloc 和 init
15         Person *p3 = [Person new];
16
17         // OC中使用 [] 给方法发送消息
18         [p2 eat];       // 使用对象名调用对象方法
19         [p2 sleep];
20         [Person study]; // 使用类名调用类方法
21     }
22     return 0;
23 }

  创建对象

   ① 定义类

   ② 开辟存储空间

   ③ 初始化

  上面的代码中有三种方式,一般在工程中使用第二种

  开辟空间

   + (instancetype)alloc;

   ‘+‘ 表示方法是类方法,只能由类调用。instancetype返回值类型,可以用id(任意对象类型)替代

  初始化

   - (instancetype)init;

   ‘-‘ 表示对象方法,对象调用。instancetype返回值类型,可以用id(任意对象类型)替代

 5> 区别id和instancetype

  ① id和instancetype都可以作为方法返回值类型,都表示任意类型的对象

  ② instancetype可以返回和方法所在类相同的对象,id只能返回未知的类型

③ instancetype只能作为方法的返回值或参数类型,id不仅可以作为返回值类型,还可以用来作为定义变量的类型

④ 在init方法中,id和instancetype作为返回值类型是没有区别的

5、实例变量的可见度

 实例变量可见度分别是:@public@protected@private 

 外界想要访问对象实例变量,实例变量需要通过@public修饰。

 实例变量没有指定可见度的情况下,默认是@protected

 三种可见度的区别

5、方法

 1> 方法分类

 方法分为对象方法和类方法

  对象方法 以减号 - 开头, 只能由对象调用,对象方法中能访问成员变量(实例变量)

  类方法 以加号 + 开头, 只能由类(名)来调用, 类方法中不能访问成员变量(实例变量)

 2> 方法名

 1 // _isMarried的getter方法
 2 // 方法名:isMarried
 3 - (BOOL)isMarried;
 4 // _isMarried的setter方法
 5 // 一个参数方法名setIsMArried:
 6 - (void)setIsMarried:(BOOL)isMarried;
 7 // 多个参数方法名:setHoddy: weight: address: isMarried:
 8 - (void)setHoddy:(NSString *)hoddy
 9           weight:(double)weight
10          address:(NSString *)address
11        isMarried:(BOOL)isMarried;

方法名的确定请参考以上代码

6、setter和getter方法

 实例变量如果是受保护类型的,外界无法直接访问,外界如果要访问实例变量,需要本类提供方法,外界访问的话直接调用相应的方法即可  

 1> 外界操作实例变量通常对实例变量赋值和取值操作

  setter方法:本类提供的用来给实例变量赋值的方法

  getter方法:本类提供的用来给实例变量取值的方法

 2> 方法命名

  setter方法:以set开头,后面跟上实例变量名(没有下划线)

  getter方法:实例变量名去掉下划线 _

以下是一个较完整的类定义的代码

Goddess.h

 1 #import <Foundation/Foundation.h>
 2
 3 @interface Goddess : NSObject
 4 {
 5     // 声明实例变量
 6
 7     // 实例变量没有指定可见度的情况下,默认是@protected
 8     NSString *_speciality;  // 特长
 9
10     @public // 公共的
11     NSString *_name;// 姓名
12     int _age;       // 年龄
13
14     @protected // 受保护的 外界无法访问,可以被子类继承
15     NSString *_hoddy;   // 爱好
16     double _weight;     // 体重
17
18     @private // 私有的 外界无法访问,不可以被子类继承
19     NSString *_address; // 地址
20     BOOL _isMarried;    // 是否已婚
21 }
22 // _hoddy的setter方法
23 - (void)setHoddy:(NSString *)hoddy;
24
25 // _hoddy的getter方法
26 - (NSString *)hoddy;
27
28 // _weight的setter方法
29 - (void)setWeight:(double)weight;
30
31 // _weight的getter方法
32 - (double)weight;
33
34 // _address的setter方法
35 - (void)setAddress:(NSString *)address;
36
37 // _address的getter方法
38 - (NSString *)address;
39
40 // _isMarried的setter方法
41 - (void)setIsMarried:(BOOL)isMarried;
42
43 // _isMarried的getter方法
44 - (BOOL)isMarried;
45
46 // 定义多参的方法
47 // 方法名:setHoddy: weight: address: isMarried:
48 - (void)setHoddy:(NSString *)hoddy
49           weight:(double)weight
50          address:(NSString *)address
51        isMarried:(BOOL)isMarried;
52
53 @end

Goddess.m

 1 #import "Goddess.h"
 2
 3 @implementation Goddess
 4
 5 // _hoddy的setter方法
 6 - (void)setHoddy:(NSString *)hoddy {
 7     _hoddy = hoddy;
 8 }
 9
10 // _hoddy的getter方法
11 - (NSString *)hoddy {
12     return _hoddy;
13 }
14
15 // _weight的setter方法
16 - (void)setWeight:(double)weight {
17     _weight = weight;
18 }
19
20 // _weight的getter方法
21 - (double)weight {
22     return _weight;
23 }
24
25 // _address的setter方法
26 - (void)setAddress:(NSString *)address {
27     _address = address;
28 }
29
30 // _address的getter方法
31 - (NSString *)address {
32     return _address;
33 }
34
35 // _isMarried的setter方法
36 - (void)setIsMarried:(BOOL)isMarried {
37     _isMarried = isMarried;
38 }
39
40 // _isMarried的getter方法
41 - (BOOL)isMarried {
42     return  _isMarried;
43 }
44
45 // 定义一个多参的方法
46 - (void)setHoddy:(NSString *)hoddy
47           weight:(double)weight
48          address:(NSString *)address
49        isMarried:(BOOL)isMarried {
50
51     _hoddy = hoddy;
52     _weight = weight;
53     _address = address;
54     _isMarried = isMarried;
55 }
56
57 @end
时间: 2024-10-13 01:35:25

iOSDay10OC类和对象的相关文章

Java 第七章 类和对象 笔记

一.对象的特征--类的属性 每个对象的每个属性都有特定的值 对象的操作--类的方法 二.封装:对象同时具有属性和方法两项特性.     对象的属性和方法通常被封装在一起,共同体现事物的特性,     二者相辅相成,不能分割. 三.类和对象的区别:     类:抽象的概念,是一个模子,确定了对象的属性和方法.    对象:能够看得见摸得着的实物.具有静态和动态特征. 四.定义类的步骤:     1.定义类名      2.定义类的属性 访问修饰符 属性类型 属性名称=默认值:     3.定义类的

类与对象

1.1 类和对象的关系   为什么要采用面向对象思想进行程序设计与开发 1.可以实现代码的复用 2.符合人思考的方式   类和对象的定义 1.类的定义:用class关键修饰的叫做类 2.对象的定义:类名定义的数据类型   类和对象之间关系 1.由对象归纳为类,是归纳对象共性的过程 2.在类的基础上,将状态和行为实体化为对象的过程为实例化   1.2 定义类   定义类的语法,类主要由成员变量和成员方法构成(暂不提构造函数) eg: publicclassStudent { //成员变量 intn

【编程语言】Java中的类和对象learn by Imooc

 一.什么是类和对象 * 类是模子,确定对象将会拥有的特征(属性)和方法 * 类的特点: *     类是对象的类型 *     具有相同属性和方法的一组对象的集合 * 对象的属性 *     属性-对象具有的各种特征 *     每个对象的每个属性都有用的特定值 * 对象的方法 *     方法-对象执行的操作(能干什么) * 类和对象的关系 *     类是抽象的概念,仅仅是模板 *     对象是一个你能够看得到,摸得着的具体实体 二. 如何定义Java的类 * 1.类的重要性:所有Jav

C++ 成员变量是别的类的对象

?在成员函数中,可以将this指针当参数传递,也可以返回this指针,或返回通过this指针拿到的对象 /* 成员变量是别的类的对象 */ #include <iostream> using namespace std; //日期类 class Date { int year,month,day; public: //构造方法 Date(){ cout << "Date() " << endl; } //有参 Date(int _y,int _m,i

l类与对象课后作业

java 的初始化规律 执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”. 执行类的构造函数. 类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行.因此,适合于封装那些“对象创建时必须执行的代码” 当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行. 请自行编写示例代码验证以上结论. public class InitializeBlockDemo { /**   * @param args   */ public static vo

第五节 类和对象

面向对象怎么理解? 1.1 面向对象是相对面向过程而言 1.2 面向对象和面向过程都是一种思想 1.3 面向过程:强调的是功能行为 1.4 面向对象:将功能封装进对象,强调具备了功能的对象 1.5 面向对象是基于面向过程的 特点: 三个特征:封装.继承.多态 我们在开发过程中,就是在找对象进行使用,没有对象就new一个对象. 找对象:建立对象,使用对象,维护对象的关系 封装: (1)是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (2)好处:将变化隔离:便于使用:提供重用性:提高安全性

C++笔记二:类和对象

类和对象 1:面向对象基础 2: 定义类和对象 3: 类和对象的使用 4: 构造函数和析构函数 5: this指针和复制构造函数 6: static静态成员 7: const对象和const成员 8: friend友元 ---------------------------------------------------------------------------------------------------------------------- (1)面向对象基础 一.什么是面向对象程序

类、对象和包

相关概念: 对象: 对象是存在的具体实体,具有明确定义的特征和行为. 类:是具有相同属性和行为的一组对象的集合.类是对象的抽象,对象是类的实例. 包:包就是文件夹.利用包可以可以组织相关的类,同时可以做到信息的隐藏. 属性:属性用于描述对象的特征.由于属性是属于一个对象的组成,所以属性也叫成员变量.属性跟随对象放在堆空间中,书写在类中,在方法之外,随对象产生而产生,随对象销毁而销毁.特点:属性用于描述对象的特征,对象之间彼此独立,一个对象属性的变化不会影响其他对象属性的变化.属性通过对象. 的方

8.python之面相对象part.1(初识类与对象)

一.类和对象的概念. 什么是类 类就是把一类事物相同的特征和动作整合到一起就是类比如说"人"就是一个类. 什么是对象 对象就是基于类创建出来的一个具体存在的事物这个事物包含了将其创造出来的类的特征和动作. 类与对象有什么关系一切的对象都是由类产生的假如说造一支笔首先要有一个造笔的模版上帝制造人也是一样制造一个人也需要一个造人的模版这个模板就是人的"类"然后根据类的定义来产生一支支笔和一个个的人. 什么是实例化 由类产生对象的过程就是实例化类实例化的结果就是一个对象对