CH10. 屬性與方法.

Slides:



Advertisements
Similar presentations
第五章 类的继承和派生 Inheritance/extends/derive. 教学目标 理解继承的概念和作用 派生类的定义 理解访问修饰符 protected 方法的重写 继承下的构造函数的使用 继承下的 finalize 方法的使用 理解超类和子类的关系.
Advertisements

第6章 对象和类.
第3-2章 类与 对象 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点:
单元二:面向对象程序设计 任务二:借书卡程序设计.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
6. 6 Overloading methods and constructors 6
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
Lua+wax在ios上的应用 白 衣.
第7章 C#函數與.NET Framework類別函數庫
项目:贪吃蛇游戏设计 工作任务一:系统设计(system design) 工作任务二:豆类(Bean)设计
第一章 面向对象程序设计.
客户端用Net-Library和SQL SERVER连接
第九讲 类与对象 (I)面向对象基础.
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
新世代計算機概論 第14章 程式語言.
第9章 单例模式 Website:
1 Department of Computing.
再回首: Java关键字 数据类型:byte boolean char double float int long short ,
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
程設一.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
Derived Class 前言 衍生類別的定義 單一繼承 public, protected, 和 privated 基底類別
Interfaces and Packages
Classes Lecturer: 曾學文.
CHAPTER 9 建構方法 ROBERT.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
Ch10 類別與物件-方法 Java程式設計(2).
程序设计期末复习 黎金宁
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
C++ 與 物件導向 程式設計概念簡介 魏天君 2018/12/3.
Java程序设计 第9章 继承和多态.
類別的繼承 Vehicle Car.
第6章 继承和接口设计 6.1 继 承 6.2 多态性 6.3 抽象类 6.4 接口 6.5 接口在集合排序中的应用.
高级数据库系统作业答疑 ——面向对象
C语言 程序设计基础与试验 刘新国、2012年秋.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
$10 可空类型.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
10 多載函數 10.1 多載概論 多載一般函數 多載成員函數 10-3
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
第二章 Java基本语法 讲师:复凡.
C#程序设计基础 $3 成员、变量和常量.
第10讲 构造函数和析构函数 构造函数 析构函数 This 指针.
Ch15. 型態轉換與延展.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Interfaces and Packages
Ch02.變數、常數以及資料型態.
Object-Oriented Programming in C++ 第二章 类和对象
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
Ch16. 協定.
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
Ch07. 函式.
Scala编程
Go 语言编程 —— 平台研发部 吴植民.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
JAVA 程式設計與資料結構 第三章 物件的設計.
Ch01.從簡單的範例談起. Ch01.從簡單的範例談起 1.1 第一個程式 建立「Command Line Tool 」專案,名稱為 myFirst,Language選擇 Swift 修改 print(”Hello, world!”)為 print(”Learning Swift now!”)
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
Ch06. 聚集型態.
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第6章 继承和多态 伍孝金
Presentation transcript:

CH10. 屬性與方法

10.1 儲存型屬性 前面章節所談到的,不管在類別或結構內的變數或常數皆為儲存 型屬性 (stored property) 。

範例程式 // store property struct Circle { var x, y: Int var radius = 10 } let cirObj = Circle(x: 10, y: 10, radius: 11) print("Circle:") print("x: \(cirObj.x), y: \(cirObj.y)") print("radius: \(cirObj.radius)")

輸出結果 Circle: x: 10, y: 10 radius: 11

10.2 計算型屬性 計算型屬性 (computed property) 不是真正儲存一值,取而代之的 是提供用以擷取的getter和選擇性的setter,用以間接設定某一屬 性值。

10.2.1 速記setter宣告 速記計算型屬性(shorthand setter declaration)將程式中set的參數 newCenter改用預設值newValue。

範例程式part1 // computer property struct Point { var x = 0.0, y = 0.0 } struct Side { var length = 0.0 struct Square { var originPoint = Point() var side = Side() var center: Point { get { let centerPointX = originPoint.x + side.length / 2 let centerPointY = originPoint.y + side.length / 2 return Point(x: centerPointX, y: centerPointY) set { originPoint.x = newValue.x - side.length / 2 originPoint.y = newValue.y - side.length / 2

