19、20、22章 ●●●●● ●●●● ●●。●●
19、20、22章
●●●●● ●●●● ●●● 对象的可见性 ●●● ●●●● ●可见性是对象引用其它对象的能力 ●可见性与范围,或者成为作用域问题有关: 某一资源是否在另一个资源的范围之内 四种可见性 属性可见性:B是A的属性。 参数可见性:B是A中方法的参数 局部可见性:B是A中方法的局部对象 全局可见性:B具有某种方式的全局可见性
对象的可见性 ⚫ 可见性是对象引用其它对象的能力 ⚫ 可见性与范围,或者成为作用域问题有关: 某一资源是否在另一个资源的范围之内。 ⚫ 四种可见性 ⚫ 属性可见性:B是A的属性。 ⚫ 参数可见性:B是A中方法的参数。 ⚫ 局部可见性:B是A中方法的局部对象。 ⚫ 全局可见性:B具有某种方式的全局可见性
●●●●● ●●●● ●●● 属性可见性 ●●● ●●●● 当B作为A的属性时,则存在A到B的属性可见性。 class Register public void enterltem(itemID, gty) private ProductCatalog catalog s desc= catalog. getProduct Desc(itemID enterltem Productcatalog (itemID, quantit desc= getProductDesc( itemID
属性可见性 : Register enterItem (itemID, quantity) : ProductCatalog desc = getProductDesc( itemID ) public void enterItem(itemID, qty) { ... desc = catalog.getProductDesc(itemID) ... } class Register { ... private ProductCatalog catalog; ... } ⚫ 当B作为A的属性时,则存在A到B的属性可见性
●●●●● ●●●● ●●● 参数可见性 ●●● ●●●● ●当B作为参数传递给A的方法时,则存在A到B的 参数可见性。 enterltem(id, gty) 2: make Lineltem(desc, aty) Register sale 1: desc= getProductDesc(id) 2.1: create(desc, qty) Product atalog makeLineltem(ProductDescription desc, int gty) sI: SalesLineltem sl= new SalesLineltem(desc, gty)
参数可见性 enterItem 2: makeLineItem(desc, qty) (id, qty) 1: desc = getProductDesc(id) 2.1: create(desc, qty) :Register :Sale :Product Catalog sl : SalesLineItem makeLineItem(ProductDescription desc, int qty) { ... sl = new SalesLineItem(desc, qty); ... } ⚫ 当B作为参数传递给A的方法时,则存在A到B的 参数可见性
●●●●● ●●●● 局部可见性 ●●● ●●● ●●●● ●当B声明为A中方法的局部对象时,则存在A到B 的局部可见性 enterltem(id, qty) /local visibility via assignment of returning object ProductDescription desc= catalog. getProductDes(id) enterltem egister ProductCatalog ( itemID, quantity) desc= getProductDesc( itemID)
局部可见性 : Register enterItem (itemID, quantity) : ProductCatalog desc = getProductDesc( itemID ) enterItem(id, qty) { ... // local visibility via assignment of returning object ProductDescription desc = catalog.getProductDes(id); ... } ⚫ 当B声明为A中方法的局部对象时,则存在A到B 的局部可见性
●●●●● ●●●● ●●● 全局可见性 ●●● ●●●● ●当B对于A是全局时,存在A到B的全局可见性 ●在某些语言,如C艹+中,实现全局可见性的 种方式是将实力分配给全局变量,这种方式在 更纯的面向对象语言,如Java中不可行。 ●实现全局可见性的首选方法是使用单实例模式
全局可见性 ⚫ 当B对于A是全局时,存在A到B的全局可见性 ⚫ 在某些语言,如C++中,实现全局可见性的一 种方式是将实力分配给全局变量,这种方式在 更纯的面向对象语言,如Java中不可行。 ⚫ 实现全局可见性的首选方法是使用单实例模式
●●●●● ●●●● 其它类型的可见性(作用域) ●●● ●●● ●●●● ●在多线程的应用中,需要有线程作用域。 ●对于Web应用,有 Application/ Session/ Request/Page等作用域
其它类型的可见性(作用域) ⚫ 在多线程的应用中,需要有线程作用域。 ⚫ 对于Web应用,有 Application/Session/Request/Page等作用域
●●●●● ●●●● ●●● 变量作用域的管理 ●●● ●●●● ●尽可能缩小变量的作用域,缩短变量的存活时 ●变量存在的时间恰好等于系统需要该变量的时间 ●能够使得你对自己的代码有更加准确的认识 ●缩小作用域的方法 定义变量时,从最严格的可见性开始,然后根据需 要扩展变量的作用域 把相关的语句提取成单独的子程序
变量作用域的管理 ⚫ 尽可能缩小变量的作用域,缩短变量的存活时 间, ⚫ 变量存在的时间恰好等于系统需要该变量的时间 ⚫ 能够使得你对自己的代码有更加准确的认识 ⚫ 缩小作用域的方法 ⚫ 定义变量时,从最严格的可见性开始,然后根据需 要扩展变量的作用域 ⚫ 把相关的语句提取成单独的子程序
●●●●● ●●●● ●●● 变量作用域的管理 ●●● ●●●● ●方便性和智力上的可管理性 ●全局变量使用时比较方便,无需考虑有关参数和作 用域的有关规则 变量局部化的优点是能够提高智力上的可管理性: 能够隐藏的信息越多,在同一时间所需要考虑的信 息就越少
变量作用域的管理 ⚫ 方便性和智力上的可管理性 ⚫ 全局变量使用时比较方便,无需考虑有关参数和作 用域的有关规则 ⚫ 变量局部化的优点是能够提高智力上的可管理性: 能够隐藏的信息越多,在同一时间所需要考虑的信 息就越少
●●●●● ●●●● ●●● 将设计映射为代码 ●●● ●●●● 从UM图到代码之间存在转换过程 ●类和接口的定义 从DCD创建类和接口的定义 方法的定义 从交互图创建方法
将设计映射为代码 ⚫ 从UML图到代码之间存在转换过程 ⚫ 类和接口的定义 ⚫ 从DCD创建类和接口的定义 ⚫ 方法的定义 ⚫ 从交互图创建方法