首页 > 其他分享 >面向对象的方法

面向对象的方法

时间:2023-02-15 15:56:36浏览次数:32  
标签:end 对象 面向对象 派生类 方法 class procedure

​ 面向对象编程模式如图所示,在这种模式中,函数和它需要存取的数据封装在称为对象的包中。对象之间的数据访问是间接的,是通过接口进行的。我们可以将对象看做是鸡蛋,蛋黄是数据;蛋清是访问数据的函数;蛋壳代表接口(即那些公开或公布的方法和属性)。蛋壳接口隐匿了函数和数据结构的实现。当数据结构和内部函数变化时,这种变化被限制在内部的局部范围内。由于接口的相对稳定性,使得这种内部变化的影响不会波及到其他对象,除非蛋壳破裂(接口发生变化),因而面向对象模式开发的程序是易于维护和扩展的。对象是被定义为一个封装了状态(数据)和行为(操作)的实体。

image-20220720153401179
  • 在面向流程编程模式的过程是:现实世界→面向过程建模(流程图、变量、函数)→面向过程语言→执行求解
  • 在面向对象编程模式的过程是:现实世界→面向对象建模(类图、对象、方法)→面向对象语言→执行求解

面向对象的特点主要概括为抽象性、继承性、封装性和多态性:

  • 继承性——新的对象类由继承原有对象类的某些特性或全部特性而产生出来,原有对象类称为基类(或称超类),新的对象类称为派生类(或子类,在本书中统一称为派生类),派生类可以直接继承基类的共性,又允许派生类发展自己的个性。继承性简化了对新的对象类的设计。

  • 封装性——指对象的使用者通过预先定义的接口关联到某一对象的服务和数据时,无需知道这些服务是如何实现的。即用户使用对象时无需知道对象内部的运行细节。这样,以前所开发的系统中已使用的对象能够在新系统中重新采用,这就减少了新系统中分析、设计和编程的工作量。

  • 多态性——指不同类型的对象可以对相同的激励做出适当的不同响应的能力。多态性丰富了对象的内容,扩大了对象的适应性,改变了对象单一继承关系。

构造与析构

  • constructor

    ​ 声明或定义一个构造函数,可以用于类类型、对象类型、结构类型。当类被实例化时,首先调用此函数,构造函数一般用Create表示,Create方法能够连带类中存在的CreateWnd方法。开始部分使用inheritcd保留字来调用父类的构造函数,单独用inherited:就是继承父类的同名同参数方法,即不带参数就是默认调用同名函数

  • destructor

    ​ 声明或定义一个析构函数,可以用于类类型、对象类型。析构函数主要用来释放对象资源。析构函数只允许覆盖,不允许重载。在类被释放时自动调用,析构函数通常用Destroy作为函数名

(1)创建对象

​ 在使用一个对象之前,用class关键字声明一个对象。可以在一个程序或单元的type部分声明一个对象类型:

type
    TFooObject = class;

​ Delphi中的惯例是类型名称以T开头,如TObject,这仅仅是一个惯例

​ Delphi的对象至少有一个构造器称为create(),调用构造器的语法如下

FooObject:= TFooObject.Create;

(2)销毁对象

​ 当用完对象,应该调用这个实例的Free()方法来释放它。Free()首选进行检查保证这个对象实例不为NIL,然后调用对象的析构方法Destroy()。

FooObject.free;

(3)创建方法

​ 创建一个方法用两个步骤,首先在对象类型的声明中声明这个方法,然后再用代码定义方法

type
    TBoogieNights = class
        Dance: Boolean;
        Procedure DoTheHustle;
    end;

procedure TBoogieNights.DoTheHustle;
begin
    Dance:= True;
end;

(4)方法的类型

​ 对象的方法能定义成静态(static)、虚拟(virtual)、动态(dynamic)或者消息处理(message)。请看下面的例子

TFoo = class
    procedure IAmAStatic;
    procedure IAmAVirtual; virtual;
    procedure IAmADynamic; dynamic;
    //抽象方法是一种在声明它的类中暂时没有实现,而由它的派生类来实现的虚方法或动态方法。声明抽象方法时,必须在virtual或dynamic后而使用限定符。
	procedure DoSomething; virtual;abstract;
    procedure IAmAMessage(var m: TMessage); message wm_SomeMessage;
