zoukankan      html  css  js  c++  java
  • OC面向对象—封装

    OC面向对象—封装

     

    一、面向对象和封装

    OC面向对象的三大特性:封装(成员变量)、继承和多态

    在OC语言中,使用@interface和@implementation来处理类。

     

    @interface就好像暴露在外面的时钟表面,像外界提供展示以及接口。@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来。

    1.使用继承可以使得子类拥有父类的所有成员变量和方法

    2.继承的子类不可以重新定义和父类名称相同的成员变量

    3.子类重新实现父类中的方法,称之为重写

    4.当调用某个方法时,优先在子类中寻找,如果子类没有定义该方法,就去父类中寻找

    5.继承优点是:继承可以抽取重复的代码,建立类之间的相互关系,使得代码更简洁,设计更合理

       继承缺点是:耦合性强

    二、Set方法

    在开发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public、@protected等关键字修饰(不写任何关键字,默认是@protected),而是使用Set方法来为对象的成员变量赋值。在set方法的内部也可以对一些不合理的赋值进行筛选过滤。

    Set方法的作用:为外界提供一个设置成员变量值的方法

    命名规范:

    (1)方法名必须以set开头

    (2)set后面跟上成员变量的名称,首字母大写

    (3)返回值一定是void

    (4)一定要接收一个参数,而且参数类型需要和成员变量的类型一致

    (5)形参名不能和成员变量名一样(苹果官方推荐成员变量名前加_以示区分)

    Set方法的好处:

    (1)不让数据暴露在外,保证了数据的安全性

    (2)对设置的数据进行过滤

     

    Set方法使用示例:

    Set方法的声明:

     

    Set方法的实现:

     

    测试程序:

     

     

    三、Get方法

    Get方法的作用:为调用者返回对象内部的成员变量的值

    命名规范:

    (1)一定有返回值,返回值的类型和成员变量的类型一致

    (2)方法名和成员变量名一样

    (3)不需要接收任何参数

     

    Get方法使用示例:

    Get方法的声明:

     

    Get方法的实现:

     

    测试程序:

     

     注意1:在实际的开发中,不一定set和get方法都会提供,如果内部的成员变量比如学生的学号这样的数据只允许外界读取,但是不允许修改的情况,则通常只提供get方法而不提供set方法。

    注意2:成员变量名的命名以下划线开头,get方法名不需要带下划线,使用下划线开头有两个好处:(1)与get方法的方法名区分开来;(2)可以和方法中的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。

     

    四、Self关键字

    self是一个指针,谁调用了当前方法,self就指向谁。【self出现在对象方法中,就代表着当前对象;  self出现在类方法中,就代表着当前类】

    self的用途:

    (1)在类内部的对象方法中,可以利用"self.属性名" 的点语法来get/set当前类的内部成员变量的值

    (2)在类内部的对象方法中,可以用[self  对象方法名];可以调用另外的对象方法;

    (3)在类内部的类方法中,可以用[self  类方法名];可以调用另外的类方法。

    举例:

    #import "WZCar.h"
    @implementation WZCar
    
    //对象方法中self代表WZCar类的对象car
    - (instancetype)initWithDict:(NSDictionary *)dict{
        if (self = [super init]) { //super是父类的对象
            self.icon = dict[@"icon"];
            self.name = dict[@"name"];//WZCar类的对象car.name
        }
        return self; //返回对象car
    }
    
    
    //类方法的self代表WZCar这个类
    + (instancetype)questionWithDict:(NSDictionary *)dict{
    
        return [[self alloc]initWithDict:dict]; //相当于[[WZCar alloc]initWithDict:dict];
    
    @end
    
    }

    转自:http://www.cnblogs.com/wendingding/p/3705219.html

    iOS开发者交流群:180080550
  • 相关阅读:
    HDU 1501 Zipper(DFS)
    HDU 2181 哈密顿绕行世界问题(DFS)
    HDU 1254 推箱子(BFS)
    HDU 1045 Fire Net (DFS)
    HDU 2212 DFS
    HDU 1241Oil Deposits (DFS)
    HDU 1312 Red and Black (DFS)
    HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
    HDU 1022 Train Problem I(栈)
    HDU 1008 u Calculate e
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5456250.html
Copyright © 2011-2022 走看看