敏捷硬件开发语言Chisel与数字系统设计 课件 第13章 包和导入_第1页
敏捷硬件开发语言Chisel与数字系统设计 课件 第13章 包和导入_第2页
敏捷硬件开发语言Chisel与数字系统设计 课件 第13章 包和导入_第3页
敏捷硬件开发语言Chisel与数字系统设计 课件 第13章 包和导入_第4页
敏捷硬件开发语言Chisel与数字系统设计 课件 第13章 包和导入_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

13.包和导入一、包二、包的层次和精确代码访问三、import导入四、自引用五、访问修饰符六、包对象目

录2一、包3一、包1.1应用场景现在有两个程序员共同开发一个项目,程序员Tiger希望定义一个类取名Dog

,程序员Bear也想定义一个类也叫

Dog。两个程序员为此还吵了起来,怎么办?41.2包的概念目的:让系统层次分明,各个功能划分明显命名方式:

推荐使用“com.xxx.xxx”的形式语法格式:

packagepk1{… }包内定义内容:

可以定义class、object和trait,也可以定义别的package一、包Scala把代码以“包”的形式划分51.3包的作用当类很多时,可以很好的管理类区分相同名字的类:

同一个包中

类名字不同

不同的包中

类的名字可以相同限定了访问权限,控制访问范围一、包6二、包的层次和精确代码访问7二、包的层次和精确代码访问包有层次结构包可以通过句点符号来按路径层次访问如果包名中出现了句点,那么编译器也会按层次编译2.1包的层次形式一:带句点的包的命名形式二:包内分层定义8packageone.twopackageone{

packagetwo{

}

}二、包的层次和精确代码访问Scala的包是嵌套的书写包的路径可以简化2.2包嵌套的书写规则不需要写成bobsrockets.navigation.StarMap不需要写成bobsrockets.navigation.Navigator不需要写成bobsrockets.Ship9packagebobsrockets{

packagenavigation{

classNavigator{

valmap=newStarMap

}

classStarMap

}

classShip{

valnav=newnavigation.Navigator

}

packagefleets{

classFleet{

defaddShip()={newShip}

}

}

}二、包的层次和精确代码访问2.2包嵌套的书写规则以上规则在同一个文件内显式嵌套时可以生效包分散在多个文件内,并通过包名带句点来嵌套,则不会生效10//bobsrockets.scala

packagebobsrockets{

classShip

}

//fleets.scala

packagebobsrockets.fleets{

classFleet{

//无法编译,Ship不在作用域内

defaddShip()={newShip}

}

}//bobsrockets.scala

packagebobsrockets

classShip

//fleets.scala

packagebobsrockets

packagefleets

classFleet{

//可以编译

defaddShip()={newShip}

}

三、import导入11三、Import导入简化程序设计,通过关键字“import”来导入相应的内容可以出现在代码的任意位置导入的内容包括:

包内所含的内容

对象和包自身

函数的参数可以重命名或隐藏某些成员3.2Import的灵活性3.1目的12三、Import导入3.3语法格式导入包B:importA.B访问M

“B.M”导入类M:importA.B.M

访问M

”M“

导入对象N:importA.C.N

访问N

”N“

Import导入格式:importx.x....13packageA{

packageB{

classM

}

packageC{

objectN

}

}三、Import导入3.3语法格式导入一个或多个元素:

{引入选择器子句}

同时导入B和C:importA.{B,C}导入全部元素:

下划线”_“或”{_}“

全部导入:importA._或importA.{_}

导入并重命名:

{X=>x}

importA.{B=>packageB}导入隐藏:{T=>_,_}

importA.{B=>_,_}

Import导入格式:importx.x....将B重命名为packageB只隐藏包B,其他元素导入14packageA{

packageB{

classM

}

packageC{

objectN

}

}四、自引用15四、自引用关键字“this”,用于指代对象自己this用在类的方法里

指代正在调用方法的那个对象this用在类的构造方法里

指代当前正在构建的对象16五、访问修饰符17五、访问修饰符类型一:

关键字“private”:

修饰私有成员

只能被包含它的包、类或对象的内部代码访问类型二:

关键字“protected”:

修饰受保护的成员

在private的基础上,扩展到可以被子类访问5.1修饰符类型18五、访问修饰符5.1修饰符类型报错,time是私有成员,子类不会继承允许,protected成员允许子类访问注意:二者均不可被外部访问!!!19classDiet{

privatevaltime="0:00"

protectedvalfood="Nothing"

}

classBreakfastextendsDiet{

overridevaltime="8:00"//error

overridevalfood="Apple"//OK

}表示形式:private[X]和protected[X]作用:访问权限扩大到X的内部五、访问修饰符5.2修饰符的限定词扩大B包中类的访问范围到A包,则可以被包A内其他元素访问并列的包C没有访问权限,所以报错20packageA{

packageB{

private[A]classJustA

}

classMakeA{

vala=newB.JustA//OK

}

}

packageC{

classError{

vala=newA.B.JustA//error

}

}X还能是自引用关键字“this”。五、访问修饰符5.2修饰符的限定词思考:是否一定需要加限定词的访问修饰符呢?21scala>classMyInt1(x:Int){

privatevalmi1=x

defadd(m:MyInt1)=mi1+m.mi1

}

scala>classMyInt2(x:Int){

private[this]valmi2=x

defadd(m:MyInt2)=mi2+m.mi2

}

<console>:13:error:valuemi2isnotamemberofMyInt2

defadd(m:MyInt2)=mi2+m.mi2

^六、包对象22六、包对象

包里可包含的元素:类、特质和单例对象;Scala把字段和方法放在一个“包对象”中,包对象用关键字组合“packageobject”为开头来定义,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论