end;

(5)方法的覆盖

​ 覆盖一个方法,在派生类的声明中用override代替virtual或dynamic

type
  TMan = class (TObject)
	public
	function SayHello:string;virtual
end;
  TChinese = class (TMan)
	public
	function SayHello;string override;
end;
  TAmerican = class (TMan)
	public
	function SayHello:string override;
end;

implementation
var
	AMan:TMan;
begin
	AMan:= TChinese.creat;
	edit1.text:= AMan.SayHello;  //调用的是 TChinese.SayHello
	AMan.free;
	
	AMan:= TAmerican.create;
	edit1.text:=AMan.SayHello;  //调用的是TAmerican.SayHello
	AMan.free;
end;

(6)方法的重载

​ 就像普通的过程和函数,方法也支持重载

type
    TSomeClass = class
        procedure AMethod(I: Integer); overload;
        procedure AMethod(S: String); overload;
        procedure AMethod(D: Double); overload;
    end;

(7)重新引入方法

​ 有时候,需要在派生类中增加一个方法,而这个方法的名称与祖先类中的某个方法名称相同。在这种情况下,没必要覆盖这个方法,只要在派生类中重新声明这个方法,直接在派生类中使用reintroduce指示符

type
    TSomeBase = class
        procedure Cooper;
    end;

    TSomeClass = class(TSomeBase)
        procedure Cooper; reintroduce;
    end;

标签:end,对象,面向对象,派生类,方法,class,procedure
From: https://www.cnblogs.com/DQ-MINE/p/17123318.html

相关文章

  • Java main方法所在类初始化顺序
    目录1、main方法特性2、与所在类的关系1、main方法特性访问权限是publicmain()是static静态,因此如果在main方法中调用本类的其他方法也必须是静态方法,否则需要先实例化......
  • selenium webdriver 实例化对象的常用属性和方法
    1.获取当前标签页浏览器渲染之后的网页源代码driver.page_source2.获取当前标签页urldriver.get_url3.关闭当前标签页(如果只有一个标签页则关闭整个浏览器)......
  • String概述以及常用方法
    publicclassDemo01{publicstaticvoidmain(String[]args){Stringname="hello";//“hello”常量存储在字符串池中,字符串池在方法区中,字符串字面值可......
  • Oracle宕机之PMON (ospid: 248987): terminating the instance due to error 484(另附h
    数据库版本:11.2.0.4RAC环境操作系统版本:AsianuxServerrelease7.3数据库报错分析接到业务消息,应用无法访问,开发人员查看日志后发现无法连接数据库。查看数据库进程......
  • Ubuntu下deb包的安装方法
    deb是debianlinus的安装格式,跟redhat的rpm非常相似,最基本的安装命令是:dpkg-ifile.debdpkg是DebianPackage的简写,是为Debian专门开发的套件管......
  • 面向对象详解之三
    面向对象.1封装面向对象三大特征:封装、继承、多态.1.1为什么需要封装?我要用洗衣机,只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构吗?有必要碰电动......
  • 面向对象详解之二
    面向对象.1封装面向对象三大特征:封装、继承、多态.1.1为什么需要封装?我要用洗衣机,只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内部的结构吗?有必要碰电动......
  • 面向对象详解之一
    面向对象面向对象思想概述.1概述Java语言是一种面向对象的程序设计语言,而面向对象思想(OOP)是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算......
  • Linux下Docker及portainer相关配置方法
    一、安装使用DocerCE本文以CentOS7为例,安装dockerCE版本,docker有两种版本,社区版本CE和企业版本EE,此处学习研究以CE版本为例,两种安装方式可选:1、使用yum安装,2、使用脚......
  • 基于Moduli N = (p^r)*q的RSA新攻击方法(结合[强网杯2022]factor进行讲解)
      此篇文章的灵感来源于[强网杯2022]factor,其中就用到了3种基于ModuliN=(p^r)*q的RSA新攻击方法,有兴趣可以看看原paper399.pdf(iacr.org)       定......