9CONCLUSIONS ANDFUTUREWORK
thực hiện chương trình chuyển đổi hành vi bảo quản là rất khó, đặc biệt là ở cấp nguồn. Modern
ngôn ngữ lập trình thông thường như Java cung cấp
nhiều thành ngữ thuận tiện và cú pháp đường mà làm cho nó
rất khó để đảm bảo rằng các chương trình chuyển đổi có
hành vi tương tự như các chương trình đầu vào, hoặc thậm chí là nó
biên dịch ở nơi đầu tiên. Một đặc biệt phức tạp, tuy nhiên
vấn đề rất cơ bản là làm thế nào để đối phó với tên
ràng buộc, mà được quy định bởi một tập hợp phức tạp của việc tìm kiếm
và truy cập các quy tắc kiểm soát.
Trong bài báo này, chúng tôi có introducedJL, một đại diện của
chương trình Java mà tóm tắt đi từ các chi tiết của tên
tra cứu và kiểm soát truy cập, thay vì cung cấp một cái nhìn của các
chương trình mà trong đó tài liệu tham khảo cho các đối tượng khai báo xuất hiện
đã bị khóa, Họ chỉ thay đổi khi tăng trở lại một cách rõ ràng bởi sự
tái cấu trúc, và nếu không giữ nguyên ràng buộc của họ. Chúng tôi
đã chỉ ra rằng tái cấu trúc trở nên mạnh mẽ hơn nhiều
và mạnh mẽ khi xây dựng ở cấp ofJL.
Để cho JLto được sử dụng, chúng ta cần bản dịch từ
Java để JL và ngược lại. Chúng tôi đã cho thấy làm thế nào một ví dụ
dịch thuật có thể đạt được với sự giúp đỡ của một tài liệu tham khảo
chức năng xây dựng và hạn chế khả năng tiếp cận: Các
cấu trúc tài liệu tham khảo trước đó liên kết với một tuyên bố mục tiêu, và sau này xác định cách bố Accessibility
phải được điều chỉnh để đáp ứng các quy tắc kiểm soát truy cập. Chúng tôi đã
thực hiện các bản dịch này và đặt chúng để làm việc bằng cách
thực hiện một số phép tái cấu trúc trên đầu trang của họ. Để
đánh giá việc thực hiện của chúng tôi, chúng tôi đã có hệ thống
áp dụng hai trong số các phép tái cấu trúc cho một cơ quan lớn của các ứng dụng Java RealWorld, cho thấy rằng công cụ của chúng tôi có khả năng
thực hiện các phép biến đổi đó là vượt ra ngoài phạm vi của
động cơ refactoring phổ biến.
Khi chương trình làm việc của chúng tôi, các tên ràng buộc và khả năng tiếp cận
các quy tắc của Java là rất phức tạp và đầy đôi khi
đôi mà đáng ngạc nhiên. Một mặt, sự phức tạp này cung cấp cho các
lập trình viên rất nhiều tính linh hoạt trong sử dụng lại tên và
bỏ qua vòng loại như asthiswherever có thể. Trên
Mặt khác, sự linh hoạt này tấn công trở lại như một xuống cấp
khả năng phát hiện các lỗi lập trình logic tĩnh,
và làm cho nó dễ dàng để giới thiệu các lỗi khi thay đổi các
chương trình, ví dụ bằng một cấu trúc lại. Một ngôn ngữ được thiết kế
để dễ refactoring sẽ có ràng buộc đơn giản hơn nhiều
quy tắc với giá giảm sự tự do trong việc lựa chọn tên.
Có, tất nhiên, nhiều vấn đề khác ngoài việc
đặt tên và khả năng tiếp cận mà refactoring động cơ phải
xử lý và whichJL không giải quyết. Ví dụ như
kiểm soát và lưu lượng dữ liệu tài sản đó phải được bảo quản
trong phương pháp khai thác [33] hoặc đồng bộ hóa của chia sẻ
dữ liệu trong chương trình đồng thời [34]. Theo kinh nghiệm của chúng tôi,
tuy nhiên, những vấn đề này phần lớn là trực giao để đặt tên
và có thể được xử lý một cách riêng biệt
đang được dịch, vui lòng đợi..
