精华内容
下载资源
问答
  • 本文介绍了Unity3D界面及游戏对象基本操作。

    1 界面介绍

    在Windows等图形化操作系统上,熟练地使用菜单、图标、快捷键等,将会极大提升工作效率。因此,要认识一个软件,学会熟练使用他们,就必须先认识软件的界面。

    先点击菜单栏的Window——Layouts——2by3,设置成如下的界面,方便我们了解各个窗口。


    如下图所示,我们将各个区域分割出来,成为7个模块,逐一介绍主要的功能。这七个菜单分别是导航菜单栏、工具栏、场景视图、游戏视图、层次视图、项目视图、监测视图。


    (1)导航菜单栏

    Ÿ   File——场景的创建和保存、工程的创建和保存、程序的打包发布等等。

    Ÿ   Edit——包含一些复制、粘贴、删除、查找等基本编辑操作,还包含软件偏好设置(Preferences)和工程设置(Project Settings)等等。其中最常用的应该是偏好设置了。打开Preferences——External Tools,看到下面的视图。可以设置External Script Editor为自己喜欢的编辑器(例如,我就把内置的MonoDevelop改为了VisualStudio 2013了)。如果你需要发布程序到Android手机,那么你需要安装相应的模块,可以看到图中有Android设置。由于我已经安装了JDK和Android SDK,所以只需要将路径设置好就行了。对初学者来说,这还是有些复杂的,感兴趣可以找“Unity3D发布Android教程”来看看。当然,如果我们在学习初期只用到发布PC端程序,这些设置可以不用管它,保持系统默认就行了。


    Ÿ   Assets——创建、导入、导出素材等功能,一般情况下,Unity3D的外部插件都会通过导入unitypackage的方式来完成。

    Ÿ   GameObject——创建游戏对象以及一些对象属性的设置。

    Ÿ   Component——为游戏对象添加各种组件等。组件可以理解为一个个的小功能,对于一个游戏对象,如果添加了某个组件,它就具备了某种属性或者功能。

    Ÿ   Window——顾名思义,它是对界面的一些设置。

    Ÿ   Help——可以获取一些在线的帮助。

     

    (2)工具栏

    工具栏可以对放置于场景中的对象进行操作,如旋转、平移、缩放等。工具栏中间是游戏运行、暂停、按帧运行按钮。工具栏右侧是账户、显示层设置、窗口布局等。

    (3)场景视图

    场景视图是我们所创建和操作的空间。任何游戏物体都存在于场景中。场景视图是为我们开发者提供便利所设置的,我们可以从各个角度去观看游戏对象设置是否达到预期。场景视图中有很多可以设置的选项,例如2D-3D显示切换、灯光开关等。用到的时候再讨论即可。

    (4)游戏视图

    游戏视图是我们最终程序运行时所显示的画面,也是直接为用户呈现的画面。在我们开发过程中,它显示的是位于最高层级的camera所拍摄到的场景。

    (5)层次视图

    场景中的任何对象,名称都会显示在这个区域,这里可以清楚看出各个物体之间的联系,是分立关系还是父子关系(父物体可以影响子物体的运动)。也可以方便我们索引到场景中的任何对象。

    (6)项目视图

    资源文件在这里保存。我们也可以直接拖拽一些外部的资源(如图片等)到该区域中。这些资源文件都是保存在本地磁盘上的。

    (7)监测视图

    当选中某个游戏对象时,监测视图会显示它的组件,比如Transform等。


    2 游戏对象基本操作

    创建工程并创建场景后,我们就可以开始游戏开发了。不论你是不是要做一款游戏,我们姑且都叫做游戏开发吧。本质都是一样的。

    默认情况下,场景中已经有MainCamera和Directional Light等对象。我们现在以一个Cube为例来学习旋转、平移、缩放等基本操作。点击Hierarchy——Create——3D Object——Cube,就能创建一个立方体。

    当我们在场景视图中选中立方体,按下W,场景中的立方体就会如下所示。使用鼠标拖动这些带颜色的箭头就可以控制它的位置了。


    按下E,并拖动带颜色的圆环,可以控制物体旋转。


    按下R,拖动带颜色的方块,可以控制缩放。


    当然,在Inspector视图中还可以看到该立方体的Transform组件,设置Position、Rotation、Scale等值也可以改变立方体的位置、姿态和尺度。我们还看到立方体带有BoxCollider和MeshRenderer组件,后面都会讲到的。





    展开全文
  • JS的对象与内置对象详细介绍

    万次阅读 多人点赞 2019-07-06 23:53:50
    JS里有一句话叫万物皆对象(除了基本数据类型)。但是new String(’’)或者new Number()这种不属于基本数据类型,属于引用类型。 对象就是属性的无序集合。数组是有序集合。 创建对象的方法: 直...

    感谢内容提供者:金牛区吴迪软件开发工作室

    前言

    JS的对象就是Object,还有独立于宿主环境的ECMAScript实现提供的内置对象:Array,String,Date,Math。。。

    首先我们来学习一下JS的对象:

    一、基本对象Object:

    JS里有一句话叫万物皆对象(除了基本数据类型)。但是new String(’’)或者new Number()这种不属于基本数据类型,属于引用类型。

    对象就是属性的无序集合。数组是有序集合。

    创建对象的方法:

    1. 直接量(也叫字面量)
      属性(对象的静态体征)
      方法(对象的动态行为)
      一个属性属性名结束后用,逗号隔开。
    var stu = {
    	//name与age属于静态体征
    	name: '李四',
    	age: 13,
    	//study与eat属于动态行为
    	study: function(course) {
    		console.log('学习课程:' + course)
    	},
    	eat: function(pig) {
    		console.log('吃:' + pig)
    	}
    }
    
    1. 通过构造函数创建
      方法:var person = new 函数名();
      通过该方法创建对象时,会自动执行该构造函数。
      例如:
    //构造函数的函数名首字母大写,区分与普通函数的区别,不是强制规定的,你也可以小写。
    function Person(name, sex) {
    	this.name = name;
    	this.sex = sex,
    	this.job = function() {
    		alert(this.name)
    	}
    }
    var child = new Person('Jack', '男');
    Person.job();
    //此代码一共会两次跳出对话框,因为创建对象时会自动执行构造函数一次。this指的是调用函数的对象。
    
    1. 通过new Object()创建
      方法:通过object构造器new一个对象,在丰富对象信息。
    var person = new Object();
    person.name = 'wuxiaodi';
    person.sex = 'boy';
    
    1. 工厂方式
    function createStudent(name, age) {
    	let stu = new Object();
    	stu.name = name;
    	stu.age = age;
    	stu.study = function() {
    		console.log(this.name + " 学习...");
    	}
    	return stu;
    }
    
    1. 构造函数 + prototype
      prototype: 原型对象
      对象共享资源
      _proto_:原型属性
      prototype:默认每个函数对象都有prototype属性,显式属性
      _proto_:默认每个对象都有 _proto_ 属性,该属性默认指向创建对应对象的构造函数中的 prototype,隐式属性

    JS中的对象都是基于原型的对象。

    对象属性调用:
    对象名.属性名
    对象名.方法名(参数列表)
    或:
    对象名[‘属性名’]
    对象名[‘方法名’](参数列表)

    先在自身空间中查找,如果有则直接使用,如果没有,则到原型中查找;如果原型中存在,则调用使用,如果原型中不存在,则继续到原型的原型(原型链)中查找,依此方式继续查找使用,如果一直不存在,会继续向原型链中查找,直到 Object.prototype(原型链终点)中。如果原型链中不存在待调用的属性,则返回 undefined

    1. Object.create()
    2. class 语法糖

    删除对象属性:

    var xiaoming = {
        name: '小明',
        age: 20
    };
    delete xiaoming.age; // 删除age属性
    delete xiaoming['name']; // 删除name属性
    delete xiaoming.gender; // 删除一个不存在的school属性也不会报错
    

    判断对象是否拥有某一属性:
    1.可以用 in 操作符:

    var xiaoming = {
        name: '小明',
        birth: 1998
    };
    'name' in xiaoming; // true
    'grade' in xiaoming; // false
    

    PS:不过要小心,如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的:

    'toString' in xiaoming; // true
    

    因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性。

    要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法:

    var xiaoming = {
        name: '小明'
    };
    xiaoming.hasOwnProperty('name'); // true
    xiaoming.hasOwnProperty('toString'); // false
    

    二、内置对象之Array:

    数组:保存一组数据

    数组对象的作用是:使用单独的变量名来存储一系列的值。(动态数组:可自动根据元素个数调用长度大小)

    概念:

    • 元素:数组中所保存数据的空间
    • 长度:数组中所保存元素的个数
    • 下标(索引):数组中元素的编号,从0开始编号,到(长度-1)结束

    使用:
    创建数组对象:

    var arr = [];	//直接量
    var arr = new Array();	//创建数组对象。当数组长度为0的时候括号可以不写。
    var arr = [1, 2, 3, 4];		//直接量,在创建数组对象的同时初始化保存的数据
    var arr = new Array(1, 2, 3, 4);
    var arr = new Array(size);		//size为数字参数,表示创建数组时先预定size个空间
    

    访问数组元素:
    数组名[下标]
    关于数组的变量迭代请看:
    数组ES5新增的遍历迭代方法
    也可以使用for循环的方式。
    关于数组的常用API请看:
    数组的常用方法及其使用场景
    关于数组排序的算法请看:
    JS常见算法小总结


    三、内置对象之Math:

    作用: 用来处理数字数据。
    定义对象:

    var num = 15;
    var num = new Number(15);
    

    API:

    • Math.random()
      生成一个0~1之间的随机小数
      如果要生成0-54之间的随机整数:
    Math.floor(Math.random() * 54)
    
    • Math.floor(num)
      将num向下取整,取小于等于num的最大整数,
      如:
    Math.floor(3.1)		//3  
    Math.floor(3.999)	//3
    
    • Math.ceil(num)
      将num向上取整数,取大于等于num的最小整数,
      如:
    Math.ceil(3.1)		//4
    Math.ceil(3.999)	//4
    
    • Math.round(num)
      将num四舍五入取整数
    • Math.pow(x, y)
      求 x 的 y 次方
      如:
    Math.pow(5, 3)		//125
    
    • Math.sqrt(x)
      求x的开方:
      如:
    Math.sqrt(25)	//5
    
    • Math.trunc() - - 用于去除一个数的小数部分,返回整数部分。对于非数值它会内部调用Number方法先将其转换为数值。
    • Math.sign()方法判断一个数是正数、负数、零或者NaN。对于非数值,会将其转换为数值。他会返回五种值:
      1. 参数为正数,返回+1;
      2. 参数为负数,返回-1;
      3. 参数为 0,返回0;
      4. 参数为-0,返回-0;
      5. 其他值,返回NaN。

    四、内置对象之Number:

    API:
    方法:

    • isFinite() - - 检测是否是有限的数字,即不是Infinity。如果参数不是数字直接返回false。
    • isNaN() - - 判断参数是不是NaN。
    • parseInt() - - 将字符串转为整数【有容错能力】
    • parseFloat() - - 将字符串转为浮点数【有容错能力】

    有容错能力的意思就是允许后面有非数字的内容。会将前面是数字的内容进行转换。无容错能力就是不会转换

    • Number() - - 将字符串转为数字。【无容错能力,遇到不是数字的话就会返回NaN】
    • isInteger() - - 用来判断一个数值是否是整数。【如果数字超过了小数点后面的十六个进制则会判断失误因为超过的被遗弃了。或者绝对值小于js能判断的最小值也会失误被转为0】

    五、内置对象之String:

    作用: 处理文本数据
    定义对象:

    var str = 'abc';
    var str = new String('abc');
    

    API:
    属性:length - - 字符串的长度
    方法:

    • charAt(index) - - 获取index位置处的字符
    • charCodeAt(index) - - 获取index位置处字符的unicode编码
    • String.fromCharCode(code) - - 将unicode编码转换为对应的字符串
    • concat() - - 字符串连接
    • indexOf(sub) - - 查找符合条件的第一个字符串所在下标
    • lastIndexOf(sub) - - 查找符合条件的第一个字符串所在下标(从后往前查)
    • slice(start, end) - - 截取子字符串
    • subString(start, end) - - 截取子字符串
    • split() - - 切割字符串不传值的话就是直接把字符串用数组包起来,传值就是以值为分割。比如:
      在这里插入图片描述
      请仔细看我传入的值,与最后的结果。
    • replace(oldString, newString) - - 替换
    • toUpperCase() - - 转换为大写
    • toLowerCase() - - 转换为小写
    • trim() - - 去掉前后空白
    • trimStart() - - 去除头部空白
    • trimLeft() - - 去除头部空白【trimStart的别名】
    • trimEnd() - - 去除尾部空白
    • trimRight() - - 去除尾部空白【trimEnd的别名】
    • replace(/^\s+|\s+$/g, ‘’) - - 去掉前后空白的兼容写法
    • includes(sub) - - 返回布尔值,表示是否找到了参数字符串。
    • startsWith(sub) - - 返回布尔值,表示参数字符串是否在原字符串的头部。
    • endsWith(sub) - - 返回布尔值,表示参数字符串是否在原字符串的尾部。
      从下图可以看到这三个方法都会将数据类型进行隐式转换。
      在这里插入图片描述
      并且上述三个方法支持第二个参数,表示开始搜索的位置:
      在这里插入图片描述
      上面代码表示,使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。
    • repeat - - 返回一个新字符串,表示将原字符串重复N次。

    注意:传入的如果是小数会向下取整;传入的如果是负数或者Infinity会报错;传入的如果是字符串会先进行隐式类型转换【不是纯数字的字符串会被转为0】

    • padStart - - 用于头部补全
    • padEnd - - 用于尾部补全
      在这里插入图片描述

    如果用来补全的字符串与原字符串,两者的长度之和超过了最大长度,则会截去超出位数的补全字符串。
    如果省略第二个参数,默认使用空格补全长度。
    在这里插入图片描述

    • matchAll() - - 返回一个正则表达式在当前字符串的所有匹配

    六、内置对象之Date:

    作用:

    创建方法:

    let date = new Date();	//系统当前时间
    let date = new Date(value);		//value是距1970-1-1 0:0:0(UTC)依赖的毫秒值
    let date = new Date(dateString);	//dateString表示日期时间字符串“yyyy-MM-ddThh:mm:ss”
    let date = new Date(year,month[, hour[, minutes[, seconds[, milliseconds]]]]);;	//传递日期时间数字。month合理取值为0~11;
    

    API:
    获取时间:

    getFullYear()	//获取四位年份
    getMonth()		//获取月份,返回值是0~11
    getDate()		//获取日期
    getDay()		//获取星期,返回值是0~6
    getHours()		//获取小时
    getMinutes()	//获取分钟
    getSeconds()	//获取秒
    getMilliseconds()	//获取毫秒
    getTime()		//获取距 1970-1-1 0:0:0 以来的毫秒值
    

    设置时间:

    setFullYear()	//设置四位年份
    setMonth()		//设置月份,传值是0~11
    setDate()		//设置日期
    setHours()		//设置小时
    setMinutes()	//设置分钟
    setSeconds()	//设置秒
    setMilliseconds()	//设置毫秒
    setTime()		//设置距1970-1-1 0:0:0多少毫秒是什么时间(取负值的话就是1970年之前)
    

    时间转换:

    Date.parse()	//解析,将日期时间字符串转换为表示时间的毫秒值
    toString()		//将日期时间字符串转换为字符串
    toUTCString()	//将日期时间转换为世界标准时间的字符串
    valueOf()		//返回Date对象的原始值。与getTime()一致。
    tolSOString()	//将日期时间转为格式为  YYYY-MM-DDTHH:mm:ss.sssZ  的字符串 
    toJSON()		//返回 Date 对象的字符串形式。
    

    获取日期时间毫秒值:

    new Date.getTime()
    Date.parse()
    new Date().valueOf()
    +new Date()	//隐式类型转换的方法
    Date.now()	//ES5的方法
    

    七、内置对象之JSON(ES5新增内置对象)

    全称:
    JavaScript Object Notation(JavaScript对象表示法)

    作用:
    用于存储和交换数据的文本格式(XML)

    API:

    //将JS值转换为JSON文本字符串
    JSON.stringify()	
    //将JSON文本字符串解析为JS值
    JSON.parse()
    
    //编码
    encodeURIComponent()
    //解码
    decodeURIComponent()
    

    小案例:
    在这里插入图片描述
    JSON.stringify与JSON.parse也可以用来拷贝对象的值,我们上面的小例子就已经实现了拷贝对象。

    在这里插入图片描述
    这个小案例就实现了编码与解码的操作。
    注意传入的值要是字符串才可以哦~

    结束语

    更多内置对象欢迎对mdn文档进行翻阅:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects

    展开全文
  • JavaScript内置对象介绍

    万次阅读 2019-01-04 22:45:15
    JavaScript的所有内置对象都是继承Object对象的,继承了所有的属性和方法,主要属性和方法,如图: 4.其他十个继承Object对象基本属性 和方法,如图: Arguments对象: Error对象: Boolean对象: ...

    1.我们先了解一些JavaScript的内置对象图:

    2.各内置对象的功能,如图:

    3.基类Object

    JavaScript的所有内置对象都是继承Object对象的,继承了所有的属性和方法,主要属性和方法,如图:

    4.其他十个继承Object对象的基本属性 和方法,如图:

    Arguments对象:

    Error对象:

    Boolean对象:

    String对象:

    Math对象:

    RegExp对象:

    Array对象:

    Number对象:

    Function对象:

    Date对象:

    5.总结:以上就是关于JavaScript内置对象的简单介绍,有问题大家可以相互讨论

    展开全文
  • 面向对象的概念介绍

    万次阅读 多人点赞 2018-08-24 09:02:18
    这一篇主要是介绍面向对象的各种概念性的东西,并不会说具体的代码怎样写,所以可以用一种轻松的心态去看。 一、面向过程和面向对象 面向对象是相对于面向过程的一种编程方式。 面向过程的编程方式由来已久,我刚...

    继续讲程序基础。这一篇主要是介绍面向对象的各种概念性的东西,并不会说具体的代码怎样写,所以可以用一种轻松的心态去看。

    一、面向过程和面向对象

    面向对象是相对于面向过程的一种编程方式。

    面向过程的编程方式由来已久,我刚开始学习Basic和Pascal的时候,都是面向过程的编程方式。这种方式非常的直观,需要写一个功能,直接就写几行实现方法。比如你需要操作一个人移动到某个点,直接就写代码修改一个人的坐标属性,逐格的让他移动到目标点就行了。

    面向对象的编程方式,操作的是一个个的对象,比如你还是需要操作一个人的移动,你需要先实例化那个人的一个管理类对象,然后告诉这个“人”的对象,你需要移动到什么地方去。然后人就自己走过去了。至于具体是怎样走的,外部不关心,只有“人”对象本身知道。

    面向对象有优点也有缺点,也存在一些争论的地方。确实,面向对象在性能上面肯定不如面向过程好,毕竟面向对象需要实例化对象,需要消耗cpu和内存。但我觉得它的优点也是很明显的,毕竟在一个大型的项目里面,面向对象易于维护和管理,条理也清晰,是一种重要的编程思想。

    二、面向对象的4大特征

    只要稍微百度一下,就能知道面向对象有4大基本特征:封装、继承、多态、抽象。估计背下来很容易,但实际上它们具体的含义是什么呢?

    接下来,我以一家银行为例子,大概说一下我对面向对象这几个特征的理解。

    1、封装:

    对于一般人来说,银行的印象就只有一排对外办公的窗口,然后有存款和取款2种基本业务。

    银行是一个结构非常复杂,功能非常众多的机构。但实际上,我们并不会很关心它的内部是怎样运作的,比如银行的员工是怎样数钱的,怎样记录存款,怎样开保险柜,等等。这些对于外部的人员来说,知道了可能会引起更多不必要的麻烦。所以银行只需要告诉你,你可以在这个窗口办理业务,可以存款和取款,就够了。

    所谓的封装,就是指把内部的实现隐藏起来,然后只暴露必要的方法让外部调用。

    2、继承:

    刚才提到了银行有2种最基本的业务,存款和取款。但现实中,大部分的银行都不止这两种业务,还有很多其他的业务,比如投资窗口、办理对公业务的窗口等等。这些业务,是在最基本的银行存取款业务的基础上再添加的,所以我们可以理解成,基本的银行是只有2种业务的,然后后来的银行在保留了原有银行的业务基础上,再扩展了其他的业务。

    如果把基本的银行看做父类(基类),包含存款和取款2个公共方法,那么后来的银行可以看做是子类,它在继承了基本银行存取款的公共方法只后,还自己新增了投资和对公业务两个公共方法。有些银行甚至会重写基本的存取款功能,让自己和基本银行的业务有一定的区别。这个过程,就是继承。

    3、多态:

    同样是存款的业务,如果我拿着人民币和拿着美元去银行办理,实际上银行处理的方式是不一样的。这种办理同一种业务(公共方法),由于给予的内容(传入的参数类型或者数量)不一样,而导致操作(最终实现的方法)不一样,叫做编译多态,也叫做函数的重载。

    接下来,我去了一家银行存款,我不知道这家银行的存款业务有没有和基本银行不一样,反正我就是把钱存进去了,然后具体业务的实现究竟是调用了基本银行存款功能,还是这家银行本身有新的存款功能实现,我是不关心的。这种外部直接调用一个方法接口,然后具体实现的内容由实际处理的类来决定使用基类或者子类的方法,就叫做运行时多态。

    4、抽象:

    有些观点并没有把抽象列为面向对象的特征。但实际上这是面向对象的一个本质的东西。

    虽然银行五花八门,但我们可以找到他们的共性,比如上面说的,基本的银行有存取款业务,投资银行有投资业务,之类,其实就是对银行作出了一个抽象的看法。

    在操作的时候,这些业务其实就是一个个的接口,我不管面对的是什么具体的银行,只要是同一个类型的银行,我都可以进行相同的业务办理。

    三、面向对象业务的参与角色和边界划分

    除了几大特征以外,面向对象在使用的时候有几个概念:参与者、边界、业务主体、业务工人。

    这几个概念好像很高端大气,但实际上归纳成一句话,就是“谁做什么,做到什么程度”。

    比如“你去银行存钱”,参与人是你自己,业务主体是存钱,业务工人是银行职员,边界就是到存钱为止。

    这里的确定边界是一个很重要的概念。面向对象操作的对象实际上是可大可小的,在不同的业务过程里面,参与者和业务的主体是可以改变的的。

    还是存钱这件事情,参与者是你自己,但其实包含了一系列后续的操作。比如银行职员在拿到你的钱之后,需要用点钞机去数一下。这个“职员点钞”的过程,实际上是一个子业务,这个业务包含在存款的总业务里面,但是不需要客户去关心。这时候业务的参与者变成了银行职员,业务主体是点钞,业务工人变成了点钞机,业务的边界也只划分到点钞本身。

    存款实际上是一个复杂的业务过程,又很多诸如点钞这样的子业务组成了一个大的存款业务,然后如果把存款和取款之类业务看成子业务,这些子业务又组成了银行这个复杂的总业务机构。如果把银行看成是子业务,和商场、市场、交通等子业务,共同的又组成了我们的生活这个更复杂的大业务,把每个人的生活看成是子业务,然后每个人的生活又组成了国家。如此类推,组成了地球、组成了宇宙,无穷无尽……

    根据不同的业务边界的划分,我们得到了不同的范围和结果。每一个子的业务,是独立的,我们可以单独的修改它们。比如点钞这个操作,我们可以不用点钞机,改为用手点钞,也能达到同样的结果。再通过一个个子的对象,组合成庞大的复杂的系统。只要我们划分的边界足够的清晰和明确,就可以有条不紊的做各种复杂的功能。这正是面向对象为什么能容易维护和管理的原因。

    四、面向对象的一些个人看法

    在多年的程序员工作当中,我有幸看到过不少项目的代码,发现有这么一种情况,有些人写程序,喜欢很刻意的去写面向对象,为某些类提取了的基类,提取了很多接口,但到了真正去写实现代码的时候反而不知道该怎样去用这些接口。

    也有人问过我,抽象是怎样做到的,比如,他写代码都是按功能先写了类,然后发现类有很多可以重用的地方,再提取成接口,原来的类就变成基类,然后再继承,等等。不是说一般开发都需要围绕接口来开展吗?着好像有点矛盾了。

    对于这个问题,我只能谈谈我自己的经验。

    按照统一建模语言的理论,其实在实际使用某种语言编写功能之前,应该是有设计阶段的。这个阶段只是弄清楚业务的参与者、边界、业务主体、业务工人等元素,然后归结成“谁做什么”。这个阶段,我们不需要知道是用什么编程语言来实现的,也许根本不需要计算机,用纯人工也能完成功能。

    这个阶段也不需要我们知道怎样具体去实现一个功能,只需要知道,我需要在这个范围内实现什么样的几个功能,我需要对外提供什么样的服务让别人使用,就算完成了。然后再下一步,才是讨论使用什么语言来实现,怎样去根据语言的特点去实现。最后才是真正的开始打代码把实现的过程写出来。

    针对上面的实现过程,不难发现,其实我们在没有开始写代码之前,我们就已经知道我们需要做什么,需要提供哪一些对外的窗口给别人去用。这些窗口,其实就是抽象出来的接口了。

    所以,我自己的习惯是在写任何东西之前,都是先拿笔在纸上面把流程写一遍,把结构搞清楚,把数据的流动过程模拟一下。把思路搞清晰之后,就可以简单的把类的结构写一下,写虚方法,不需要具体实现,只是看看这样的抽象过程有没有问题。如果没问题了,再一个个的把虚方法的具体实现写完整。至于如果需求变动发现之前的抽象不足以应付,可以在有限范围内再进一步的抽象,提取子类,通过多态的方式来实现。

    展开全文
  • C++编程语言中类对象的赋值与复制介绍(一)

    万次阅读 多人点赞 2018-08-20 17:17:07
    如同基本类型的赋值语句一样,同一个类的各个对象之间也是可以进行赋值操作的,即将一个对象的值赋给另一个对象。 需要说明的是,在类对象的赋值过程中,只会对类中的数据成员进行赋值,而不对成员函数赋值。 例如...
  • 面向对象程序设计的基本概念

    千次阅读 2016-07-04 15:31:41
    概述概念面向对象 = 对象 + 类 + 继承 + 消息对象对象(Object):具有责任的实体。用来描述客观事物的实体,是构成系统的一个基本单位,由一组属性以及作用在这组属性的操作构成。特性:标识符(区别其他对象)、属性...
  • 设计模式之面向对象七大基本原则

    万次阅读 2015-04-27 16:25:48
    概述在运用面向对象的思想进行软件设计时,需要遵循的原则一共有7个,他们是:1. 单一职责原则(Single Responsibility Principle)每一个类应该专注于做一件事情。2. 里氏替换原则(Liskov Substitution Principle...
  • 面向对象的三个基本特征

    万次阅读 2018-09-05 17:11:31
    面向对象的三个基本特征是:封装、继承、多态。 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的...
  • 2.1 类介绍 在 ES6 中新增加了类的概念,可以使用 class 关键字声明一个类,之后以这个类来实例化对象。 类抽象了对象的公共部分,它泛指某一大类(class)对象特指某一个,通过类实例化一个具体的对象 类,...
  • js中history 历史对象的属性介绍

    千次阅读 2015-06-30 10:54:22
    history在js中是用来后退了,基本写法野history.back()这是我们常用的写法,下面我来介绍一些关于history的其它对象属性。 本属性返回的是"前进"和"后退"两个按键之下包含的地址数的和。这个属性我好像没有经常...
  • JavaScript表单对象Form介绍

    万次阅读 2011-04-03 00:19:00
    原文地址:http://www.pczpg.com/a/2010/0312/3106_2.html<br />  要实现动态交互,必须掌握有关表单对象(Form)和框架对象(Frames)更为复杂的知识。 1、 表单基础知识 表单是最常见的与...
  • 回调函数基本介绍基本使用场景

    万次阅读 多人点赞 2018-05-15 20:20:47
    1.回调函数基本定义- 什么是函数指针 通俗来说,函数指针是一个指向特定函数的指针。函数的类型由其参数及返回类型共同决定,与函数具体名称无关。示例代码如下: int testFun1(int param1,long param2,float ...
  • 数据、数据元素、数据项、数据对象介绍和理解

    万次阅读 多人点赞 2019-06-18 20:57:43
    对于数据 数据对象 数据元素 数据项 这四个概念 理解的不是很 我先说下课本上是怎么说的 然后再根据自己和网上的理解说下更直白的解释 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,...
  • 1,基本介绍 (1)在 Three.js 中,使用 THREE.Color 对象来表示颜色。 (2)在构造 Color 对象时,可以使用十六进制字符串("#c0c0c0")或者十六进制值(0xc0c0c0)来指定颜色,还可以使用 RGB 颜色值(0.3,0.5,0.6...
  • django之ORM介绍基本用法(一)

    万次阅读 多人点赞 2018-09-27 23:17:07
    一、ORM介绍 1.什么是ORM ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 在MVC/MVT设计模式中的Model模块中都包括ORM 2.ORM优势 (1)只需要面向对象编程, 不需要面向数据库编写代码. ...
  • DOM对象和内置对象(中)

    万次阅读 2015-09-04 23:36:06
    在第一篇博客《了解JavaScript》中已经介绍了DOM及DOM树里顶端对象window,还有它的一个子对象 document。接下来会介绍它们的一些实用的对象和方法,如: 1、alert()、prompt()和confirm()与用户交互。 ...
  • R语言面向对象指南

    千次阅读 2015-09-21 21:53:00
    面向对象指南:这一章主要介绍怎样识别和使用 R 语言的面向对象系统(以下简称 OO)。R 语言主要有三种 OO 系统(加上基本类型)。本指南的目的不是让你精通 R 语言的 OO,而是让你熟悉各种系统,并且能够准确地区分...
  • 一 PerformanceCounter 基本介绍1 简单介绍 表示 Windows NT 性能计数器组件 命名空间:System.Diagnostics 程序集:System(在 system.dll 中) 2 构造函数(只介绍本文要用到的) PerformanceCounter (String, ...
  • MySQL数据库(一)——基本介绍

    万次阅读 2019-07-05 10:56:16
    (一)MySQL基本介绍: MySQL目前属于Oracle甲骨文公司,MySQL称之为关系型数据库、微软的SQL Server。 MySQL数据库能够支持在多种操作系统上运行,包括Solaris、Mac OS、FreeBSD和Windows,Linux通通支持。核心...
  • Python 面向对象

    万次阅读 2020-02-04 13:13:33
    本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习...
  • VBA常用对象

    千次阅读 2018-01-21 17:36:31
    第一,excel vba对象基本概念介绍  excel vba对象有很多,每个对象又有自己的属性和方法。  excel vba对象到底是什么呢?VBA是面向对象的一种程序语言。  Excel的操作几乎是围绕工作簿、工作表、
  • UITableView总结:基本使用方法介绍

    千次阅读 2011-12-19 17:36:32
    本节主要介绍UITableView的基本使用方法。 一)UITableView所在的UIViewController声明两个delegate:UITableViewDelegate和UITableViewDataSource。 二)将UITableView对象的delegate设置
  • 【Unity3D入门教程】使用C#脚本控制游戏对象

    万次阅读 多人点赞 2017-01-07 16:47:47
    使用C#脚本控制游戏对象,是一项必备的基本技能。Unity3D可以使用的脚本有C#和javascript等。我们主要讲注意力集中在C#上。本文将会介绍怎样使用脚本控制场景中的游戏对象
  • 面向对象技术

    千次阅读 2012-10-19 20:17:42
    前边八篇博客写了从面向过程的方法来开发一款软件的各种方法...这篇博客,我就给大家概要介绍一下面向技术相关技术!  首先看一下要总结知识的几大项:      初次我们从面向过程走向面向对象,首先我们需要了
  • C 语言实现面向对象编程

    万次阅读 多人点赞 2018-08-14 18:36:38
    它表现出来的三个最基本的特性就是封装、继承与多态。很多面向对象的编程语言已经包含这三个特性了,例如 Smalltalk、C++、Java。但是你也可以用几乎所有的编程语言来实现面向对象编程,例如 ANSI-C。要记住,面向...
  • Ceph介绍(一):基本原理

    万次阅读 2019-04-23 14:38:55
    SDS可以为在传统存储上有大投入但仍然没有获得必要的灵活性和扩展性的用户提供一个很的解决方案。Ceph是一个真正的SDS解决方案,它可以从软件层面正确提供所有的企业级存储特性。低成本、可靠性、可扩展性是Ceph的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 904,321
精华内容 361,728
关键字:

介绍的对象基本都没好的