增加类的封装性

封装性:越少的代码可以看到数据(也就是可以访问它们),越多东西被封装,越少人可以看到它。而越少的人看到它,我们就有愈大的弹性去改变他,因为我们的改变仅仅直接影响看到改变的那些人。例如,class WebBrowser可能拥有大量便利函数,某些与bookmarks书签有关,有些与cookie有关,通常大多数客户只对其中某些感兴趣。没道理让这些客户对所有内容都感知或者说可以操作。比如,一个与cookie相关的便利函数发生编译关系,分离它们的最直接做法就是将书签相关的便利函数声明在同一个头文件,将cookie相关便利函数声明于另一个头文件,以此类推:

//头文件"webbrowser.h"--放类自身
namespace WebBrowserStuff {
    class WebBrowser {...};
    ...     //核心机能,non-member函数
}

//头文件"webbrowserzbookmarks.h"
namespace WebBrowserStuff {
    ... //与bookmarks相关的便利函数
}

//头文件"webbrowsercookies.h"
namespace WebBrowserStuff {
    ... //与cookie相关的便利函数
}

 这是C++标准库的组织方式。标准库不是一个拥有单一的整体的庞大的头文件并在其中包含每一样东西,而是有数十个头文件(<vector>,<memory,<algorithm>),每个头文件std的某些机能。如果客户只想要list,那就#include<list>。

将所有便利函数放在多个头文件内但隶属同一命名空间,意味着客户可以轻松扩展这一组便利函数。

注意

宁拿non-member non-friend函数替换member函数。这样做可以增加封装性、包裹弹性和机能扩充性。

时间: 2024-09-29 10:59:27

增加类的封装性的相关文章

JAVA- 面向对象的三大特征(封装性、继承性、多态性)

程序的发展经历了两个主要阶段:面向过程.面向对象.面向对象是当前软件开发的主流. 面向过程就是分析出解决所需要的步骤,然后用函数将这些步骤一步一步实现,使用的时候一个一个一次调用. 面向对象是把构成问题的事务分解成各个对象.建立对象的目的不是为了完成一个步骤而是为了描述某个事物在整个解决问题步骤中的行为. 面向对象是为了专注在程序中采用封装.继承.多态等设计方法.面向对象的设计是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法吧系统构造成"现实世界"的对象. 面

【PHP面向对象(OOP)编程入门教程】9.封装性(var与public,protected,private的关系)

封装性是面象对象编程中的三大特性之一,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义: 1. 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象). 2. 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界[或者说形成一道屏障],只保留有限的对外接口使之与外部发生联系. 封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的"交叉感染",使软件错误能够局

面向对象的封装性和多态性

面向对象之封装性: 1.继承要符合is-a的关系.即"子类is a 父类"——子类是父类.如:卡车是汽车,卡车is a 汽车. 2.父类中如果用Protected修饰符,表示只允许其子类访问,而不允许其他非子类访问: 父类中如果用private修饰符,子类是不能访问的. 3.除了构造方法不能被子类继承外,其他都可以直接被继承.可以用base关键字调用父类的构造函数:语法如下 :base(参数变量名) 使用base还可以调用父类的属性和方法. 注意:子类构造函数中已经定义了这些参数,在b

javascript中提高代码的封装性

我出的面试题中,有一条是问如何避免页面引用JS,出现函数.变量重复.冲突的. 从大的方面讲,应该引入javascript的模块化开发,符合AMD规范之类: 从小的方面说,大概就是限定变量和函数的作用域了,这也涉及到一点大家如雷贯耳的闭包概念. 众所周知,javascript没有类,只有函数.其实它的函数也跟类差不多了,函数里面可以定义函数.而对于.net来说,直到近期出现的C#7,才支持这一点. 所以,我们可以将函数和变量,都定义在一个函数里面,这样即与外部隔绝矣: <html> <he

Java封装性及属性的封装

一.封装的概念  1.封装性是面向对象思想的三大特征之一. 2.封装就是隐藏实现细节,仅对外提供访问接口. 封装有: 属性的封装,方法的封装,类的封装 ,组件的封装,模块化的封装,系统级封装 二.封装的好处  1.模块化 2.信息隐藏 3.代码重用 4.插件化易于调试 5.具有安全性 三.属性的封装  也叫属性的私有化. 例: 封装之前: class Person{     String name; int age; } 封装之后: class Person{     private Strin

Java面向对象设计主要有三大特征:封装性、继承性和多态性

一  封装性   1.1  概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访问. 1.2  目的:我们可以并且有可能在方法中,添加自己的限制,保证数据的有效性:从某种程度上说,封装也提高了代码的健壮性.安全性. 1.3  实现步骤:所有的成员变量全部私有化,格式 :private   数据类型  变量名  ,提供访问成员变量的getter/setter方法. 二  继承性   2.1  概念:子类通过一种方式来接受父类所有的公有的,

JAVA学习第十二课(关键字三final:针对extends打破封装性)

final: final 可以修饰类.方法.变量 final 修饰的类不可以被继承 final 修饰的方法不可以被覆盖 final 修饰的变量是一个常量,只能被修饰一次 内部类只能访问被final修饰的局部变量 继承的弊端: 如下代码: class father { void show() { System.out.println("ni hao ");//父类的方法已经调用了底层系统 } } class son extends father { void show() { Syste

体验Java的封装性

1 package com.cnblogs.java; 2 //体验Java的封装性 3 /* 4 * 如下的人类年龄赋值-300岁,显然很不合理,这种直接对类的属性赋值,有时候虽然不合理但却会编译通过. 5 * 所以我们考虑不让对象直接操作属性,而是通过对象调用方法来对属性赋值,在方法中我们就可以进一步限制 6 * 赋值的大小问题. 7 * 解决办法:将类的属性私有化,通过共有的方法来调用修改类的属性.(在方法中限制修改的值) 8 */ 9 public class TestPerson {

验证码确保php无输出、sql语句的封装性、文件上传的工具类【这三个重点工具类实现】

1.php代码在引入中不会进行结束或者确保结束之后没有空格,来保证php在被包含中没有被输出[防止header和session_start()对输出的控制]实质上,需要注意的就是,要不就进行输出缓存控制以及php开始标签前没有空格 验证码这个功能需要header和session两个功能[尤其需要注意输出的问题] [总结:防止php代码中带着一些输出的问题](1)在php标签中开始<?php 前顶格(2)php结束符要不不写,写了就不要在结束之后还有换行[防止该文件被包含之后提前出线输出](3)或