(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语 ...
随机推荐
- 第八章、小节三keep-alive
主要缓存的是ajax中的json 我的路由中的内容被加载过一次,我就把路由中的内容放到内存中,下次再进入这个路由的时候,不需要重新加载页面,直接从内存中获取数据. 切换不同城市,调用不同城市数据 但是 ...
- frida入门总结
一.Frida概述 Frida是一款轻量级HOOK框架,可用于多平台上,例如android.windows.ios等. frida分为两部分,服务端运行在目标机上,通过注入进程的方式来 ...
- React-redux: React.js 和 Redux 架构的结合
通过Redux 架构理解我们了解到 Redux 架构的 store.action.reducers 这些基本概念和工作流程.我们也知道了 Redux 这种架构模式可以和其他的前端库组合使用,而 Rea ...
- 深入理解计算机系统 (CS:APP) - 高速缓存实验 Cache Lab 解析
原文地址:https://billc.io/2019/05/csapp-cachelab/ 这个实验是这学期的第四个实验.作为缓存这一章的配套实验,设计得非常精妙.难度上来讲,相比之前的修改现成文件, ...
- java-3个例子(新手)
//创建的一个包名. package ri0318; //创建的一个类. public class Li3 { //公共静态的主方法. public static void main(String[] ...
- 洛古 P1312 Mayan游戏(dfs+剪枝)
题目链接 这道题和俄罗斯方块很像 很明显,我们可以看出这是一个dfs,但是,我们需要几条剪枝: 1.如果只剩下1个或2个同样颜色的方块,那么直接退出 2.相同的块不用交换 3.注意优先性,优先左边换右 ...
- sqlmap详解
sqlmap是一个自动化的sql注入工具,其主要功能是扫描.发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库有MySQL, Oracle,PostgreSQL, Microsof ...
- MyBatis框架——动态SQL
MyBatis 作为⼀个“半⾃动化”的 ORM 框架,需要开发者⼿动定义 SQL 语句. 在业务需求⽐较复杂的情 况下,⼿动拼接 SQL 语句的⼯作量会⾮常⼤,为了适⽤于不同的业务需求,往往需要做很多 ...
- 深入Redis客户端(redis客户端属性、redis缓冲区、关闭redis客户端)
深入Redis客户端(redis客户端属性.redis缓冲区.关闭redis客户端) Redis 数据库采用 I/O 多路复用技术实现文件事件处理器,服务器采用单线程单进程的方式来处理多个客户端发送过 ...
- PyCharm导入selenium的webdirver模块出错
selenium安装好后准备验证一下,导入的webdriver有红色标识,检查了浏览器驱动的.环境变量仍然没有解决问题. 后来在百度找到了原因:项目没安装selenium Interpreter 打开 ...