Caché 开发(二)~面向对象开发

一、OOP前言

(1)封装

(2)继承(泛化、聚合)

(3)多态(覆盖、重载)

二、Caché的类定义

(1)Caché的类成员

    1.ClassName:唯一类名,包括所属包

    2.Property:属性,类实例的数据集合

        a)、Keywords:

            -Calculated

            -Description

            -Final

            -InitialExpression

            -Private

            -Required

            -Transient

            -Type

        b)、Accessors:

            -Get:write  obj.PropertyGet()

            -Set:do  obj.PropertySet(val)

        c)、Attribute:

            -Data  Type  Properties

            -Object-Valued  Properties

            -Collection  Properties

            -Stream  Properties

            -Multidimensional  properties

    3.Method:类方法和实例方法    

        a)、Arguments

            -Default    Values

            -By  Reference

        b)、Return  Values

        c)、Language

        d)、Keywords

            -ClassMethod

            -Final

            -SQLProc

    4.Query:查询,数据集

        a)、Define the query

            -New  Query  Wizard

            -SQL  Query  &  User-Written  Query

            -4  parts  of  User-Written  Query

        b)、Invoke  the  query

            -do  ##class(%ResultSet).RunQuery("className","queryName",arg,...)

        c)、Dynamic  SQL

    5.Storage:

        a)、%CacheStorage

            -持久对象的默认存储模式,可以自动创建

            -CacheStorage的关键点

                    i、Data Nodes

                    ii、DataLocation

                    iii、IdLocation

                    iv、IndexNodes

                    v、IndexLocation

                    vi、StreamLocation

        b)、%CacheSQL  Storage

            -一种特殊的存储类,通常用于:

                    i、映射老结构的global

                    ii、过SQL Gaateway存储外部关系数据库的结构

    6.Index:索引的存储结构,用于优化频繁访问数据模式

        a)、索引的特点

            -索引为持久化类提供一个优化的实例检索机制

            -定义一个特定的排序与一类相关常用请求的数据子集

            -索引可以定义为一个或多个属性的排序

        b)、排序规则

            -EXACT

            -SQLSTRIGN

            -SQLUPPER

            -ALPHAUP

            -MINUS

            -PLUS

            -SPACE

            -STRING

            -UPPER

    7.RelationShip

        a)、RelationShip的特点:

            -只有持久化类能定义RelationShip

            -RelationShip是双向的,在两个类中都要定义

            -两种类型:1-n,父子

            -自动保证数据完整性

            -RelationShip解析为关系表中的外键

        b)、父子关系的定义:

            -定义方法

            -存储

    8.Class keywords:类关键字,指定整体类的行为

    9.Class Parameters:类参数,自定义类通常需要使用的值

三、Caché的面向对象编程

(1)Caché对象的特点

    1.一个强大的对象模型

        -包括继承,属性,方法,集合,关系,用户定义的数据类型和流

    2.一个灵活的对象持久化机制

    3.控制数据库的持久化类的各个方面   

        -包括索引,约束和指向完整性

    4.一个易于使用的事务和并发模型

    5.自动集成与Caché缓存的SQL通过统一数据架构

    6.与JAVA、C++、ActiveX的交互性

    7.自动提供XML支持

    8.一个强大的协同开发环境:Studio

(2)Caché对象的主要内容

    1.Class Dictionary:类定义,描述每个特定的类库

    2.Class Compiler:一组程序,将类定义转换成可执行代码

    3.object Runtime System:支持对象运行时操作

    4.Caché Class Library:一组Caché安装时先建立的类

    5.Language Bindings:与各开发语言的绑定,Projection

    6.Gateways:外部系统通过网关访问Caché对象

(3)面向对象的数据库开发

    1.类和对象

    2.抽象与建模

    3.继承和多态

    4.封装

    5.可扩展性

    6.对象持久化

    7.对象绑定

(4)Caché对象模型支持以下功能

    1.persistence:持久性

        -对象可以被存储在Caché数据库或外部数据库。同时解析存储对象为关系表,可以使用标准的SQL查询

    2.Properties:属性

        -简单值、对象、嵌入对象、对象引用、数组、集合、流

    3.Custom Data Types:自定义数据类型

        -可以使用应用程序自定义的数据类型

    4.Methods:方法

        -类方法、实例方法

    5.Polymorphism:多态

    6.Inheritance:继承

