เอกสารนี้มีไว้สำหรับ ผู้สร้างโมเดล ที่ใช้ภาษา Object OCL เอกสารโดยละเอียดสำหรับ วิศวกรภาษา ที่ใช้หรือขยายภาษา OCL ตั้งอยู่ ที่นี่ เราขอแนะนำให้วิศวกรภาษาอ่านเอกสารนี้ก่อนอ่านเอกสารโดยละเอียด
ocl Bookshop {
context Shop s inv CustomerPaysBeforeNewOrder: // invariant
forall Customer c in s.customers: // quantifiers available
c.allowedToOrder implies !exists Invoice i in s.invoices:
i.buyer == c && i.moneyPayed < i.invoiceAmount ;
// Method specification for selling a book
context Invoice Stock.sellBook(String iban, int discountPercent, Customer c)
let availableBooks = // set comprehension
{ book | Book book in booksInStock, book.iban == iban }
pre: !availableBooks.isEmpty && // precondition
c.allowedToOrder;
post: let discount = (100 - discountPercent)/100; // postcondition, let
b = result.soldBook // result variable
in
!(b isin booksInStock) &&
booksInStock.size@pre == booksInStock.size + 1 && // @pre
result.invoiceAmount == b.price * discount;
}
ตัวอย่างการแสดงออกเพิ่มเติม (รวมถึง Commonexpressions ของ Monticore):
a + 3*4; // number expressions
a >= b; a < 3; a == "myName"; // equalities
b implies (c && a) || d; // boolean expressions
forall a in S: foo(a) > 3; // quantifiers
exists a in S: foo(a) > 3;
a ?== b; c ?<= d // elvis operators (dealing with optionals)
S.first; S.size; S.addAll(T); // 30 operators for Lists
a in S; S.add(a); // + more for Sets
max(S) > 3; // + more for numbers
การเป็นตัวแทน OCL ที่เป็นข้อความส่วนใหญ่อาศัยคำจำกัดความใน [RUM16, RUN17] OCL ใช้เพื่อตรวจสอบความถูกต้องของรุ่นอื่น ๆ ตัวอย่างเช่น Book
และประเภท Customer
ได้รับการกำหนดโดยไดอะแกรมคลาส:
classdiagram Bookshop {
class Book {
String name;
String iban;
double cost;
double price;
}
class Shop;
association [1] Shop -> (invoices) Invoice [*];
association [1] Shop -> (customers) Customer [*];
class Stock {
void addBook(Book b);
Invoice sellBook(Book bookToSell, int discountPercent, Customer buyer);
}
association [1] Stock -> (booksInStock) Book [*];
class Customer {
String name;
String phoneNumber;
int customerNumber;
boolean allowedToOrder;
void payInvoice(double moneyWired, Invoice invoice);
}
class Invoice {
int invoiceNumber;
double invoiceAmount;
double moneyPayed;
}
association [1] Invoice <-> (buyer) Customer [1];
association [1] Invoice <-> (soldBook) Book [1];
}
ส่วนนี้อธิบายเครื่องมือบรรทัดคำสั่งของภาษา OCL เครื่องมือให้ฟังก์ชั่นทั่วไปที่ใช้เมื่อทำการประมวลผลแบบจำลอง เพื่อผลกระทบนี้มันให้ funcionality สำหรับ
ข้อกำหนดสำหรับการสร้างและการใช้เครื่องมือ OCL คือ (อย่างน้อย) JDK 8 (JDK 11 และ JDK 14 ได้รับการสนับสนุนอย่างเป็นทางการโดยเรา), GIT และ Gradle ได้รับการติดตั้งและพร้อมใช้งานสำหรับ Bash หากคุณใช้ Docker คุณสามารถใช้คอนเทนเนอร์ Docker ได้โดยไม่ต้องติดตั้ง Java, Git หรือ Gradle
ส่วนย่อยต่อไปนี้อธิบายถึงวิธีการดาวน์โหลดเครื่องมือ จากนั้นเอกสารนี้จะอธิบายวิธีการสร้างเครื่องมือจากไฟล์ต้นฉบับ หลังจากนั้นเอกสารนี้มีการสอนสำหรับการใช้เครื่องมือ
สามารถดาวน์โหลดเครื่องมือเวอร์ชันพร้อมใช้งานได้ในรูปแบบของไฟล์ Jar ที่ใช้งานได้ คุณสามารถใช้ ลิงค์ดาวน์โหลดนี้ สำหรับการดาวน์โหลดเครื่องมือ
หรือคุณสามารถดาวน์โหลดเครื่องมือโดยใช้ wget
คำสั่งต่อไปนี้ดาวน์โหลดเครื่องมือเวอร์ชันล่าสุดและบันทึกภายใต้ชื่อ MCOCL.jar
ในไดเรกทอรีการทำงานของคุณ:
wget "monticore.de/download/MCOCL.jar" -O MCOCL.jar
สามารถรับภาพ Docker ของเครื่องมือรุ่นล่าสุดได้โดยใช้
docker pull monticore/ocl
ในกรณีที่คุณใช้ Docker ให้แทนที่ java -jar MCOCL.jar
ในต่อไปนี้โดย (สำหรับ Windows PowerShell, MAC Terminal หรือ Linux Bash)
docker run --rm -v ${PWD}:/input -w /input monticore/ocl
หรือ (สำหรับบรรทัดคำสั่ง Windows)
docker run --rm -v %CD%:/input -w /input monticore/ocl
ตัวอย่างเช่นคำสั่งนี้จากขั้นตอนที่ 2 ของบทช่วยสอนนี้
java -jar MCOCL.jar -i Example.ocl -pp
กลายเป็น
docker run --rm -v ${PWD}:/input -w /input monticore/ocl -i Example.ocl -pp
เมื่อใช้นักเทียบท่า
เป็นไปได้ที่จะสร้างขวดที่ใช้งานได้ของเครื่องมือจากไฟล์ต้นฉบับที่อยู่ใน GitHub ต่อไปนี้อธิบายกระบวนการสร้างเครื่องมือจากไฟล์ต้นฉบับโดยใช้ Bash สำหรับการสร้างขวดที่เรียกใช้งานได้ด้วย BASH จากไฟล์ต้นฉบับที่มีอยู่ใน GitHub ให้ดำเนินการคำสั่งต่อไปนี้
ก่อนอื่นโคลนที่เก็บ:
git clone https://github.com/MontiCore/ocl.git
เปลี่ยนไดเรกทอรีเป็นไดเรกทอรีรากของแหล่งโคลน:
cd OCL
จากนั้นสร้างโครงการโดยใช้งาน (ข้อมูล: คุณต้องติดตั้ง Gradle สำหรับสิ่งนี้):
gradle build
ยินดีด้วย! ตอนนี้คุณสามารถค้นหาไฟล์ JAR ที่ใช้งานได้ MCOCL.jar
ใน Directory target/libs
(เข้าถึงได้ผ่าน cd target/libs
)
ส่วนก่อนหน้านี้อธิบายถึงวิธีการรับไฟล์ JAR ที่ใช้งานได้ (เครื่องมือบรรทัดคำสั่ง OCL) ส่วนนี้มีการสอนสำหรับการใช้เครื่องมือ OCL ตัวอย่างต่อไปนี้สมมติว่าคุณตั้งชื่อเครื่องมือ MCOCL
ในเครื่อง หากคุณสร้างเครื่องมือจากแหล่งที่มาหรือใช้คำสั่ง wget
ด้านบนคุณก็สบายดี หากคุณดาวน์โหลดเครื่องมือด้วยตนเองคุณควรพิจารณาเปลี่ยนชื่อ Jar ที่ดาวน์โหลดมา
การดำเนินการไฟล์ JAR โดยไม่มีตัวเลือกใด ๆ พิมพ์ข้อมูลการใช้งานของไฟล์
เครื่องมือไปยังคอนโซล:
$ java -jar MCOCL.jar
usage: OCLTool
-c,--coco <arg> Checks the CoCos for the input. Optional
arguments are:
-c intra to check only the intra-model CoCos,
-c inter checks also inter-model CoCos,
-c type (default) checks all CoCos.
-cd4c,--cd4code Load symbol kinds from CD4C. Shortcut for loading
CDTypeSymbol as TypeSymbol,
CDMethodSignatureSymbol as FunctionSymbol, and
FieldSymbol as VariableSymbol. Furthermore,
warnings about not deserializing
CDAssociationSymbol and CDRoleSymbol will be
ignored.
-d,--dev Specifies whether developer level logging should
be used (default is false)
-fs,--functionSymbol <fqns> Takes the fully qualified name of one or more
symbol kind(s) that should be treated as
FunctionSymbol when deserializing symbol files.
Multiple symbol kinds should be separated by
spaces.
-h,--help Prints this help dialog
-i,--input <files> Processes the list of OCL input artifacts.
Argument list is space separated. CoCos are not
checked automatically (see -c).
-is,--ignoreSymKind <fqns> Takes the fully qualified name of one or more
symbol kind(s) for which no warnings about not
being able to deserialize them shall be printed.
Allows cleaner outputs. Multiple symbol kinds
should be separated by spaces.
-p,--path <directory> Sets the artifact path for imported symbols.
Directory will be searched recursively for files
with the ending ".*sym" (for example ".cdsym" or
".sym"). Defaults to the current folder.
-pp,--prettyprint <files> Prints the OCL model to stdout or the specified
file(s) (optional). Multiple files should be
separated by spaces and will be used in the same
order in which the input files (-i option) are
provided.
-s,--symboltable <files> Stores the symbol tables of the input OCL
artifacts in the specified files. For each input
OCL artifact (-i option) please provide one
output symbol file (using same order in which the
input artifacts are provided) to store its
symbols in. For example, -i x.ocl y.ocl -s
a.oclsym b.oclsym will store the symbols of x.ocl
to a.oclsym and the symbols of y.ocl to b.oclsym.
Arguments are separated by spaces. If no
arguments are given, output is stored to
'target/symbols/{packageName}/{artifactName}.ocls
ym'.
-ts,--typeSymbol <fqns> Takes the fully qualified name of one or more
symbol kind(s) that should be treated as
TypeSymbol when deserializing symbol files.
Multiple symbol kinds should be separated by
spaces.
-vs,--variableSymbol <fqns> Takes the fully qualified name of one or more
symbol kind(s) that should be treated as
VariableSymbol when deserializing symbol files.
Multiple symbol kinds should be separated by
spaces.
ในการทำงานอย่างถูกต้องเครื่องมือต้องการอาร์กิวเมนต์ที่บังคับ -i,--input <file>
ซึ่งใช้พา ธ ไฟล์อย่างน้อยหนึ่งไฟล์อินพุตที่มีรุ่น SD หากไม่มีการระบุอาร์กิวเมนต์อื่นเครื่องมือจะแยกวิเคราะห์แบบจำลองเพียงอย่างเดียว
สำหรับการลองทำสิ่งนี้ให้คัดลอก MCOCL.jar
ลงในไดเรกทอรีที่คุณเลือก หลังจากนั้นสร้างที่มี OCL ง่าย ๆ ต่อไปนี้:
ocl Example {
}
บันทึกไฟล์ข้อความเป็น Example.ocl
ในไดเรกทอรีที่ MCOCL.jar
อยู่
ตอนนี้ดำเนินการคำสั่งต่อไปนี้:
java -jar MCOCL.jar -i Example.ocl
คุณอาจสังเกตเห็นว่าเครื่องมือพิมพ์ไม่มีเอาต์พุตไปยังคอนโซล ซึ่งหมายความว่าเครื่องมือได้แยกวิเคราะห์ตัวอย่างไฟล์ Example.ocl
สำเร็จ
เครื่องมือนี้ให้เครื่องพิมพ์สวย ๆ สำหรับภาษา OCL สามารถใช้เครื่องพิมพ์สวย ๆ ได้เช่นเพื่อแก้ไขการจัดรูปแบบของไฟล์ที่มี OCL ในการเรียกใช้งานเครื่องพิมพ์สวยตัวเลือก -pp,--prettyprint
สามารถใช้งานได้ การใช้ตัวเลือกโดยไม่มีอาร์กิวเมนต์ใด ๆ พิมพ์รุ่นที่มีอยู่ในไฟล์อินพุตไปยังคอนโซล
ดำเนินการคำสั่งต่อไปนี้เพื่อลองสิ่งนี้:
java -jar MCOCL.jar -i Example.ocl -pp
คำสั่งพิมพ์โมเดลที่พิมพ์สวยอยู่ในไฟล์อินพุตไปยังคอนโซล:
ocl Example {
}
เป็นไปได้ที่จะพิมพ์โมเดลที่มีอยู่ในไฟล์อินพุตไปยังไฟล์เอาต์พุต สำหรับงานนี้เป็นไปได้ที่จะระบุชื่อไฟล์เอาต์พุตเป็นอาร์กิวเมนต์ไปยัง -pp,--prettyprint
หากมีการจัดเตรียมอาร์กิวเมนต์สำหรับไฟล์เอาต์พุตจำนวนไฟล์เอาต์พุตจะต้องเท่ากับจำนวนไฟล์อินพุต ไฟล์อินพุต i-th ถูกพิมพ์ลงในไฟล์เอาต์พุต i-th
ดำเนินการคำสั่งต่อไปนี้เพื่อลองสิ่งนี้:
java -jar MCOCL.jar -i Example.ocl -pp Output.ocl
คำสั่งพิมพ์โมเดลที่พิมพ์สวยอยู่ในไฟล์อินพุตลงในไฟล์ Output.ocl
สำหรับการตรวจสอบเงื่อนไขบริบทสามารถใช้ตัวเลือก -c,--coco <arg>
การใช้ตัวเลือกนี้โดยไม่มีข้อโต้แย้งใด ๆ ตรวจสอบว่าโมเดลเป็นไปตามเงื่อนไขบริบททั้งหมดหรือไม่
หากคุณสนใจที่จะตรวจสอบว่าแบบจำลองนั้นเป็นเพียงส่วนย่อยของเงื่อนไขบริบทหรือต้องการอธิบายว่าควรตรวจสอบเงื่อนไขบริบททั้งหมดหรือไม่คุณสามารถทำได้โดยการให้หนึ่งในสามข้อโต้แย้ง intra
เทอร์ inter
และ type
intra
ดำเนินการเฉพาะเงื่อนไขบริบทที่เกี่ยวข้องกับการละเมิดเงื่อนไขบริบทภายในโมเดล ตัวอย่างเช่นเงื่อนไขบริบทเหล่านี้ตรวจสอบการตั้งชื่อการประชุมinter
ดำเนินการเงื่อนไขบริบทภายในโมเดลทั้งหมดและตรวจสอบเพิ่มเติมว่าชื่อประเภทในลายเซ็นคอนสตรัคเตอร์ถูกกำหนดหรือไม่type
อาร์กิวเมนต์จะดำเนินการ coniditions บริบททั้งหมด เงื่อนไขบริบทเหล่านี้รวมถึงการตรวจสอบว่ามีประเภทและวิธีการที่ใช้หรือไม่ พฤติกรรมเมื่อใช้ type
อาร์กิวเมนต์เท่ากับพฤติกรรมเริ่มต้นเมื่อใช้ไม่มีอาร์กิวเมนต์ดำเนินการคำสั่งต่อไปนี้เพื่อลองตัวอย่างง่ายๆ:
java -jar MCOCL.jar -i Example.ocl -c -cd4c
คุณอาจสังเกตเห็นว่าเครื่องมือใดที่ไม่สามารถพิมพ์ลงบนคอนโซลได้เมื่อดำเนินการคำสั่งนี้ ซึ่งหมายความว่าโมเดลนั้นเป็นไปตามบริบททั้งหมด
ให้เราพิจารณาตัวอย่างที่ซับซ้อนมากขึ้น เรียกคืน OCL Bookshop
จากส่วนตัว An Example Model
ด้านบน สำหรับการดำเนินการต่อให้คัดลอกการแสดงข้อความของ OCL Bookshop
และบันทึกไว้ใน File Bookshop.ocl
ในไดเรกทอรีที่ไฟล์ MCOCL.jar
อยู่ สำหรับสิ่งนี้คุณจะต้องมีไฟล์สัญลักษณ์ที่มีสัญลักษณ์ของแผนภาพคลาสที่สอดคล้องกับ Bookshop.ocl
จะอธิบายรายละเอียดเพิ่มเติมในส่วนต่อไปนี้ สำหรับตอนนี้เพียงเพิ่ม -p src/test/resources/docs/Bookshop/ -cd4c
ไปยังคำสั่งเพื่อใช้ Tell เครื่องมือที่จะค้นหาไฟล์สัญลักษณ์ที่เตรียมไว้สำหรับตัวอย่างนี้และวิธีการประมวลผล
คุณสามารถตรวจสอบเงื่อนไขบริบทที่แตกต่างกันโดยใช้ตัวเลือก -c,--coco <arg>
ตัวเลือก:
java -jar MCOCL.jar -i Bookshop.ocl -p src/test/resources/docs/Bookshop/ -cd4c -c intra
java -jar MCOCL.jar -i Bookshop.ocl -p src/test/resources/docs/Bookshop/ -cd4c -c inter
java -jar MCOCL.jar -i Bookshop.ocl -p src/test/resources/docs/Bookshop/ -cd4c -c type
คำสั่งเหล่านี้ไม่ควรสร้างผลลัพธ์
หากต้องการดูข้อผิดพลาดช่วยเพิ่มความผิดพลาดให้กับโมเดล แทนที่บรรทัดนี้ใน Bookshop.ocl
{ book | Book book in booksInStock, book.iban == iban }
โดย
{ book2 | Book book in booksInStock, book.iban == iban }
เนื่องจาก book2
ไม่ได้กำหนดเครื่องมือตอนนี้ควรพิมพ์ข้อความแสดงข้อผิดพลาดเมื่อตรวจสอบ Cocos:
$ java -jar MCOCL.jar -i Bookshop.ocl -p src/test/resources/docs/Bookshop/ -cd4c -c
[INFO] DeriveSymTypeOfExpression package suspected
[ERROR] 0xA0309 Bookshop.ocl:<13,12> Could not calculate type of expression "book2" on the left side of SetComprehension
โปรดจำไว้ว่าให้ยกเลิก "ความผิดพลาด"
ในส่วนนี้เราใช้ประโยชน์จากเส้นทางสัญลักษณ์และจัดเตรียมเครื่องมือด้วยไฟล์สัญลักษณ์ (ตารางสัญลักษณ์ที่เก็บไว้) ของรุ่นอื่นซึ่งมีข้อมูลประเภทที่จำเป็น
สร้าง mytypes
ไดเรกทอรีใหม่ในไดเรกทอรีที่เครื่องมือ MCOCL.jar
ตั้งอยู่ ตัวอย่างเช่นตัวอย่าง Bookshop.ocl
จากส่วนแรกจำเป็นต้องมีไดอะแกรมคลาสที่ระบุประเภทข้อมูล คุณสามารถค้นหาไฟล์ไดอะแกรมคลาสนี้ได้ภายใต้ SRC/Test/Resources/Docs/Bookshop/Bookshop.cd
ในการใช้ใน OCL คุณต้องแปลงข้อมูลไฟล์สัญลักษณ์ก่อน Symbol File Bookshop.sym
ของแผนภาพคลาสให้ข้อมูลประเภทที่จำเป็นทั้งหมดเพื่อใช้ประเภทของมันใน OCL หากคุณไม่ต้องการมีส่วนร่วมกับเครื่องมือซีดี ณ จุดนี้คุณสามารถค้นหาไฟล์พร้อมใช้งานภายใต้ SRC/ทดสอบ/ทรัพยากร/เอกสาร/bookshop/bookshop.sym เพียงคัดลอกลงในโฟลเดอร์ mytypes
ของคุณ มิฉะนั้นในการแปลงแผนภาพคลาสเป็นไฟล์สัญลักษณ์คุณต้องใช้ MCCD.jar
จากโครงการ CD4Analysis และแปลงไฟล์ไดอะแกรมคลาสโดยใช้คำสั่งต่อไปนี้:
java -jar MCCD.jar -d false --fieldfromrole navigable -i src/test/resources/docs/Bookshop/Bookshop.cd -s mytypes/Bookshop.sym
เนื้อหาของไฟล์สัญลักษณ์มีความสำคัญเล็กน้อยสำหรับคุณในฐานะผู้ใช้ภาษา ในกรณีที่คุณอยากรู้อยากเห็นและตรวจสอบไฟล์สัญลักษณ์: ไฟล์สัญลักษณ์มีการแสดง JSON ของสัญลักษณ์ที่กำหนดไว้ในโมเดล ในกรณีนี้ไฟล์สัญลักษณ์มีข้อมูลเกี่ยวกับประเภทที่กำหนด โดยปกติแล้วเครื่องมือของภาษามอนติคอร์จะสร้างเนื้อหาของไฟล์เหล่านี้โดยอัตโนมัติและคุณในฐานะผู้ใช้ภาษาจะต้องไม่เกี่ยวข้องกับเนื้อหาของพวกเขา
เส้นทางที่มีโครงสร้างไดเรกทอรีที่มีไฟล์สัญลักษณ์เรียกว่า "เส้นทางสัญลักษณ์" หากเราให้เส้นทางสัญลักษณ์ไปยังเครื่องมือมันจะค้นหาสัญลักษณ์ในไฟล์สัญลักษณ์ซึ่งเก็บไว้ในไดเรกทอรีที่มีอยู่ในเส้นทางสัญลักษณ์ ดังนั้นหากเราต้องการให้เครื่องมือค้นหาไฟล์สัญลักษณ์ของเราเราต้องจัดเตรียมเส้นทางโมเดลไปยังเครื่องมือผ่านตัวเลือก --path <directory>
> คุณสามารถลองใช้โดยใช้โฟลเดอร์ mytypes
ที่คุณเพิ่งสร้างขึ้น:
java -jar MCOCL.jar -i Bookshop.ocl --path <SYMBOLPATH> -c type -cd4c
โดยที่ <SYMBOLPATH>
เป็นเส้นทางที่คุณเก็บไฟล์สัญลักษณ์ที่ดาวน์โหลดมา ในตัวอย่างของเราในกรณีที่คุณเก็บโมเดลไว้ใน mytypes
ไดเรกทอรีให้ดำเนินการคำสั่งต่อไปนี้:
java -jar MCOCL.jar -i Bookshop.ocl --path mytypes -c type -cd4c
ขอให้สังเกตว่าคำสั่งนี้ยังใช้ธง -cd4c
ในการตีความสัญลักษณ์ที่มีให้กับเครื่องมือ OCL นั้นจำเป็นต้องเข้าใจวิธีการตีความสัญลักษณ์ที่เก็บไว้โดยเครื่องมือซีดี ธง -cd4c
เป็นชวเลขสำหรับการทำสิ่งนี้สำหรับ CD4Code นอกจากนี้คุณยังสามารถทำได้ด้วยตนเองโดยใช้ --typeSymbol
, --functionSymbol
และ --variableSymbol
flags ตามด้วยชนิดสัญลักษณ์ที่ควรตีความว่าเป็น TypeSymbol
, FunctionSymbol
และ VariableSymbol
:
java -jar MCOCL.jar -i Bookshop.ocl --path mytypes -c type --typeSymbol <TYPE_SYMBOL_KINDS> --variableSymbol <VAR_SYMBOL_KINDS> --functionSymbol <FUNC_SYMBOL_KINDS>
โดยที่ <TYPE_SYMBOL_KINDS>
, <VAR_SYMBOL_KINDS>
และ <FUNC_SYMBOL_KINDS>
เป็นชื่อที่ผ่านการรับรองของสัญลักษณ์ ในกรณีที่คุณต้องการให้สัญลักษณ์หลายประเภทเพียงเพิ่มพวกเขาคั่นด้วยพื้นที่ ในตัวอย่างของเราการประกาศสัญลักษณ์จาก CD4Analysis จะมีลักษณะเช่นนี้:
java -jar MCOCL.jar -i Bookshop.ocl --path mytypes -c type --typeSymbol de.monticore.cdbasis._symboltable.CDTypeSymbol --variableSymbol de.monticore.symbols.oosymbols._symboltable.FieldSymbol --functionSymbol de.monticore.cd4codebasis._symboltable.CDMethodSignatureSymbol
ขอให้สังเกตว่าเครื่องมือนี้สร้างคำเตือนมากมายเกี่ยวกับสัญลักษณ์ที่ไม่สามารถตีความได้ ไม่ใช่ทุกสัญลักษณ์ของภาษาที่แตกต่างกันอาจน่าสนใจใน OCL ในการระงับคำเตือนที่ไม่ได้ตั้งใจเหล่านี้คุณสามารถบอกเครื่องมือ OCL ที่สัญลักษณ์ชนิดที่คุณไม่ต้องการรับพวกเขาโดยใช้ตัวเลือก --ignoreSymKind <SYM_KINDS_TO_IGNORE>
ในตัวอย่างของเราสิ่งนี้จะเป็นเช่นนี้:
java -jar MCOCL.jar -i Bookshop.ocl --path mytypes -c type --typeSymbol de.monticore.cdbasis._symboltable.CDTypeSymbol --variableSymbol de.monticore.symbols.oosymbols._symboltable.FieldSymbol --functionSymbol de.monticore.cd4codebasis._symboltable.CDMethodSignatureSymbol --ignoreSymKind de.monticore.cdassociation._symboltable.CDAssociationSymbol de.monticore.cdassociation._symboltable.CDRoleSymbol
สำหรับการใช้งานในชีวิตประจำวันนี้มีความซับซ้อนเล็กน้อย ดังนั้นโปรดจำไว้ว่าธง -cd4c
สามารถลดสิ่งนี้ได้เพียงอย่างเดียว
java -jar MCOCL.jar -i Bookshop.ocl --path mytypes -c type -cd4c
ส่วนก่อนหน้านี้อธิบายถึงวิธีการโหลดสัญลักษณ์จากไฟล์สัญลักษณ์ที่มีอยู่ ตอนนี้เราจะใช้เครื่องมือในการจัดเก็บไฟล์สัญลักษณ์สำหรับรุ่น Bookshop.ocl
ของเรา ไฟล์สัญลักษณ์ที่เก็บไว้จะมีข้อมูลเกี่ยวกับวัตถุที่กำหนดไว้ในไฟล์ OCL มันสามารถนำเข้าโดยรุ่นอื่น ๆ สำหรับการใช้สัญลักษณ์ที่แนะนำโดยคำจำกัดความของวัตถุเหล่านี้คล้ายกับวิธีที่เราเปลี่ยนไฟล์ Bookshop.ocl
สำหรับการนำเข้าสัญลักษณ์ที่มีอยู่ในสัญลักษณ์ไฟล์ Bookshop.sym
การใช้ตัวเลือก -s,-symboltable <file>
สร้างตารางสัญลักษณ์ของโมเดลอินพุตและจัดเก็บไว้ในเส้นทางไฟล์ที่กำหนดเป็นอาร์กิวเมนต์ ไม่ว่าจะต้องมีพา ธ ไฟล์หรือต้องมีพา ธ ไฟล์หนึ่งตัวสำหรับแต่ละรุ่นอินพุต ไฟล์สัญลักษณ์สำหรับโมเดลอินพุต i-th ถูกเก็บไว้ในไฟล์ที่กำหนดโดยเส้นทางไฟล์ i-th หากคุณไม่ได้ให้เส้นทางไฟล์ใด ๆ เครื่องมือจะจัดเก็บตารางสัญลักษณ์ของแต่ละโมเดลอินพุตในไฟล์สัญลักษณ์ target/symbols/{packageName}/{fileName}.oclsym
โดยที่ packageName
เป็นชื่อของแพ็คเกจตามที่ระบุในไฟล์ที่มีอยู่ ชื่อและ fileName
เป็นชื่อของไฟล์ที่มีโมเดล ไฟล์ถูกเก็บไว้สัมพันธ์กับไดเรกทอรีการทำงานเช่นไดเรกทอรีที่คุณเรียกใช้คำสั่งสำหรับการจัดเก็บไฟล์สัญลักษณ์ นอกจากนี้โปรดสังเกตว่าในการจัดเก็บสัญลักษณ์อย่างถูกต้องโมเดลจะต้องมีรูปแบบที่ดีในทุกเรื่องและดังนั้นจึงมีการตรวจสอบเงื่อนไขบริบททั้งหมดล่วงหน้า
สำหรับการจัดเก็บไฟล์สัญลักษณ์ของ Bookshop.ocl
ให้ดำเนินการคำสั่งต่อไปนี้ (การตรวจสอบเงื่อนไขบริบทโดยนัยจำเป็นต้องใช้ตัวเลือกเส้นทางสัญลักษณ์):
java -jar MCOCL.jar -i Bookshop.ocl --path mytypes -cd4c -s
เครื่องมือสร้างไฟล์ target/symbols/docs/Bookshop.oclsym
ซึ่งตอนนี้สามารถนำเข้าโดยรุ่นอื่น ๆ เช่นโดยรุ่นที่ต้องใช้วัตถุบางอย่างที่กำหนดไว้ใน Bookshop
หนังสือ OCL
สำหรับการจัดเก็บไฟล์สัญลักษณ์ของ Bookshop.ocl
ในไฟล์ syms/Bookshop.oclsym
ตัวอย่างเช่นดำเนินการคำสั่งต่อไปนี้ (อีกครั้งการตรวจสอบเงื่อนไขบริบทโดยนัยจำเป็นต้องใช้ตัวเลือกพา ธ สัญลักษณ์):
java -jar MCOCL.jar -i Bookshop.ocl -path mytypes -cd4c -s syms/Bookshop.oclsym
ขอแสดงความยินดีคุณเพิ่งจบการสอนเกี่ยวกับการบันทึกไฟล์สัญลักษณ์ SD!