範例程式part2 } var Obj = Square(originPoint: Point(x: 0.0, y: 0.0), side: Side(length: 10)) // call getter print("center x: \(Obj.center.x), y: \(Obj.center.y)") // call setter Obj.center = Point(x: 12, y: 12) print("original x: \(Obj.originPoint.x), y: \(Obj.originPoint.y)")

輸出結果 center x: 5.0, y: 5.0 original x: 7.0, y: 7.0

10.2.2 唯讀計算型屬性 唯讀計算型屬性(read-only computed property)表示只有get函式, 但沒有set 函式 。

範例程式 // read-only computed property struct cuboid { var width = 0.0, height = 0.0, depth = 0.0 var volume: Double { get{ return width * height * depth } let oneCuboid = cuboid(width: 2.0, height: 3.0, depth: 4.0) print("Volume is \(oneCuboid.volume)")

輸出結果 Volume is 24.0

10.3 屬性的觀察者 屬性的觀察者 (property observer) 將觀察和反應屬性值的變化。 屬性觀察者有二個函式: 10.3 屬性的觀察者 屬性的觀察者 (property observer) 將觀察和反應屬性值的變化。 屬性觀察者有二個函式: willSet,它在屬性值儲存之前將被呼叫。 didSet,它在新的值儲存後加以執行。

範例程式 // properties observers class YoursScore { var score: Int = 0 { willSet(newScore) { print("您的分數是 \(newScore)") } didSet { if score > oldValue { print("您進步了 \(score - oldValue) 分") } else { print("您退步了 \(oldValue - score) 分") let yourScore = YoursScore() yourScore.score = 60 yourScore.score = 80 yourScore.score = 70

輸出結果 您的分數是 60 您進步了 60 分 您的分數是 80

10.4 型態屬性 在結構內的屬性前皆加上static關鍵字,來形成型態屬性 不必建立物件,而只要以類別、結構或是列舉名稱來呼叫即可。

範例程式 // type property of struct struct Rectangle { static var width = 20 static var height = 30 static var property: String { return "Rectangle: " } print(Rectangle.property) print("Width: \(Rectangle.width)") print("Height: \(Rectangle.height)")

輸出結果 Rectangle: Width: 20 Height: 30

10.5 實例方法 實例方法 (instance method) 就是定義於類別或結構的方法。 必須使用物件來呼叫。

10.5.1 方法的參數名稱 方法參數名稱皆要在呼叫方法時加以列出。

範例程式 class Rectangle { var width = 0.0 var height = 0.0 func getArea() -> Double { return width * height } func setWidthAndHeight(w: Double, h: Double) { width = w height = h let rectObject = Rectangle() rectObject.setWidthAndHeight(w: 10, h: 20) let rectArea = rectObject.getArea() print("矩形面積: \(rectArea)")

輸出結果 矩形面積: 200.0

10.5.2 self屬性 Swift的self和C++ 與 Java的this關鍵字具有相同的意義,表示類別 本身。

10.5.3 從實例方法內修改值型態 結構和列舉的屬性是屬於值型態 (value type)。 值型態的屬性不可以在實例方法中被修改 。 10.5.3 從實例方法內修改值型態 結構和列舉的屬性是屬於值型態 (value type)。 值型態的屬性不可以在實例方法中被修改 。 若要修改,必須在方法前加上關鍵字mutating。

範例程式 // mutating keyword // 在setRadius函式前加上 mutating struct Circle { var radius = 0.0 func getArea() -> Double { return radius * radius * 3.14159 } mutating func setRadius(r: Double) { radius = r //物件一定要是var var circleObject = Circle() circleObject.setRadius(r: 10) let totalArea = circleObject.getArea() print("面積: \(totalArea)")

輸出結果 面積: 314.159

10.6 型態方法 本節將討論型態方法(type method) 。 10.6 型態方法 本節將討論型態方法(type method) 。 與實例方法的差異是,型態方法是共用的,有如C++ 或Java的 static方法。 可以使用類別名稱或結構名稱來呼叫,不必定義類別或類別的物 件來呼叫。

範例程式 // type method of class using class class Circle { var radius = 0.0 // type method class func printStar() { print("********") } func getArea() -> Double { return radius * radius * 3.14159 func setRadius(r: Double) { radius = r let circleObject = Circle() Circle.printStar() circleObject.setRadius(r: 10) let totalArea = circleObject.getArea() print("\(totalArea)")

輸出結果 ******* 面積: 314.159