TÍNH HƯỚNG ĐỐI TƯỢNG TRONG SWIFT 3 Trong bài này mình sẽ hướng dẫn tính chất hướng đối tượng trong Swift.. Tương tự các ngôn ngữ khác trong swift cũng có đầy đủ các tính hướng đối tượng
Trang 1TÍNH HƯỚNG ĐỐI TƯỢNG TRONG SWIFT 3
Trong bài này mình sẽ hướng dẫn tính chất hướng đối tượng trong Swift
Tương tự các ngôn ngữ khác trong swift cũng có đầy đủ các tính hướng đối tượng :
kế thừa, trừu tượng, đóng gói, đa hình
Trong bài này mình sẽ hướng dẫn về tính kế thừa và tính đa hình, hướng dẫn sau mình sẽ hướng dẫn cho các về các tính chất còn lại
Mình vễ tiếp tục sử dụng playground để test code
-Tính kế thừa trong Swift :
Nó cho phép lớp thừa kế được thừa hưởng các thuộc tính và phương thức của lớp nó thừa kế
Nó cho phép có thể thừa kế 1 protocol, class trừu tượng hoặc 1 class bình thường
Nó có thể kế thừa 1 class, nhiều protocol
Khai báo tổng quát:
class A{
}
class kế thừa sử dụng dấu :
+ class B:A{}
class B kế thừa class A
+ Kế thừa hàm khởi tạo sử dụng từ khoá super.init(tham số or không có tham
số)
ví dụ: Student kế thừa từ people
Khi đó people có tất cả các thuộc tính phương thức của lớp student
Trang 2class student có thể thêm các phương thức và thuộc tính riêng ở đây mình
thêm funcStudentInfor()
class people {
var name:String = “”
var age:Int = 0
var address = “”
init(name:String,age:Int,address:String){
self.name=name
self.age=age
self.address=address
}
init(){
}
}
class student: people{
private var id = “”
override init(){
super.init()
}
init(id:String,name:String,age:Int,address:String){
super.init(name: name, age: age, address: address)
self.id=id
Trang 3}
func StudentInfor() {
print(“this is student!”)
}
}
-Tính đa hình trong swift:
Tính đa hình được thể hiện ở đặc điểm có thể Overloading và Overriding:
Ta có thể hiểu tính đa hình của đối tượng là trong từng trường hợp, hoàn cảnh khác nhau, đối tượng có khả năng thực thi các hành vi, hành xử khác nhau
Đa hình có 2 mức căn bản: Data Type (kiểu dữ liệu) và Method (phương thức) Trong lập trình hướng đối tượng, Data Type được thể hiện ở Interface
và Method thể hiện ở overloading (nạp chồng)
Overloading: là các phương thức có cùng tên nhưng khác tham số truyền vào
Overriding:
(Ghi đè)là phương thức có cùng tên, cùng tham số truyền vào, cùng kiểu giá trị trả về với phương thức ở lớp cha!
Đó là khi phương thức đã xuất hiện ở lớp cha và được viết lại ở lớp con
Lưu ý : không ghi đè thuộc tính chỉ ghi đè phương thức
Ví dụ:
class sau:
– Trong class people có hàm khởi tạo init() không tham số,
init(name:String,age:Int,address:String ) có tham số,
có hàm infor()
– Trong class student:
Overloading: hàm khởi tạo có tham số init(có tham số)
init(id:String,name:String,age:Int,address:String){
Trang 4super.init(name: name, age: age, address: address)
self.id=id
}
Overriding:
hàm khởi tạo không có tham số:
override init(){
super.init()
}
hàm infor():
override func infor() {
let info:String = “Id \(id) Name: \(name) Age: \( age)
Address \(address)”
print(info)
}
Nếu ta không override thì các hàm của class people sẽ được gọi bởi chúng ta đang kế thừa đã là student thì chắc chắn là people
class people {
var name:String = “”
var age:Int = 0
var address = “”
init(name:String,age:Int,address:String){
Trang 5self.name=name
self.age=age
self.address=address
}
init(){
}
func infor() {
let info:String = “Name: \(name) Age: \( age) Address \(address)” print(info)
}
}
class student: people{
private var id = “”
override init(){
super.init()
}
init(id:String,name:String,age:Int,address:String){
super.init(name: name, age: age, address: address)
self.id=id
}
override func infor() {
Trang 6let info:String = “Id \(id) Name: \(name) Age: \( age) Address \(address)” print(info)
}
func StudentInfor() {
print(“this is student!”)
}
}
ví dụ:gọi đối tượng
var s = student(id: “12”, name: “binh”, age: 22, address: “thanh hoa”)
s.infor()
đưa ta thông tin của đối tượng