(5)对象(Object)的:OREF、OID、ID

    1.OREF:

        -一个对象引用,是一个值

        -set obj=##class(test.Person).%New()

    2.OID:

        -一个对象标识符,唯一标识一个持久化对象

        -set obj=##class(test.Person).%OpenId(ID)

    3.ID:

        -一个值,唯一标识一个特定的范围内特定的实例

        -set obj=##class(test.Person).%OpenId(ID)

(6)Caché的Class Type

    1.Transient   Object   Classes

        -临时类,注册类,in memory

        -类型:%RegisteredObject

    2.Persistent   Object   Classes

        -持久类,in DB

        -类型:%Persistent

    3.Serial   Object   Classes

        -序列化类,in memory,or embedded within a persistent object

        -%SerialObject

    4.Data   Type   Classes

        -数据类型类,依附于某个对象

(7)继承与多重继承

    1.继承

    Class  User.MyClass  Extends %Persistent  [Class Type = persistent] { }

        -注意:对Class Type的要求,再不同版本之间有差异

    2.多重继承

    Class  X  Extends(A,B,C){ }

        -属性:所有父类的集合

        -优先级:后面的超类属性覆盖前面的超类属性

        -关键字:来源于第一个超类

(8)使用Caché对象——1

    a)、Excute  Method

        -Do  oref.MethodName(arglist)

        -Set  value = oref.MethodName(arglist)

    b)、Excute  ClassMethod

        -Do  ##class(Classname).MethodName(arglist)

        -Set  value = ##class(Classname).MethodName(arglist)

    c)、New Object

        -Set  oref = ##class(Classname).%New()

    d)、Get  Property

        -Set  value = oref.PropertyName

        -Set  value = oref.PropertyName.GetAt(n)    //List  property

        -Set  value = oref.PropertyNameGetAt(key)    //Array  property

(9)使用Caché对象——2

   a)、Modify  Properties

        -Set oref.PropertyName = value    //Set car.Owner = person

        -Set oref.PropertyName.RefPropertyName = value

    b)、Modify  List  Properties

        -Do oref.PropertyName.Insert(data)    //Do  person.FavoriteColors.Insert("yellow")

        -Do oref.PropertyName.SetAt(data,n)    //Do person.FavoriteColors.SetAt("yellow",2)

        -Do oref.PropertyName.InsertAt(data,n)    //Do person.FavoriteColors.InsertAt("yellow",2)

        -Do oref.PropertyName.SetObjectAt(ElementOid,key)    //property is Array of Object

    c)、Modifying Array Properties

        -Do oref.PropertyName.SetAt(data,key)    //Do palette.Colors.SetAt("255,0,0","red")

        -Do oref.PropertyName.SetObjectAt(ElementOid,key)    //property is Array of Objects

    d)、Modifying Stream Properties

        -Do oref.PropertyName.Write(data)

    e)、Deleting Objects

        -Do ##class(Classname).%Delete(id)Deleting Objects

    f)、Rebuild Index

        -Do ##class(Classname).%BuildIndices()

(10)使用Caché对象——3

    a)、Save Object

        -Do oref.%Save()

        -Set sc = oref.%Save()

    

        TStart

        //...

        Set sc = oref.%Save()

             If $$$ISERR(sc) {        ///If ($$$ISOK(sc))

                   TRollBack

                         Do $System.Status.DisplayError(sc)

             }

            else{

                  TCommit

                  Set id=oref.%Id()

            }

(10)练习

    a)、了解Caché的面向知识。阅读Using Caché Objects

    b)、熟悉持久类的定义

        -属性

        -索引

        -存储结构和索引的global结构

        -method、query

    c)、用面向对象方式代码,实现一个课程管理功能,要求如下:

        -数据:

            i、课程:代码、课程名、授课教师

            ii、授课教师:工号、姓名、性别、出生日期

            iii、学生:学号、姓名、性别、出生日期

            iv、成绩:学生、课程、成绩

        -功能:

            i、实现学生、课程、授课老师的维护,成绩维护(增删改查、事务)

        -命名:test.姓名.ClassName

转载于:https://my.oschina.net/tobeexpertismydream/blog/2986219

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值