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 : 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.

class student có thể thêm các phương thức và thuộc tính riêng ở đây mình thêm func StudentInfor().

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

    }

    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){

            super.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){

        self.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() {

        let 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.

Có gì trong phân tiếp theo:

Phần tiếp theo mình sẽ giới thiệu cho các bạn các tính chât hướng đối tượng còn lại.

Các bạn có thể tham khảo khoá học tại đây .

Add a Comment

Your email address will not be published. Required fields are marked *