可能是最简单的面向对象入门教程(一 ) 一个鸭子引发的血案
Posted leelds
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可能是最简单的面向对象入门教程(一 ) 一个鸭子引发的血案相关的知识,希望对你有一定的参考价值。
本文假设,诸位看官完全不了解,何谓面向对象,如果已经入门请跳过。另:欢迎交流,不喜勿喷。
假设你只知道class的概念,但是还没有深入理解,不理解属性,不理解方法,那么看下去。
有这么一个场景:
路上,一只狗,一只鸭子,狗跑过去攻击了鸭子,鸭子发出惨叫,并且血量下降。
首先要知道,对象是由类实例化来得,一只狗一定是有狗这个类实例化来得,同理一只鸭子也是必定是鸭这个类实例化得到得。
类是静态得,对象是“活”了得类.
类是一个模子,而对象就是模子刻出来得具体物件。
类->对象,其实就是 抽象->具体。
那么根据场景我们尝试写下狗这个类,根据场景要求,狗能跑,能攻击,同理,鸭子能惨叫,并且有血量。
ok,现在直接用python 写下代码:
class dog(object):
def run(self):
print(‘dog is run‘)
def attack(duck):
print(‘dog is attack duck‘)
duck.screaming()
class duck(object):
hp=100
def screaming(self):
self.hp=self.hp-10
print(‘duck hp is ‘,self.hp)
print(‘duck is sceaming‘)
if __name__==‘__main__‘:
dg=dog()
dk=duck()
dg.run() #狗跑过去
dg.attack(dk) #攻击鸭子dk ,导致鸭子dk惨叫流血
以上,dog是类,dg是dog得实例化对象
如果不习惯python得动态语言特性,请看下面得C#代码实现:
class duck
{
private int hp = 100;
public void screaming()
{
hp = hp - 10;
Console.WriteLine("duck hp is "+this.hp);
Console.WriteLine("duck scraming");
}
}
class dog
{
public void run()
{
Console.WriteLine("dog is run ");
}
public void attack(duck dk)
{
Console.WriteLine("dog is attacking duck");
dk.screaming();
}
}
class Program
{
static void Main(string[] args)
{
var dg = new dog();
var dk = new duck();
dg.run();
dg.attack(dk);
}
}
感觉写起来还是C#爽,读起来还是python好,以下代码用C++实现:
class duck //头文件
{
public:
duck();
~duck();
void screaming();
private:
int _hp=100;
};
#include "duck.h" //cpp
#include <iostream>
using namespace std;
duck::duck()
{
}
duck::~duck()
{
}
void duck::screaming()
{
this->_hp = this->_hp - 10;
cout << "duck hp is:" << this->_hp << endl;
cout << "duck is Screaming"<<endl;
}
#include "duck.h" //头文件
class dog
{
public:
dog();
void run();
void attack(duck *dk);
~dog();
};
#include "dog.h" //cpp
#include "duck.h"
#include <iostream>
using namespace std;
dog::dog()
{
}
void dog::run()
{
}
void dog::attack(duck *dk)
{
cout << "dog attack duck" << endl;
dk->screaming();
}
dog::~dog()
{
}
//主函数
int main()
{
auto dg = new dog;
auto dk = new duck;
dg->attack(dk);
delete dk;
delete dg;
return 0;
}
相对而言,Cpp就不是那么友好了,不过这也只是同一思想得三种实现而已。
那么问题来了,为什么会有面向对象这个概念,这个例子中无外乎就是当满足一个条件时(狗跑过去攻击)某一变量得值发生变化(鸭子血量下降10),我用C语言也能实现啊
为什么要面向对象,为什么要class dog与class duck呢?
那么我将在下一节里说一下自己得看法,欢(shou)迎(xia)拍(liu)砖(qing)。
以上是关于可能是最简单的面向对象入门教程(一 ) 一个鸭子引发的血案的主要内容,如果未能解决你的问题,请参考以下文章
《Java从入门到放弃》JavaSE入门篇:面向对象语法一(入门版)