大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
UML 类图简介 UML 对很多人来说应该不是一个陌生的概念,这一两年来,UML 被大家越来越多的讨论着。本来 UML 跟我这个主题似乎并不能扯上多大的关系(它是语言无关的,甚至可以说其本身就是一种语言——用于交流的)。我在此谈到它有两个目的: 1. UML 是针对面向对象软件开发的,而 C++正是这样的一种语言 2. UML 在设计中被越来越多的使用着,而下一篇杂谈准备讨论设计模式,如果不了解 UML,那么无法进行下去 UML,全称:Unified Modeling Language,其目的是为了对软件密集型的制品进行可视化、详述、构造和文档化的图形语言。UML 是依据许多前人的思想总结出的成果,1997 年被 OMG 通过并成为标准(所以在《设计模式》书中如果你看到与标准不一样的地方,不要奇怪,那本书是 95 年的)。关于 UML 的历史和更详细的描述,可以参考《UML 参考手册》。UML 主要由一系列视图组成,其中包括静态视图(Static vi ew),用例视图(Use case view)活动视图(Acti vity view)等,不同的图用处自然也不一样,而对开发人员来讲(或者说为我的下一篇来说),更重要的应该是静态视图中的类图(class diagram)和交互视图(Interaction view)中的顺序图(Sequence diagram),请注意 view 和 diagram 的区别。 类图 静态视图说明了对象的结构,其中最常用的就是类图,类图可以帮助我们更直观的了解一个系统的体系结构,有时侯,描述系统快照的对象图(Object diagram)也是很有用的。在这里,我们主要介绍类图,下面的图就是一个简单的类图: 在类图中,类由矩形框来表示,如上图中,定义了 4 个类,分别为 Base、A、B、 C,类之间的关系通过各种线条和其他符号来表示,在上图中,空心的三角表示继承关系,在 UML 的术语中,这种关系被称为泛化(Generalization),所以上面的类用等价代码表示为: class Base{…}; class A:public Base{…}; class B:public Base{…}; class C:public Base{…}; 我们再看下一幅图: 这幅图与上幅几乎没有什么区别,唯一的不同就是 Base 类中增加了成员,一个私有的 integer _x(UML 术语为 property)和一个公有的 fun()的函数(method),是否需要这些类的内部细节 UML 本身并没有限制,完全取决于你自己如何使用, UML 的用处在于帮助你了解系统,所以只要你自己觉得足够清楚,那么够了,不要再复杂了。 接着看第三幅图: 上面图中的箭头表示一种关系,箭头另一边有一个菱形(空心)表示聚合(aggregation),聚合的意义表示 has-a 关系,其等价代码如下: class A{…}; class B{ A* theA;…}; 聚合是一种相对松散的关系,聚合类 B 不需要对被聚合的类 A 负责。 下面的图: 这幅图与上面的唯一区别是菱形为实心的,它代表了一种更为坚固的关系——组合(composition)。组合表示的关系也是 has-a,不过在这里,A 的生命期受 B 控制,通常情况,等价代码如下: class A{…}; class B{A theA;…}; 即 A 会随着 B 的创建而创建,随 B 的消亡而消亡。 下图: 这里 B 与 A 的关系只是一种依赖关系,这种关系表明,如果类 A 被修改,那么类 B 会受到影响,一个简单的例子就是: class A{…}; class B{fun(A params);…}; 常用的关系就是我们上面用的这些,通过这些关系和类表示的类图,我们可以用图形化的方式描述一个系统的设计部分,当你习惯使用 UML 后,你会发现,这往往比你告诉同伴某某类从某某类派生,派生类又和某某类具有什么关系容易的多。 顺序图: UML 中另外一个常用的图形就是交互视图中的顺序图,在以往的过程化语言中,我们通常使用流程图来描述一个函数(系统)是如何工作的,而在面向对象的系统中,这显然是不可行的,而顺序图正是来解决这个问题的。 假设有如下的伪代码: class circle { public: void fillcolor() { // ... }; void draw() { fillcolor(); }; }; class window { public: void drawcircle() { _circle.draw(); }; private: circle _circle; }; 对于下面的调用: window wnd; wnd.drawcircle(); 对应的顺序图如下: 图中上方的方块表示参与的对象,垂直的虚线表示对象的生命线,方框表示激活,其中箭头表示了一个调用消息(也可以有回送 return),如果是异步的消息,则用半箭头表示,其中 draw 表示了一个自调用(self call) 至此,UML 中最常用的(从开发人员的角度),当然 UML 的内容远远不只这些,这里的介绍只是一些简单的概括,并且 UML 本身也在不断的发展之中,无论怎样,我觉得 UML 会越来越多的深入我们的开发过程中,特别是对下一篇我们要介绍的设计模式而言,类图是主要的描述工具(到那个时候你会体会到 UML 描述的优越)。 如果你看过《设计模式》着本书,你会发现与我上面所描述的有一些细微的不同,不要紧张,《设计模式》是 GOF95 年的作品,那时候 UML 还没有形成,而且,其中也明确那是 OMT 方法(Jim Rumbaugh 在通用电气发表的建模技术——Object Modeling Technique)和 Booch 方法。
成都创新互联公司是一家专业提供沧源企业网站建设,专注与成都做网站、成都网站制作、html5、小程序制作等业务。10年已为沧源众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
安卓App用Java和Kotlin作为开发语言。
Google IO 2017宣布了 Kotlin 会成为 Android 官方开发语言。在Kotlin 语言出现之前,几乎所有的安卓应用程序都是使用Java语言编写的。
扩展资料
Google在今年I/O2017开发者大会中宣布,正式把Kotlin纳入Android程序的一级开发语言(First-classlanguage),并与开发团队JetBrains合组非牟利基金会推广Kotlin。据多间外国媒体报导,这是GoogleI/O开发者大会中引来最多欢呼声的消息。
Kotlin将于AndroidStudio3.0得到支持,JetBrians指开发者不用再安装额外元件或担心兼容问题。Kotlin能与Java互通,但拥有Java不支持的功能。Google相信利用Kotlin可使Android程序开发更快捷有趣,但他们补充,此举绝非取代Java和C++的官方支持。
首先我们需要选用一个语言来开发本地App。
那么,我们第一步干啥了。
在现有的语言中挑选语言。
那么首先考虑的条件是不火的语言和没前途的语言是不在选择范围的。
---因为没人用,那么库就会少。因为库少就不会好用。因为不好用。所以用的人更少。生态圈的核心思想。
--那这个世界是不是只有C++/Java了。肯定不是。因为有些语言是有前途的。最大的特点是。简化了程序员的负担。或者效率更高。未来肯定是主流。
那么我们常用的语言和有前景的语言是哪些
C/C++/Java/C#/Python/Ruby/Go/JavaScript+Html
好。这些是我们常用的语言。我们看待的是怎么把这些语言一步步的踢掉。然后只剩下Java的。
首先踢掉的是C。至今大型的超过10万行代码的图形化界面程序没有几个是用C的。因为复杂的错误处理和没有纠错机制。使得程序非常容易崩溃。同时。因为C没有面向对象。那么工程化开发显得非常麻烦。
相信没有人现在主动说。用C开发App这种多界面程序吧。
继续踢掉的是C#。我干嘛要用一个一出生就为了对付Java的。还是微软的私货的语言。对。Android是开源界的。而C#注定不是适合开源界的语言。
那我们继续踢语言:
我们该要一门重语言还是轻语言?
Java/C++/C#/Go/C是重语言。
Python/Ruby/JavaScript+Html/是轻语言。
对。我心目中划分语言的标准基本上是属于这样的,只要在代码中体现我们需要讲效率的。那就是重语言。
重语言首先讲究的是运行效率。然后讲究工程化。
轻语言讲究开发效率,讲究敏捷性开发。
回到我们选语言的原则。
我们想开发一款本地App。还在性能不高的手机上。
那么除了C之外的开发语言中。运行效率最高的是C++,然后是Java。
那么轻型语言就要被一个个踢掉了。
Ruby在网页端有作为。但是库太少。图形库更少,开发者都是网页端的人。被踢。
JavaScript+Html - ---- 这是未来大一统的趋势。但是我们现在是找一门开发本地App的语言。
外加真心html+JavaScript有着先天的劣势。(效率+Offline)
Python有着完善的库。有着极高的人气社区。在手机上开发也有过尝试。(Nokia就干过这事。Ubuntu Phone的UML也是一种类python的语言。)Google也是python的大用户。效率是问题。但是不是绝对的。先对Python实现保留意见。
那么我们看这一轮入围的四门语言
Java/C++/Python/Go
再说Go。Go语言还不成熟。库也不多。开发者少。但是作为Google主打的语言。很有可能。Google会提供基于Go的Android sdk。至少现在Android的主打语言不会是Go。
剩下三门
C++/Python/Java
C++重运行效率。但是跨平台性较弱。开发难度较高。库多,用的人多。
Python,重开发效率。跨平台性高。开发难度低,库多,用的人多。
Java。重开发效率。不及python,重运行效率,不及C++。开发难度低。库多。用的人多。
那再回到需求:
Google是想要一门开发本地App的语言。Google想屏蔽掉底层硬件的差异。实现对于开发者来说是一个统一的平台。
同时。对于手机这个现阶段的平台来说。耗电,以及性能。是无法回避的问题。
那么这门语言的跨平台性要求很高。同时效率又很高。
说Python:效率实在无法达到其普遍的手机要求。尤其是对于图像处理这种高计算操作。且。社区无法与C++/Java相比。意味着库没有Java和C++多,开发者不是跟Java和C++一个等级的。
说C++:用过JNI的人都知道本地的C/C++库,至少要编译多次。不同的框架就代表者不同的编译环境。而且直接用C++编译运行的话。C++并不能很好的屏蔽掉硬件差异。所以对于开发来说调试来说,都是一个比较艰巨的任务。
C++也不是一个非常好的工程化开发语言。
那有没有破解法。Qt。可以用框架屏蔽掉大部分的细节操作。Qt5.0支持Android。
为什么没用。估摸着是跟Qt不是Google家的产品加不开源的问题吧。
说Java:虚拟机是核心。因为虚拟机真正能屏蔽掉开发的很多差异。而且通过虚拟机。开发者只要在打包的时候翻译成运行码而不需要翻译成机器码。通过虚拟机完成很多差异的解决。而效率并不是丢的非常严重。
且Java比C++更受开源界和工业界的共同欢迎。即使Java也有版权问题。。。
我们屏蔽掉最基础的硬件差异。通过Linux,在屏蔽掉手机的一些基本功能差异。然后提供纯粹的利于开发者开发和测试的方法。只有通过虚拟机了。而这个虚拟机是需要讲性能的。
Google搞了一个Davlik虚拟机。对。这就是Android的核心。就是因为性能要求高。不得不重新开发虚拟机。Davlik就是一个非常讲效率的虚拟机。而其他的常用库都有的,现成的。根本就不需要自己去写的。只要打包就好。
那么还有些必须考效率的库和应用。怎么办。
用JNI技术调用C++
对就这么坑爹。
为什么Object-C这门语言无视我说的大部分要求了。因为Apple有能力创造一门更好的语言。Google对于Android,只是在开源社区挑一门语言。
且。ObjectC生在Apple,死在Apple。兼容性。人家才不需要考虑。所以人家敢用Object-C,而Android为了实现真正的跨平台。只能选Java。
Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个 Activity 类(class)负责创建视窗(window),一个活动中的Activity就是在 foreground(前景)模式,背景运行的程序叫做Service。两者之间通过由ServiceConnection和AIDL连结,达到复数程序同时运行的效果。如果运行中的 Activity 全部画面被其他 Activity 取代时,该 Activity 便被停止(stopped),甚至被系统清除(kill)。
1、Unix/Linux平台技术:基本命令,Linux下的开发环境
2、企业级数据库技术:SQL语言、SQL语句调优、Oracle数据库技术
3、Java 语言核心技术:Java语言基础、Java面向对象编程、JDK核心API、Java集合框架、Java网络编 程、JavaI/O编程、Java多线程编程、Java异常机制、Java安全、JDBC、XML
4、软件工程和设计模式:软件工程概述、配置管理及SVN、UML、基本设计模式
5、Android应用开发基础:Android开发平台、Eclipse+ADT开发环境、AVD及传感模拟器调试、Android核心组件、Android常用组件、Android高级组件、文件及网络访问、SQLite数据库编程、后台服务编程
6、互联网核心技术: HTML、CSS、JavaScript、JQuery、Ajax应用
7、Android高级应用开发:音频\视频\摄像头、互联网应用、GPS和位置服务、Google Map、2D\3D绘制、传感器开发、游戏开发、电话及SMS服务、网络\Bluetooth\Wi-Fi等。
8、Android系统级开发:移植、驱动、NDK(C方向)。
9、JavaEE核心技术:Servlet核心技术、JSP核心技术、Struts、Spring、Hibernate框架。