(C#、JavaScript)面向对象的程序设计
面向对象(OOP)的理解
喜欢程序的朋友们,大家应该都听过一句话“万物皆对象”,感觉老牛X了。
面向对象的程序设计,它是围绕真实世界来设计程序的。
面向对象三要素:封装、继承、多态。
我们可以定义一个类,用来表示小轿车,并且定义小轿车的一些属性跟行为。然而现实中,有很多种类的车,有公交车、货车、出租车等。难道每次都要定义相对应的类吗?这样的话,太麻烦了,我们可以将这些进行一次抽象,这些车是不是都属于车的范畴内。既然这样的话,有很多属性跟行为是大家都有的,只是具体不同罢了,那我们便定义一个抽象类(Vehicle),让公交车、货车、出租车来继承这个类,之后只需重写其中的方法,或者修改对应的属性即可。以上工作做好了之后,便可以将公交车、货车、出租车来实例化一下(也就是new操作),只有实例化后,才能称得上一个对象。由此,万物皆对象便自然而然理解了吧。
(没有女朋友的话,咱new一个,嘿嘿嘿)
缓解眼疲劳

面向对象语言主要有两种:一、强类型的(C#、Java等) 二、弱类型的(JavaScript)。
1、首先用强类型的C#语言来具体介绍一下面向对象。(Java个人不是太了解的。。。)
代码如下:
封装
//定义一个抽象类 Vehicle 将一些属性跟行为封装在这个类里供后面的类继承
abstract class Vehicle()
{
public string myName;//这个是字段,不是属性
//属性
public string Appearance { get; set; } = "red"; //外观颜色,默认是红色,而且该属性可读可写
public string Weight { get; set; } = "1.8t" //车身重量
public string Brand { get; set; } //品牌
//行为(方法)
public virtual void Run() //使用virtual关键字以供继承它的类重写该方法
{
//启动
}
public virtual void Stop()
{
//停车
}
}
继承
class Car : Vehicle()//小轿车继承Vehicle这个类
{
//属性重新赋值---构造函数(用来构造对象的,顺便设置本类的部分属性值)
public Car()
{
this.Appearance = "小轿车外观";
this.Weight = "1.5t";
}
//行为(方法) 重写Vehicle里面的Run方法
public override void Run()
{
//小轿车启动
}
public override void Stop()
{
//小轿车停车
}
}
class Bus : Vehicle()
{
//属性
public Bus()
{
this.Appearance = "公交车外观";
this.Weight = "2t";
}
//行为(方法)
public override void Run()
{
//公交车启动
}
public override void Stop()
{
//公交车停车
}
}
多态
class static void Main()//程序入口
{
Car car = new Car();//实例化一个对象
car.Brand = "劳斯莱斯";//重新设置属性的值
car.Run();//启动小轿车
Bus bus = new Bus();
bus.Run();//启动公交车
//小轿车和公交车调用了同一个Run方法,却产生了不同的效果;
这便是多态,不同的对象调用调用同一个方法,产生了不同的行为。也是面向对象程序设计的魅力所在
}
2、接下来使用弱类型JavaScript语言来介绍一下面向对象。
代码如下:
//最简单的方式
var Vehicle={
Appearance:"",
Weight:"",
Brand:"",
Run:function(){},
Stop:function(){}
}
//js语言也可以设置某个属性是可读还是可写,只不过稍微有些复杂
如下:
Objec.defineProperty(Vehicle,"Appearance",{
writable: false//不可写,意思就是不能修改该属性的值
})
//组合使用构造函数模式跟原型模式---这里可能有些复杂,具体原型在之后的博客中详细介绍
function Vehicle(Appearance,Weight,Brand)
{
this.Appearance=Appearance;
this.Weight=Weight;
this.Brand=Brand;
}
Vehicle.prototype={
constructor:Vehicle,
Run:function(){},
Stop:function(){}
}
看到这里,解释下强类型跟弱类型的区别:
强类型:指的是具体的值的类型是一定的,定义int型变量,需要用到int关键字;定义string型变量,需要用到string关键字;现在C#也支持使用var关键字来定义变量,但定义的时候,必须要赋值。原理其实就是根据赋的值来推测出这个变量是什么类型的,也就是说根据赋的值来推测出这个var指的是int还是string。
弱类型:在JavaScript中,定义变量都是用的var关键字,不管什么类型的变量都可以使用var来定义。
缓解眼疲劳2

顺带说下, C#(Java)也属于服务端语言的行列,而JavaScript属于客户端语言。
什么意思?
就是C#是运行在服务器上的,JavaScript运行在客户端上。我们平常浏览的网页其中的JavaScript语言就是运行在浏览器上的,我们可以通过浏览器直接看JavaScript代码,而服务端语言我们是看不到的。
(C#、JavaScript)面向对象的程序设计的更多相关文章
- JavaScript 面向对象的程序设计(一)之理解对象属性
首先,JavaScript 面向对象的程序设计,主要分三部分. 理解对象属性: 理解并创建对象: 理解继承. 本文主要从第一方面来阐述: 理解对象属性 首先我们来理解Javascript对象是什么?在 ...
- 重学js之JavaScript 面向对象的程序设计(创建对象)
注意: 本文章为 <重学js之JavaScript高级程序设计>系列第五章[JavaScript引用类型]. 关于<重学js之JavaScript高级程序设计>是重新回顾js基 ...
- JavaScript 面向对象的程序设计
面向对象(Object-oriented,OO)的语言有一个标志,那就是它们都有类的概念.而通过类可以创建任意多个具有相同属性和方法的对象.前面提到过,ECMAScript中没有类的概念,因此它的对象 ...
- JavaScript面向对象的程序设计
ECMAScript支持面对对象(oo)编程,但不使用类或接口.对象可以在代码执行过程中创建和增强,因此具有动态性而非严格定义的实体.在没有类的情况下,可以此采用下列模式创建对象. 工厂模式,使用简单 ...
- Learn JavaScript(面向对象的程序设计01)
最新更新请访问: http://denghejun.github.io JavaScript与OOP JavaScript作为web前端一种重要的脚本技术,已被大多开发人员所熟知.compare ...
- javascript面向对象的程序设计之Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptor()用于获取给定属性的描述信息,这个描述信息是一个对象. 如果是访问器属性,则这个对象的属性有configurable,enumerabl ...
- JavaScript面向对象程序设计:数组
或许你会奇怪,面向对象的程序设计为什么从数组开始讲起?这是因为……其间的种种关系吧……嘿嘿,这里先卖个关子,先来看看我们熟悉的数组在JavaScript里面是什么样子的. 1. 创建数组 在J ...
- JavaScript 面向对象程序设计(下)——继承与多态 【转】
JavaScript 面向对象程序设计(下)--继承与多态 前面我们讨论了如何在 JavaScript 语言中实现对私有实例成员.公有实例成员.私有静态成员.公有静态成员和静态类的封装.这次我们来讨论 ...
- JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承
相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...
随机推荐
- php实现post跳转
大家否知道php可以利用header('Location')实现get请求跳转. php利用curl可以实现模拟post请求. 但是却找不到php现成的实现post跳转.那么问题来了,如果有这个需求该 ...
- redis 出现(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details
如果在ubuntu安装的redis含端口使用,但是某些时候常常出现 (error) MISCONF Redis is configured to save RDB snapshots, but is ...
- C++ 标准模板库(STL)-string
总结了一些c++ string库常用的库函数用法 #include <iostream> #include <string>//string类可以自动管理内存 using na ...
- axios请求拦截器
import axios from 'axios'; // 创建axios实例 let service = null; if (process.env.NODE_ENV === 'deve ...
- foobox,基于foobar2000汉化版的CUI配置整合版
名 称:foobox 作 者:dreamawake 发布博客:https://www.cnblogs.com/foobox/ GitHub: https://github.com/dream7180/ ...
- 免注册公众号的三种微信推送消息服务的C#代码实现
有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如 ...
- echar图柱状图和折线图混合加双侧y轴坐
代码如下: floorSalesBar(){//方法名====这个方法应该放在methods中并在mounted中调用哦 methods let _this = this; let myChart = ...
- sleep()和wait()方法的区别
1,sleep()声明在Thread类中,而且是静态方法: wait()声明在Object类中,而且必须由锁对象调用. 2,sleep()时间达到后恢复: wait()可以设置事件自动恢复,如果没有设 ...
- SSI服务器端包含注入
服务器端嵌入:Server Side Include,是一种类似于ASP的基于服务器的网页制作技术.大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server ...
- 数据分析之上篇---numpy模块
目录 一.简介 二.ndarray -多维数组对象 1.为什么要是用ndarray? 2.创建ndarray对象 3.ndarray多维数组创建 4.常用属性 5.数据类型 6.ndarray 数组创 ...