链接面向对象编程 (POOV)






4.69/5 (16投票s)
POOV 是一种面向对象编程语言的编程技术,由 Eduardo Mireles 工程博士和专家程序员在 MIRA 软件工厂开发。它促进了软件解决方案的编码。
引言
链接面向对象编程 (POOV)
什么是 POOV?
POOV 是一种面向对象编程语言的编程技术,由 Eduardo Mireles 工程博士和专家程序员在MIRA 软件工厂开发。
- 它促进了软件解决方案的编码。
- 它提供了更高的代码稳定性和易维护性。
- 有效实现遵守截止日期和成本。
- 减少故障和风险。
促进软件解决方案的编码
使用面向对象语言的一个主要问题是无法充分发挥其潜力,因为最广泛使用的数据库是关系型数据库,这与面向对象的技术不同。
POOV 试图充分发挥 OOP 的潜力,并增加了将对象状态存储在关系数据库中的便利性,因此 OOP 应该进行小的偏离,并将编程引导至对象的“链接”,从而得到 POOV。
OOP 会怎么样?
- 使用 UML 详细建模很困难。
- 通常最后模型与代码不匹配。
- 类最终具有与模型中引用的类不同的方法。
- 方法的逻辑、定义和功能在很大程度上取决于程序员的风格。
- 将对象的状态存储在关系数据库中更加复杂,或者代码面向数据管理。
- 相同的业务规则可能包含在不同的类中。
POOV 会怎么样?
- 使用 UML 详细建模到代码行很容易。
- 代码已生成并附加到模型。
- 代码结构完美。
- 方法的逻辑、定义和功能是预定义的,并遵循分析。
- 对象的状态与存储在关系数据库中完全兼容。
- 业务规则的所有者已明确标识。
- 生成标准化的代码,与程序员风格无关。
POOV 建议将代码的重点放在
- 专注于维护对象的持久性及其恢复。
- 专注于链接、规则和行为的类型。
- 维护专门的结构以提供这些功能。
为此,POOV 拥有 2 个专用接口
- 一个提供自身接口功能的接口(*Base Interface*)。
- 一个提供其他类型对象功能的接口(*Linked Interface*)。
1.- 持久性
系统中的所有对象都必须确保其持久性以及恢复能力。
为此,POOV 建议为所有类提供一个通用接口,以确保这一点。
Base Interface 管理类的对象持久性,其方法具有多种功能和特性。
- 映射特性包括:ID、IsDetached、PersistentState、Accepted、Hash 和 Schema。
- 构建器方法:NewObject、Initialize、Clone、Reset、Refresh、Restore,以及类自身的构建器和析构函数。
- 更新器方法:Add、Update、Delete、AcceptChanges、RejectChanges、ValidateAdd、ValidateUpdate 和 ValidateDelete。
- 选择方法:Select、FreeSelect、Find 和 Exist。
- 传输方法:Get、Set、Notify、Quiet 和 ToString。
- 比较器方法:Equals、Same 和 CompareTo。
有了这个 Base 接口,就足以确保和管理任何类型对象的持久性,无需更多。
Base Interface 确保任何类型对象的持久性,这个接口称为 CCB(Control Class Base)。
CCB 的目的是标准化持久性管理。
(例如,无论是 Loan、Invoice 还是 Product 类,持久性都以相同方式管理)
示例
新贷款
NewLoan = Loan.NewObject(); NewLoan.Account = 5803; NewLoan.Bank = “National”; NewLoan.Amount = 15000; NewLoan.Add(); NewLoan.AcceptChanges();
更改贷款
MyLoan = Loan.Find(5803); MyLoan.Payment = 1000; MyLoan.Update(); MyLoan.AcceptChanges();
搜索贷款
MyLoans[] = Loan.Select(“National”);
新发票
NewInvoice = Invoice.NewObject(); NewInvoice.Number = 5803; NewInvoice.Customer = “ABC Store”; NewInvoice.Amount = 376.25; NewInvoice.Add(); NewInvoice.AcceptChanges();
更改发票
MyInvoice = Invoice.Find(5803); MyInvoice.Payment = 150; MyInvoice.Update(); MyInvoice.AcceptChanges();
搜索发票
CustInvoices [] = Invoice.Select(“ABC Store”);
新产品
NewProduct = Product.NewObject(); NewProduct.Code = “RD-671”; NewProduct.Name = “Solar Panel 260 Watts”; NewProduct.Price = 280; NewProduct.Add(); NewProduct.AcceptChanges();
更改产品
MyProduct = Product.Find(“RD-671”); MyProduct.Price = 259.99; MyProduct.Update(); MyProduct.AcceptChanges();
搜索产品
ListProducts[] = Product.Select();
所有对象都需要创建、更新、搜索和删除。CCB 提供了接口,以便能够以标准化方式执行这些操作。
注意:这里显示的是 CCB 接口的功能,类的特性可能会更多或不同。
2.- 链接
在 POOV 中,有 10 种不同类型的链接,根据其功能分为 3 组
- 限定词:简单限定词(CS)、组合限定词(CC)和独立限定词(CI)。
- 关系:简单关系(RS)、组合关系(RC)、历史关系(RH)、对合关系(RI)。
- 连接:简单连接(JS)、唯一限定连接(JU)和多重限定连接(JM)。
Linked Interface 管理两个类对象之间的父子依赖关系,分为父端(P)和子端(H)两部分。
P(父)的链接方法是
- Link、Contain、Remove、Replace、LinkedClassName、ValidateLink、ValidateRemove。
- Update、AcceptChanges、RejectChanges。
H(子)的链接方法是
- NewObject、Find、Exist、Select。
- Compute、Avg、Count、Max、Min、Sum(可以更好地进行计算)。
除了这些方法之外,H 链接接口还有一个附加功能,即包含父对象。
RC 链接类型(组合关系)的示例。
RC 链接有 2 部分:RCP 为父提供功能,为子提供 RCH 功能,以便链接能够运行。
Linked Interface 的目的是标准化类之间关系的管理。
例如,无论是 InputOutput 和 Kardex 类之间的链接,还是 Item 和 Invoice 之间的链接,或者 Invoice 和 Payments 之间的链接,链接的管理方式都是相同的。
示例
新销售
MyKardex = Kardex.Find(“RD-671”); OutSale = InputOutput.NewObject(); OutSale.Quantity= 3; OutSale.IO = “Output”; MyKardex.Link(OutSale); MyKardex.Update(); MyKardex.AcceptChanges();
Kardex 详情
IOs[] = MyKardex.LinkedInputOutput ();
新发票项目
MyInvoice = Invoice.Find(5803); NewItem = InvoiceItem.NewObject(); NewItem.Cant = 3; NewItem.Product = “Solar Panel 260 Watts”; MyInvoice.Link(NewItem); MyInvoice.Update(); MyInvoice.AcceptChanges();
发票详情
InvoiceDetail[] = MyInvoice.LinkedInvoiceItem();
新发票付款
MyInvoice = Invoice.Find(5803); NewPay = Payments.NewObject(); NewPay.Amount = 75.80; NewPay.Date = “11/06/2015”; MyInvoice.Link(NewPay); MyInvoice.Update(); MyInvoice.AcceptChanges(); Invoice detail: InvoicePays[] = MyInvoice.LinkedPayments();
所有链接都需要进行连接、移除、替换,并了解父对象和子对象。
Linked Interface 提供了接口,以便能够以标准化方式执行这些操作。
注意:这里显示的是 *Linked Interface* 的功能,类的特性可能会更多或不同。
简化编码
- POOV 已经拥有许多在其功能中定义良好且定义明确的方法和功能,可以用于任何软件开发,不再需要其他。
- POOV 还拥有定义明确的区域和子区域专业化代码结构。
- 允许创建专业化和可重用的代码*代码片段*。
一个*代码片段*是可重用的一段代码。
POOV 提倡使用*代码片段*,并定义了其中许多,以便他们能够生成基于先前测试过的代码块的解决方案。
POOV 对每个链接以及将提供功能的*代码片段*进行建模和规范。
因此,Cliente(客户)类将使用一个 CCB *代码片段*进行编码,该代码片段将添加 3 个*属性* Str *代码片段*、一个 CCH *代码片段*、另一个 CSP 和一个 RSP *代码片段*。
例如,要对 Factura(发票)和 Partida(项目)之间的链接进行编码,将
- *代码片段* CCB 用于构建 Invoice 类(持久性功能)。
- 属性的*代码片段*(DateTime、Int、Curr、Str 等)用于为 Invoice 添加每个特性。
- 步骤 1 和 2 重复,但用于编码 Item 类。
- 在 Invoice 类的 Links Region 中,插入 RCP *代码片段*,它链接到 Item 类。
- 在 Item 类的 Links Region 中,插入 RCH *代码片段*,它链接到 Invoice 类。
就完成了。
C# 中 Visual Studio 的字符串属性*代码片段*示例。
/// <summary> /// Obtiene o establece $Descripcion$ /// </summary> public string $PropertyName$ { get { if (this.cObj.IsNull["$MPName$"]) { return string.Empty; } else { return (string)this.cObj["$MPName$"]; } } set { // if (value.Equals(string.Empty)) throw new Exception("El valor de $PropertyName$ no puede ser cadena nula."); if (value.Length > $Length$) { throw new Exception("$PropertyName$ debe tener un máximo de $Length$ caracteres."); } this.cObj["$MPName$"] = value; } // ToDo Copie y cotre la siguiente línea y péguela la región "Propiedades" del método Initializes. lTpObj.Add(MIRA.Data.Property.NewObject(lTpObj, "$MPName$", "$FieldName$", typeof(System.String), $Length$)); // ToDo Copie y cotre la siguiente linea y péguela en la Interfaz de la clase. string $PropertyName$ { get; set; } // ToDo Copie y cotre la siguiente linea y péguela en el método Get. pData.$PropertyName$ = this.$PropertyName$; // ToDo Copie y cotre la siguiente linea y péguela en el método Set. this.$PropertyName$ = pData.$PropertyName$; }
使用 POOV 生成代码就是连接*代码片段*,这些*代码片段*已经在多个开发中进行了测试。
最终可以附加到一个应用程序模型,该模型健壮、稳定且无缺陷。
易于维护
由于 POOV 具有定义明确且分为区域和子区域的结构,任何更改、改进或缺陷都可以完全定位,并估算其影响。
这使得维护和生成新版本更加容易。
遵守截止日期和成本效益
由于 POOV 通过组装部件生成代码,并且模型中的所有部件都已定义,因此可以准确量化
- 编码时间。
- 成本。
- 进度。
- 更改。
减少故障和风险
使用经过验证的*代码片段*进行编码,代码中的故障风险降低;并且由于在 POOV 分析实践下,模型由客户和开发人员验证,因此不准确和误解的风险降低,从而生成有效的应用程序来满足需求。
POOV 是一种非常有用的编程技术,可以帮助开发出更好的代码。
PPT 文档(西班牙语)https://1drv.ms/p/s!Aotgp_wzjDaZgawTGcq8poOY3newaA
联系方式:capacita@poov.mx