⑤--面向对象三大特性:封装、继承、多态

主要内容:封装、继承、多态三大特性的概念,编程使用环境,优缺点分析和使用的注意事项
摘要由CSDN通过智能技术生成

1.封装的概念以及优点

封装:隐藏对象的属性和实现细节,仅对外提供访问方式
优点:
  1、将变化隔离
  2、便于使用
  3、提高重用性
  4、提高安全性
封装原则:
  1、将不需要对外提供的内容都隐藏起来。
  2、把属性都隐藏,提供公共方法对其访问

2.封装的具体应用

    在之前的代码中,使用了@public关键字来标识类的属性,然而这样使用经常导致一些不合理的结果

如人(Person类)的年龄(age)属性,有可能被错误的直接赋值为负数:

Person p = [Person new];
p->age = -10;

这样的情况显然是不合理的,而且数据在外部可以随意的被访问和修改,带来了很多不安全的因素。

面向对象的封装思想,就是将数据或者类属性信息进行封装,将类的方法实现进行封装,只在类的内部进行修改,而对外提供统一的访问接口。

在创建一个类的过程中,应该采用封装的思想进行编程,具体表现在几个方面:

当成员变量赋值时,要对不合理的赋值进行过滤
1.成员变量的权限不能为public
2.添加set方法,在方法内部进行过滤、赋值等操作//提供一个方法给外界设置age属性值
set方法
提供一个方法给外界设置age属性值
set方法
1.作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤
2.命名规范
 1>.方法名必须以set开头
 2>set后面跟上成员变量的名称,成员变量的首字母必须大写
 3>返回值一定是void
 4>一定要接受一个参数,而且参数类型跟成员变量类型一致
 5>形参名称不能跟成员变量名一样

若要访问成员变量,需提供get方法

get方法
 1.作用:返回对象内部的成员变量
 2.命名规范:
 1>肯定有返回值,返回值类型肯定与成员变量类型一致
 2>方法名跟成员变量名一样
 3>不需要接受任何参数

如果有些成员变量外界是只读的(只能访问不能修改) ,可以不设置set方法、只设置get

下面的例子是一个完整的封装数据的例子:

#import <Foundation/Foundation.h>

@interface Student : NSObject
{
    //@public
    int age;
}
- (void)setAge:(int)newAge;
- (int)age;
@end



@implementation Student
//set方法实现
- (void)setAge:(int)newAge
{
    if (newAge <= 0)
    {
        newAge = 1;
    }
    age = newAge;
}
//get方法实现
- (int)age
{
    return age;
}
@end



int main()
{
    Student *stu = [Student new];
    [stu setAge:10];
    
    NSLog(@"学生的年龄是%d", [stu age]);
    return 0;
}

3.封装的细节和注意点

   成员变量名的命名规范:一定要以下划线开头

作用:

     1.让成员变量和get方法的名称区分开

     2.可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量

规范的成员变量定义和封装示例:

#import <Foundation/Foundation.h>

typedef enum {
    SexMan,
    SexWomen
} Sex;
@interface Student : NSObject
{
    int _no;
    Sex _sex;
}
//sex的set和get方法
- (void)setSex:(Sex)newSex;
- (Sex)sex;

//no的set和get方法
- (void)setNo:(int)no;
- (int)no;
@end

@implementation Student
- (void)setSex:(Sex)newSex
{
    _sex = newSex;
}
- (Sex)sex
{
    return _sex;
}

- (void)setNo:(int)no
{
    _no = no;
}
- (int)no
{
    return _no;
}
@end


int main()
{
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值