1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Đặc tả hình thức: Chương 9 - Nguyễn Thị Minh Tuyền

22 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 533,49 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Đặc tả hình thức: Chương 9 cung cấp cho người học các kiến thức: Từ mô hình đến cài đặt, design by contract (DBC), ý tưởng cơ bản, ngôn ngữ đặc tả hay ngôn ngữ lập trình, công cụ hỗ trợ,...

Trang 1

LOGO

Đặc tả hình thức

Nguyễn Thị Minh Tuyền

Design by contract

Trang 2

Từ mô hình đến cài đặt

v   Alloy là một phương tiện để thiết kế

hệ thống và diễn giải các thuộc tính

v   Ta cần các thiết kế hệ thống này để

cải thiện chất lượng của việc cài đặt

tin thiết kế này thành mã nguồn?

§  Thông tin tĩnh ( multiplicity, invariant )

§  Thông tin về các thao tác (điều kiện trước, điều kiện sau, frame condition, )

Trang 3

Design by contract (DBC)

việc mô tả chính xác về ngữ nghĩa

interface

§  không chỉ về cú pháp, ví dụ như signature

§  mà còn cả về các hành vi, ví dụ như hiệu ứng việc

triệu gọi một phương thức

v   Được hỗ trợ bằng công cụ

§  cho phép các thuộc tính ngữ nghĩa của thiết kế (mô hình) được chuyển tải thành mã nguồn

§  hỗ trợ một số hình thức thẩm định các thuộc tính đó

Trang 4

Ý tưởng cơ bản

§  một hệ thống của các component giao tiếp với nhau

§  tất cả các tương tác đều dựa vào ràng buộc

(contract)

v   Ràng buộc có tính hai chiều

§  cả hai phần được ràng buộc lẫn nhau

Trang 6

Air travel

Client(Hành khách)

§  Obligation

•   Check in 30 phút trước khi máy bay cất cánh

§  Obligation

•   Đưa hành khách đến đích

§  Benefit

•   Không cần đợi các hành khách đi trễ

•   Không cần thiết phải lưu trữ số lượng

hành lý

•   Nhận tiền

Trang 8

§  Điều kiện trước

§  Điều kiện sau

§  Frame condition

§  Bất biến

Trang 10

Ngôn ngữ đặc tả hay ngôn ngữ lập trình

v   Tại sao không phải là cả hai?

v   Phương pháp tinh chỉnh

§  Thay vì chỉ phát triển các signature

§  Phát triển đặc tả ràng buộc

§  Phân tích tính nhất quán client-supplier

§  Thêm vào các chi tiết cài đặt

§  Kiểm tra rằng mã nguồn thỏa mãn ràng buộc

v   Tiến trình tự nhiên từ thiết kế đến mã nguồn

Trang 11

Ví dụ

Class Mystack {

private Object[] elems;

private int top, size;

public MyStack (int s) { … } public void push (Object obj) { … } public Object pop() { }

public boolean isEmpty() { } public boolean isFull() { }

}

Trang 12

/*@ invariant top >= -1 && top < size; @*/

Class Mystack {

private Object[] elems;

private int top, size;

}

Trang 13

Class Mystack {

private Object[] elems;

private int top, size;

/*@ requires s > 0;

ensures size == s &&

elems != null && top = -1; @*/

public MyStack (int s) { … }

Trang 14

Class Mystack {

private Object[] elems;

private int top, size;

/*@ requires !isFull() && obj != null;

ensures top == \old(top) + 1 &&

Trang 15

Class Mystack {

private Object[] elems;

private int top, size;

Trang 16

Class Mystack {

private Object[] elems;

private int top, size;

/*@ ensures \result <==> top == -1; @*/

public boolean isEmpty() { } }

Trang 17

Class Mystack {

private Object[] elems;

private int top, size;

/*@ ensures \result <==> top == size – 1; @*/

public boolean isFull() { } }

Trang 18

Ví dụ 2

import java.util.Vector;

public interface Company {

public Vector getEmployees();

public Vector getRooms();

public void hire(Employee e);

public void move(Employee e, Room r);

public boolean roomsAvailable();

}

public interface Employee{

public boolean hasOffice();

}

Trang 19

import java.util.Vector;

public interface Company {

public Vector getEmployees();

public Vector getRooms();

public boolean roomsAvailable();

/* Contract for hire(Employee e) */

/*@ requires e != null;

requires !getEmployees().contains(e); // do not employ twice

requires !e.hasOffice(); // does not own an office somewhere else requires roomsAvailable(); // there must be an office left

ensures getEmployees().contains(e); // added to list of employees

ensures getRooms().contains(e.getOffice()); // assign one of our offices ensures e.hasOffice(); // office assigned

@*/

public void hire(Employee e);

Trang 21

Design by Contract trong môn học này

§  JML như là một đặc tả

§  ESC/Java 2 là công cụ kiểm tra chính

Trang 22

LOGO

Ngày đăng: 08/05/2021, 13:14

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm