今天这里讨论一下Delphi中的面向对象编程,这里不做过多过细的讨论,主要做提纲挈领的描述,帮助自己抓做重点。

本随笔分为两部分:

一、面向对象编程

二、面向对象编程详细描述

------------------------------------------

一、面向对象编程

  下面是工程文件的:

{   面向对象编程基础
1、class的定义/类的定义
2、构造函数
3、析构函数
4、封装
5、继承
}
program oop;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Unit1 in 'Unit1.pas';

var
    //定义一个类实例,或者说定义一个类对象
    admin:TPersonMan;
begin

    {   对象的使用
    1、 使用对象之前必须用构造函数创建对象
    2、 对象的构造函数是为Create方法
    3、 对象构造的时候,必须用类型名,因为这个时候对象还没有,所以不能
        用对象实例的名字
    4、 对象的析构,必须用 对象的实例名称
    }
    //实例化对象,访问对象前必须实例化对象
    admin := TPersonMan.Create();
    //访问对象的域
    admin.id := ;
    admin.strName := 'volcanol';
    //访问对象的方法,可以省略(), 最好不要省略,因为不省略的话可以明确的表示
    //访问的是对象的方法
    admin.playFootball();

    //Delphi的Object Pascal和 Java 、C#这样具有自动垃圾回收机制的语言不一样
    //Object Pascal需要自己回收垃圾, 即在对象不再需要使用的时候,需要将对象
    //的空间进行回收, 通过 Free() 方法和 Destroy() 方法实现,通常Free()方法
    //更加的安全。
    admin.Free();
    //admin.FreeInstance();

    ReadLn;
end.

  下面是单元文件unit1:

{   class类的定义
1、class关键字
2、封装
3、继承
4、构造函数
5、析构函数
}

unit Unit1;

interface
uses
    SysUtils;

type
    {   定义一个类
    1、下面三种方式一样

    // 1、方式1
        TPerson=class(TObject)
        end;
    //方式2:
        TPerson=class
        end;
    //方式3
        TPerson=class;

    方式1、
        明确的类的父类, 通过在关键字class后面利用 (父类名称)来完成
    方式2、
        在Delphi的Object Pascal中所有的类都一个共同的祖先类 TObject,
        这个 TObject 类,相当于盘古或者女蜗一样。
    方式3、
        方式3和方式2一样,只是省略了关键字 end,注意只有在定义的类型
        的时候 end 关键字可以省略,其他的时候不能省略。
    要点:
        1、如果用方式2定义则必须定义至少一个域,否则编译报错,
        报错类容为: TPerson 未完全定义。
        2、如果用方式3定义,则必须显式的指出类的父类型
            Type
                TxxxObject=class(TObject);    //正确的定义方法

    }
    {
        Type
            TxxxObject=class;  //编译报错,类型没有定义完全。
    }
    TPerson=class
        //类的域定义, 注意Delphi中Object Pascal的域
        id:integer;   //对象的封装,但是这里没有完全体现封装的真正“意义”。
    end;

    TPersonMan=class(TPerson) //演示继承类的定义方法
        strName:shortString;

        //下面的两种声明方法的方式需要注意都可以,一般推荐使用第一种方式
        //因为这样更能表示这是一个方法。
        procedure playFootball();
        //procedure playFootBall;
    end;

implementation

{   类方法的实现
1、 和普通的方法一样,类的方法也需要在实现中进行定义,否则将不能调用
2、 注意定义类的方法的时候,需要指定方法属于哪一个类," . " 域操作符
    来实现。
            类名.方法名
}
procedure TPersonMan.playFootball;
begin
    WriteLn('I can play football :)  !!!');
end;

end.

二  面向对象编程

  下面的工程对面向对象编程进行了更多的描述。

下面是工程文件:

{    面向对象详细
1、方法特性  static、virtual、dynamic、message
2、访问特性控制: private、public、
3、域的 "属性" 特性
}

program OopDetail;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Unit1 in 'Unit1.pas';

var
    //定义两个对象
    person:TPerson;
    teachar1:TTeachar;

begin
    //实例化变量
    person :=TPerson.Create();
    //初始化域
    person.gender := Male;
    person.name := 'volcanol';
    person.height := 1.75;
    person.weight := ;
    person.nationality := China;
    person.education := Primary;
    person.profession := Unemployment;
    //方法
    person.eat();
    person.language();
    person.playBall();

    WriteLn('');

    //实例化对象
    teachar1 := TTeachar.Create();
    //初始化域
    teachar1.gender := Female;
    teachar1.name := 'Lily';
    teachar1.height := 1.65;
    teachar1.weight := ;
    teachar1.nationality := England;
    teachar1.education := University;
    teachar1.profession :=Teachar;

    {   方法
    1、注意调用 override 的方法的输出
    }
    teachar1.language();
    teachar1.playBall();
    teachar1.teaching();
    teachar1.prepareLesson();
    teachar1.testLesson();

    ReadLn;
end.

  下面是单元文件:

{   class man 的定义
1、定义一个人的基类
2、基类的方法具有static、virtual、dynamic、message
}

unit Unit1;

interface
uses
    SysUtils;

type
    //定义一个表示性别的枚举类型
    TGender=(Male,Female);
    //定义一个表示国籍的枚举类型
    TNation=(China,England,American);
    //定义一个表示学历的枚举类型
    TEducation=(Primary,Junior,Senior,University);
    //定义一个职业的枚举类型
    TProfession=(Unemployment,Teachar,Docotor,Lawyer,Firefight);

//****************************************************
//      定义一个人的类
//  1、人的属性 --- 域
//          性别、姓名、身高、体重、国籍、学历等
//  2、人的能力 --- 方法
//          外语、吃饭、打球等
//*****************************************************
    TPerson=class
        //      域
        gender  : TGender;
        name    : shortstring;
        height  : single;
        weight  : single;
        nationality : TNation;
        education   : TEducation;
        profession: TProfession;

        //      方法
        //静态方法 静态方法不能被覆盖
        procedure eat();
        //虚方法 父类的虚方法可以在子类中被覆盖
        procedure language(); virtual;
        procedure playBall(); virtual;
    end;

    TTeachar=class(TPerson)
        //域

        //      方法
        {   方法的覆盖:
        1、 通过 override 关键字表示
        2、方法的覆盖就是屏蔽父类的同名方法,注意与方法的重载 overload 的
            区别
        3、
        }
        procedure language(); override;
        procedure playBall(); override;
        procedure teaching();
        procedure prepareLesson();
        procedure testLesson();
    end;

implementation

//***********************************************************
//      实现 TPerson类的方法
procedure TPerson.eat();
begin
    WriteLn('I can eating.');
end;

procedure TPerson.playBall();
begin
    WriteLn('I can play ball.');
end;

procedure TPerson.language();
begin
    WriteLn('I can only speak one languave.');
end;

//***********************************************************
//      实现 TTeacher 类的方法
procedure TTeachar.language();
begin
    WriteLn('I can speak lot of languave.');
end;

procedure TTeachar.playBall();
begin
    WriteLn('I can not play ball.');
end;

procedure TTeachar.teaching();
begin
     WriteLn('I am a Chinese teachar.');
end;

procedure TTeachar.prepareLesson();
begin
    WriteLn('I am prepare math lesson.');
end;

procedure TTeachar.testLesson();
begin
    WriteLn('I am testing English.');
end;

end.

欢迎转载本系列文章,转载请注明来源。

Delphi_09_Delphi_Object_Pascal_面向对象编程的更多相关文章

  1. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  2. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  3. PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程

    PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...

  4. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  5. 面向对象编程(OOP)

    什么是面向对象编程,对于面向对象编程与面向过程编程的解释随处可见,个人认为对面向对象编程解释最好的一个定义是:依赖倒转原则是面向对象编程的标志,面向对象编程是一种思想,无论使用哪一种编程语言,如果在编 ...

  6. python 学习笔记7 面向对象编程

    一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...

  7. 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶

    Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...

  8. 进击的Python【第六章】:Python的高级应用(三)面向对象编程

    Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语: ...

  9. 第二章 Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

随机推荐

  1. android_demo之自动生成动态表格

    今天我们学习了如何更好的利用Android 的 layout 布局. 接下来是个简单的栗子去了解这个自动生成的动态的控件(自动生成表格) 这是我们的layout 页面 <?xml version ...

  2. 第1章 游戏之乐——让CPU占用率曲线听你指挥

    让CPU占用率曲线听你指挥 写一个程序,让用于来决定Windows任务管理器(Task Manager)的CPU占用率.程序越精简越好,计算机语言不限.例如,可以实现下面三种情况: CPU的占用率固定 ...

  3. ORACLE 变量定义

    DECLARE v_productid productinfo.productid%TYPE; v_productname ); v_productprice ,); v_quantity ); v_ ...

  4. [Irving] SQL 2005/SQL 2008 备份数据库并自动删除N天前备份的脚本

    以下为SQL脚本,本人以执行计划来调用,所以改成了执行命令,大家可根据自己需要改为存储过程使用 )='E:\MsBackUp\SqlAutoBackup\' --备份路径; --备份类型为全备,1为差 ...

  5. Python开发环境

    --> Python开发环境简备 Python的优点除了其自身的各种特点外,还因为有众多第三方模块,为其扩展了各方面无数的功能. 虽然大多数时候在百度上随便搜都能搜到一大把,pypi (http ...

  6. mysql三张表关联查询

    三张表,需要得到的数据是标红色部分的.sql如下: select a.uid,a.uname,a.upsw,a.urealname,a.utel,a.uremark, b.rid,b.rname,b. ...

  7. 学习OpenBlas

    编译 从OpenBlas Home Page 上下载源代码.make, make install 使用 level 1 向量-向量 操作 #include <iostream> #incl ...

  8. android Fragment 用法小结

    Fragment 是android 3.0引入的新API,是作为Activity的子模块,必须嵌入Activity才能使用. Activity 与 Fragment的关系: 一.依附性: 1. Fra ...

  9. .net Mvc框架原理

    .net Mvc框架原理 本文只是简要说明原理,学习后的总结. 1.当一个Http请求发送后会被URLRoutingModule拦截(这时候也就是正式进入管道,下章会讲管道事件) 2.这时根据Isap ...

  10. Java并发集合(二)-ConcurrentSkipListMap分析和使用

    一.ConcurrentSkipListMap介绍 ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景.ConcurrentSkipListMap和TreeMap, ...