软件 可变与不可变 及封装可变性

软件的不可变:

软件架构应该具有一个稳定的抽象层或基础层。

稳定:抽象层或基础层的接口和对象间的依赖关系或协作关系应该保持稳定。

可变性:接口的具体实现可以不同,在接口不变的前提下。

根据开闭原则,应该是抽象层的接口和依赖关系保持稳定,对于实现的多样性保持开放。

时间: 2024-10-07 05:06:01

软件 可变与不可变 及封装可变性的相关文章

关于:1.指针与对象;2.深浅拷贝(复制);3.可变与不可变对象;4.copy与mutableCopy的一些理解

最近对深浅拷贝(复制)做了一些研究,在此将自己的理解写下来,希望对大家有所帮助.本人尚处在摸索阶段,希望各位予以指正. 本文包括如下方向的探索: 1.指针与对象: 2.深/浅拷贝(复制): 3.可变/不可变对象: 4.Objective-C中的copy与mutableCopy方法. 一.指针与对象 在初始学习编程的时候,对于绝大多数面向对象编程的语言,这都是个绕不开的重点与难点.非常惭愧的是对它的认识我一直是不够的,并且感觉这项技术有许多的内容可以挖掘.说这是面向对象编程的核心思想也不为过.很多

python 深拷贝和浅拷贝之可变和不可变对象总结

了解深拷贝和浅拷贝之前先要理解可变与不可变对象 python只允许使用引用传递,有可变对象和不可变对象,可变对象:list,dict.不可变对象有:int,string,float,tuple Python int,string,float,tuple不可变举栗子: def int_object(): i = 89 j = 89 print(id(89)) print('i id:' + str(id(i))) print('j id:' + str(id(j))) print(i is j)

不可变数组或者可变数组进行排序

#import <Foundation/Foundation.h> NSInteger myCompare(id obj1,id obj2,void *context) { //不分大小写进行升序排序 //return [obj1 caseInsensitiveCompare:obj2]; return -[obj1 caseInsensitiveCompare:obj2]; } int main(int argc, const char * argv[]) { @autoreleasepoo

php学习笔记5--php中的可变变量,可变函数及匿名函数

可变变量指的是:将一个变量的值再次当做一个变量名从而得到另外一个变量的值.如:$name = 'dqrcsc';$myname = 'name'; //$myname的值碰巧是另一个变量的变量名echo $name; //输出$name的值 'dqrcsc'echo $myname; //输出$myname的值 'name'echo $$myname; //得到$myname的值 'name',通过$再将其解析为一个变量 $name,从而输出$name的值 'dqrcsc' 匿名函数:即没有名字

不可变实例、可变实例、copy与mutableCopy

代码: #import <Foundation/Foundation.h> // 不论一个实例是不可变实例还是可变实例 // 通过向该实例发送copy消息,得到的实例是不可变实例 // 通过向该实例发送mutableCopy消息,得到的实例是可变实例 // 在非ARC环境下 // 通过向实例发送copy或mutableCopy消息得到的实例需要手工调用release或autorelease方法 void stringCopy(void); void stringMutableCopy(void

python中的可变与不可变对象

Python中的可变对象和不可变对象 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址. 可变对象,该对象所指向的内存中的值可以被改变.变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变. Python中,数值类型(int和float).字符串str.元组tuple都是不可变类

可变于不可变对象分类

Python在heap中分配的对象分成两类: 可变对象和不可变对象. 所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变. 可变即内存空间可变,不可变即内存空间不可变.这里用 id 函数看对象的内存地址有没有变化. 不可变(immutable):int.字符串(string).float.(数值型number).元组(tuple) 可变(mutable):字典型(dictionary).列表型(list) 如不可变类型例子:  id不变,type不变,值也不变. 从上图可以看出:变

Python学习(七)——可变与不可变参数

下面一段代码演示了可变与不可变默认参数的区别,通过查看内存地址以及每次函数调用之后的默认参数的变化,可以看出两段代码为什么会产生不同的结果. # -*- coding: cp936 -*-  # 上面一句是为了中文编码问题 # 默认值只被赋值一次.这使得当默认值是可变对象时会有所不同,比如列表.字典或者大多数类的实例. # 例如,下面的函数在后续调用过程中会累积(前面)传给它的参数 def f(a,L=[]): print('默认参数地址为:'+str(id(L))) L.append(a) p

可变、不可变数据类型和hash

一.可变和不可变数据类型 在python中,我们对数据类型除了分为数字类型.字符串类型.列表类型.元组类型.字典类型和集合类型外, 还有另外一种分类方式,我们给数据类型分为可变数据类型和不可变数据类型. 可变数据类型:列表.字典. 不可变数据类型:数字.字符串.元组. 二.hash 什么是hash呢? Hash一般译为"散列",也音译为"哈希",就是把任意长度的输入,通过散列算法,变换成固定长度的输出,输出的就是散列值. 这种转换是一种压缩映射,也就是,散列值的空间

while循环,布尔类型,可变or不可变,数字,字符串,列表,元组,字典

while 循环 '''1.什么是循环? 循环即重复的过程 2.为什么要有循环 3.while循环的语法(又称之为条件循环) while 条件: 代码1 代码2 代码3 .... ''' # 注意:下述形式的死循环,会造成cpu的占用率过高# i=1# while True:# i+=1 #打印1-10# n=1# while True:# if n <= 10: #n=10# print(n)# n+=1# else:# break #打印1-10:改进1# n=1# while True:#