热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UML现在的用途还大吗

本文主要介绍关于uml,工具,listview,android,layout,活动的知识点,对【JUDE的使用指南(UML建模工具)】和【UML现在的用途还大吗】有兴趣的朋友可以看下由【Rong-

本文主要介绍关于uml,工具,listview,android,layout,活动的知识点,对【JUDE 的使用指南 (UML建模工具)】和【UML现在的用途还大吗】有兴趣的朋友可以看下由【Rong--】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的【j2ee】相关技术问题。

UML现在的用途还大吗

之一 OVERVIEW/UML

这篇文章是在经过了 整理网络上大量资料的整理以后完成的,首先要先注明的是必须要感谢美丽的爪哇岛博客的这篇文章http://www.blogjava.net/askcuix/archive/2009/02/22/256109.html,也正是因为有了这篇文章才有了我现在的想法,而我这篇文章也是对该博主的支持,转载和盗用之处,不甚感激。

该文档将分五个部分写出来,因为写一篇很长的资料怕大家不方面看,也没耐心看,所以我做了编排,话不多说,开始吧:

我希望你能够使用JUDE去学习和体验UML,JUDE是一个建模工具,你可以用它去画UML。下面我会指导你通过一些实例去学习使用JUDE来画UML。

一、Overview

lUML and UML tools
lDescription of JUDE
lInstallation of JUDE
lFundamental Components andBasic Operation of JUDE
lUML about Bowling
lDraw UseCase Diagram
lDraw Activity Diagram
lDraw Class Diagram
lDraw Sequence Diagram
lOther Diagrams
lFeatures of JUDE

二、UML and UML tools

当你画UML的时候,是直接手画还是使用工具呢?使用工具的话我们可以利用工具本身的一些有利条件,比如:

1、 可以让你画一个干净的diagram;
2、 元素的尺寸可以画的比较合适;
3、 方便和其它人分享、交流你的UML模型;
4、 在需要的时候你可以重复的执行undo或redo操作;
5、 当你的diagram不符合UML规范时,会给你一个警告提示;
6、 数据可以通过多种方式输入(图表,树形结构图等等);
7、 数据可以很容易的被重用;
8、 你可以管理所有的数据和它们之间的关系;

如果你是初学UML,你会发现第四和第五条对你非常有用。因为出现的错误可以很容易的被“undo”,所以你能画出比较完善的UML。同样,当你创建了一个抽象类时,抽象类的类名将会根据规范的要求自动以斜体的方式进行显示。使用JUDE绘画UML将会使你从中得到很多有利的条件,JUDE将会成为你学习UML的导师,去尝试一下吧。记住,如果你画错了,你总是可以使用“Undo”来重新画的。

?

JUDE 的使用指南 (UML建模工具)之二

三、Description of JUDE

现在有很多UML工具可以供你使用,我比较喜欢的是“JUDE/Community”(JUDE代表Java and UML Developer's Environment)。


JUDE有两个版本:JUDE/Community(免费版)和JUDE/Professional(商业版)。JUDE具有以下的特性:

lJUDE/Community支持所有基于UML1.4的diagram;

lJUDE/Professional支持所有基于UML1.4的diagram,一些UML2.0的规范和E-R图(E-R图从JUDE/Professional
version3.2开始支持);

l无限的UNDO/REDO操作;

l拖拽操作,自由切换使用“Map View”以方便编辑较大的diagram;

l自动生成类图和model的信息;

更多的关于JUDE的特性,请参考:JUDE/Community page。

四、Installation of JUDE

现在让我们来安装JUDE。要运行JUDE首先需要安装Java环境。

1、系统要求

OS:

Windows
? 2000, XP, Vista

CPU:

Pentium III
? 600MHz or higher

Memory:

256MB or
? more

Java Environment
? (Required):

Sun
? Microsystems
? J2SE 1.4.1_07 or JDK5.0
? (JDK 5.0 is supported since
? JUDE/Community 3.1)

JUDE可以运行在windows,Linux和Mac的J2SE环境中,但是我们没有测试过所有的发行版环境,因此,我们推荐你在windows中安装JUDE。如果你需要安装在windows之外的系统的相关信息,请参考FAQ。

2、安装Java环境

如果你的机器上已经安装了Java环境,那么你可以跳过这部分内容;如果没有,那请到SUN的网站上下载并安装Java环境。注意以下事项:

l确保安装的java版本满足要求。JUDE可能不能在未支持的Java版本中工作;

l确保安装的J2SE中包含了JRE(JUDE默认使用JRE)。

3、下载JUDE

从Download page上选择最新版本的jude-community-x_x-setup.exe(大约5M)进行下载。(顺便说一下,在这篇文章中我使用的是JUDE/Community 3.2)。

4、安装JUDE

下载完成后,双击安装JUDE,安装向导会让你指定需要安装在的位置。


如果你使用的是Win98或ME,你需要使用文本编辑器打开jude.bat文件,设置JUDE/HOME变量的绝对路径。jude.bat在JUDE的安装目录中。

5、运行JUDE

从windows的开始菜单中运行JUDE。当启动JUDE的时候会显示下面这个图标。


JUDE 的使用指南 (UML建模工具)之三

五、Fundamental Components and Basic Operation of JUDE

下面我会通过截屏来指导你进行一些基本的操作。


1、基础组件

l管理视图
管理视图包括整个project相关的功能按钮,比如:文件操作、编辑和一些经常使用的工具条。

lDiagram编辑器
Diagram编辑器用于编辑diagram和model。你可以同时打开多个diagram。

l结构树视图
以树型结构的方式显示model。你能够通过model元素的弹出菜单来执行各种不同的操作。

l继承树视图
以树型结构的方式显示model中类之间的继承关系。

lMap视图
Map视图对在Diagram编辑器中已经打开的diagram提供了概览。可以在这个区域进行拖拽以在Diagram编辑器进行显示。这个功能对较大的diagram是非常有用的。

lProperty视图
Property视图用于显示和编辑model元素的properties。

2、创建一个新的project

在JUDE中,UML数据以.jude的后缀进行保存。这些文件被称作project文件。第一次运行JUDE时是没有project打开的。现在就让我们创建一个新的project。从主菜单中选择[File] - [New],当你创建了一个新的文件时,结构树视图和Property视图就会显示出来了。


新的project在名为“no_title”的package中创建了用例图和类图。“no_title”的package对应java中的默认package。在这个指南中我们将不使用输出java的特性。名称为java的package关联java的API,并且持有一些基本的类,比如:String和Vector等。这些类可以被用来作为一些属性的类。

3、创建package和Diagram

通常在结构树视图中通过弹出菜单来创建一个新的package。要创建一个新的diagram的话,从结构树视图的弹出菜单中选择[Create
Diagram]或者从主菜单中选择[Diagram]。

在JUDE/Community(3.2)中你可以创建以下这些diagram:

lClass diagram

lUseCase diagram

lStatechart diagram

lActivity diagram

lSequence diagram

lCollaboration diagram

lComponent diagram

lDeployment diagram

也支持Object diagram,Package diagram和Robustness
diagram。

4、如何创建和编辑

使用JUDE画diagram的操作和其它的画图工具基本一样,如果你没有使用过画图工具,那我们现在就开始学习使用吧。

JUDE 的使用指南 (UML建模工具)之四 6 UML about Bowling

现在一切都成立,我们已经准备好画图。我们应该画个什么图?你曾经去过的保龄球了吗?我自己享受我公司举行保龄球比赛的其他日子。我想大多数人都大吃一惊。因此,让我们使用了UML的这次主题的保龄球。让我们绘制了系统的UML显示保龄球分数。

Bowling Score


这里是请求:
一旦游戏已经开始显示出一个保龄球评分轨道。
抛球以后实时更新的球员得分。
玩家在游戏过程中可以改变分数。
显示一个动画/提示,当有人提出的停止或暂停。

我们的目的是试图在这里使用UML建模工具设计我们遇到的UML。至于是否可以绘制最完美的图表,这并不重要。那么让我们开始了。你准备好了吗?

Draw a UseCase diagram

现在让我们开始绘制图表,我们要开始绘制一个用例图,如下所示。

UseCase diagram


打开一个用例图,与默认的项目文件来。右键用例图点击,然后选择[打开图]在弹出的菜单或双击它来打开图编辑器中的用例图。


在图编辑器,有一个图表的按钮来编辑工具面板。

放置鼠标指针在按钮,如果你想知道是什么按钮,工具提示会显示该按钮的描述。在图编辑器,你会得出图使用这些按钮开关模式。例如,当您移动图编辑器中的元素,然后开启[选择模式]选择你想要移动的元素,那么你可以移动它们。如果你想创建某个元素不断,切换模式[锁定所选模式] ...等。


????

选择模式。在此模式时,您可以选择,编辑,移动
? 和项目的改变大小。


????

锁定选择的模式。它使您能够不断地craete选定的元素。例如,如果您创建一个演员没有锁定选择模式,一旦你在图编辑器中添加一个演员,你将不得不选择该演员并在此再次创造另一个演员。然而,当锁定选择模式打开以后上,焦点将停留在演员上,你可以在不需要选择演员的情况下利用创建工具盘连续多个演员。


设置项目核心的关联性结束。这行结束的地方。

选择工具栏上的演员按钮,然后在图编辑器的任意位置按一下,创建一个。为这个演员输入“玩家“的名字。
现在,让我们只创建三UseCases就像刚才创建演员的方式。
我们可以通过拖曳的元素,当你想重新命名,只是双击该元素的名称点击。
现在,让我们在演员和三个UseCases之间划出一条线。每一行都有自己的含义。现在我们需要的就是一行也叫做组合。选择一个工具盘组合按钮。要创建一个组合,你必须点击两次,第一次点击在开始目标和并且另外一次点击在最终目标。首先,在“玩家”演员单击,然后点击“开始游戏“用例。现在,一个关联线的绘制的在“玩家”演员和“开始游戏“用例之间就形成了。然后,再创建两个组合就像刚才你做的一样。现在添加一个矩形,把文本“保龄球分数制“写入该矩形内部,来完成该图的绘制!

提示:在组合关联制作过程中取消

如果你要绘制一个关联线,因为失误你在错误的目标点击了,按[ESC]键或右键单击可以取消并重作。它适用于任何项目两个要素之间,比如:概括,体会和依赖。

您可能已经注意到,当您在图编辑器中创建时UseCases和演员添加在结构树中。并且,无论是在图编辑器或结构树中,所选项目的属性,将会在左窗格底部显示,这就是属性视图。您可以修改数据在几个领域,在图编辑器,结构树,性能视图,在任何地方都视最适合你的作品的个案而定。

让我们使用属性查看和改变这个用例图名字。在结构树中选择“用例图“,用例图的属性将显示在属性视图。它的名称设置为“保龄球用例图“,然后按[Enter]键来完成。

提示: 删除元素

要想删除演员或UseCases,可以从弹出菜单中选择[从模型中删除]或[从图中删除]。这两种方法可以删除元素是因为演员和UseCases元素可以与其他图表分享以及使用在其他图表中。

[Delete fromDiagram]
??? Ctrl+D

仅仅从获取焦点的视图中删除,这种模型使用在项目模型中。

[Delete from Model]
??? Delete

它从所有途中完全删除目标文件。

提示:缩放和滚动

我会向你介绍JUDE用来观看操作功能。由于我们刚刚制定用例图中是小规模的,所以没有必要使用视图的功能。或许当您处理大型图表时,你将不得不把焦点放在图的某些部分而要去进行修改。恰好如此,JUDE有一项功能,使得这项操作非常简单。在JUDE图编辑器中,显示的区域可以指定为一个向右的退拽。它使您移动图对角距离。要放大或缩小,从主菜单中选择[查看]或使用工具栏。若想指定一个区域以显示你想看到的,你可以在项目中使用浏览地图查看。 (左上方窗格)。

提示:撤消和重做

JUDE的撤消和重做功能至少可以让你恢复100次!

如果到目前为止,你还没有使用撤消,试一试,看看它是如何工作!所以画图表时没有必要担心犯错误。多惬意!

Android用户界面设计:使用片段

Android 3.0引入的新的片断(Fragment)API,让我们更容易地创建动态用户界面。在这个教程中,我们学习如何将一个两屏的ListView转换成WebView流,以适应大屏幕的单屏流设计,比如在平板设备中。

这篇文章的节奏将比我们的入门教程更快一些。如果你对基本的Android控件或概念不熟悉你可能需要复习这个网站上我们其它的一些教程,甚至是Android
API参考。最终的开源代码可以在Google code上下载到。

片段简介

在我们开始之间,让我们在更高的层次上定义一下什么是片段。通常来说,片段是一大块用户界面,它具有自己的生存周期。如果它听起来像一个Activity,那是因为它确实很像一个Activity。然而,片段与Activity不同,片段必须存在于Activity之内。片段不须要在它每次初始化的时候与同一个Activity配对,这使它具有一些灵活性。与Activity一样,片段也无需包含任何用户界面。

步骤0:开始

这个教程假设你读过我们的列表视图教程,你可以下载那个教程的代码,并完成一些任务,然后开始,也可以直接下载这个教程的代码直接开始。

步骤1:重新设计界面

下图示意了我上在列表视图教程中所提到的文章阅读应用,我们还没有考虑并使用片段:

这个流程在相对小屏幕上运行得很不错。然而,在大屏幕上,比如Motorola
Xoom平板的10寸屏幕上,在列表视图上却浪费了很多空间。WebView看起来正常,但是有点枯燥。

这就是要引入片段的地方:在大屏幕上,我们可以提供更有效的用户界面,如果我们可以在同一屏上显示ListView和WebView。当用户点击左边“面板”的列表视图中的某一项时,右边的WebView更新显示相应的内容。这种工作流程经常用于email或文档或RSS阅读器。下图就是重新设计之后的界面示意图:

步骤2:转换为基于片段的设计

现在我们知道了新的流程应该如何设计,我们也知道当前的两个活动必须转换成片段。我们将分几步来完成这个转换。第一步保持界面样子不变,只是使用片段修改每个界面内容。一个片段将包含当前的ListView,另一个包含WebView。然后我们再转到单个屏幕的实现,修改ListView和WebView之间的消息传递。

首先,将你的程序的项目构建目标改变Android 3.0。在Eclipse中,右键点击项目并选择“属性”。点击Android部分并选中Android
3.0。我们不使用任何Google API,所以Android开源项目版本足够了。然后点击“确定”按钮。

现在你就可以访问新的API了,包括片段API。

注意:在将来的教程中,我们将讨论如何使用新的兼容层来使得像片段API这样的技术在更早版本的Android设备上也能工作。但是现在它只能运行在Android
3.0设备上。

步骤3:创建片段类

创建两个Java类来代表两个片段:ListView界面和WebView界面。将它们命名为TutListFragment和TutViewerFragment。TutListFragment将继承ListFragment类,TutViewerFragment只是继承Fragment类。

在TutListFragment类中,我们需要重写两个方法:
onListItemClick()和onCreate()。这些方法的内容看起来应该很熟悉,它与之前我们讲过的TutListActivity类的代码一致。这个代码很快就要修改,但是现在暂时不需要,下面是当前TutListFragment类的代码:

@Override public void onListItemClick(ListView l, View v, int position, long id) { String[] links = getResources().getStringArray(R.array.tut_links); String cOntent= links[position]; Intent showCOntent= new Intent(getActivity().getApplicationContext(), TutViewerActivity.class); showContent.setData(Uri.parse(content)); startActivity(showContent); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(ArrayAdapter.createFromResource(getActivity() .getApplicationContext(), R.array.tut_titles, R.layout.list_item)); }

TutViewerFragment类更简单一些。我们基于当前片段运行在同一个活动下并且直接从Fragment类内问部获取目标数据的事实。添加一个重写onCreateView()方法。这个方法的代码应该看起来像这样:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Intent launchingIntent = getActivity().getIntent(); String cOntent= launchingIntent.getData().toString(); WebView viewer = (WebView) inflater.inflate(R.layout.tut_view, container, false); viewer.loadUrl(content); return viewer; }

直接访问活动实例的能力非常有用,但是在后面会引起一个问题。如果这个片段存在于带有列表片段的界面上会怎么样呢?在那样的情况下,就会没有启动目标来获取URL。类似的在TutListFragment中,只要当用户点击一个列表项时我们都直接启动一个新的Activity。如果TutViewFragment在同一个活动中存在什么怎么样呢?如果这样的话,启动一个新的活动就没有意义了。我们将在这个教程的后面回过头来解决这个问题。

步骤4:添加片段布局资源

现在创建一个新的名为“tutlist_fragment.xml”的布局文件来表示包含文章列表的片段。片段布局资源使用你创建的Fragment类的标签和引用。

xmlns:android="http://schemas.android.com/apk/res/android"android:name="com.mamlambo.tutorial.tutlist.TutListFragment"android:layout_android:layout_android:id="@+id/tutlist_fragment">

接下来,创建一个类似的布局文件,叫做tutview_fragment.xml:

xmlns:android="http://schemas.android.com/apk/res/android"android:name="com.mamlambo.tutorial.tutlist.TutViewerFragment"android:layout_android:layout_android:id="@+id/tutview_fragment">

步骤5:更新Activity类

TutListActivity和TutViewerActivity类必须修改。TutListActivity类只有一个方法,onCreate(),现在需要修改它来加载你在前一步创建的合适的片段布局资源,如下:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tutlist_fragment); }

TutListActivity应该继承Activity类,而不是ListActivity类。

TutViewerActivity类也需要类似的修改,它的onCreate()方法现在看起来像这样:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tutview_fragment); }

步骤6:检查你的进度

尝试现在运行程序。你会发现它和以前一样。没什么值得兴奋的,不是么?然而,整个用户界面现在使用片段来运行了。这使你需要做的下一步修改更加平滑,我们添加一个新的布局来组合两个片段以在一个界面上显示。然而可能你也注意到了,片段之间的通信的处理和我们文章之间的通信一样。事实上,我们每个片段对应的活动保持不变。当一个活动包含并管理两个片段时,这将不符合需求。首先让我们来修复它。

步骤7:改变TutListFragment通信

像你在步骤3中学到的一样,从TutListFragment对象直接启动一个活动不再有效了。WebView
UI可能与列表是同一个活动的一部分——总之那就是我们对于大屏幕的计划。在那种情况下,我们只想在第二个片段中更新WebView的URL。

做这些修改,我们需要做几件事情。首先,我们让片段不依赖于它们所在的活动。要做到这一点,在TutListFragment类中添加一个侦听器,如下:

public interface OnTutSelectedListener { public void onTutSelected(Uri tutUri); }

然后通过更新onListItemClickListener()方法来触发它,如下:

@Override public void onListItemClick(ListView l, View v, int position, long id) { String[] links = getResources().getStringArray(R.array.tut_links); String cOntent= links[position]; tutSelectedListener.onTutSelected(Uri.parse(content)); }

接下来让TutListActivity类实现OnTutSelectedListener接口,如下:

public class TutListActivity extends Activity implements TutListFragment.OnTutSelectedListener { ... @Override public void onTutSelected(Uri tutUri) { Intent showCOntent= new Intent(getApplicationContext(), TutViewerActivity.class); showContent.setData(tutUri); startActivity(showContent); }

现在我们分离了片段的功能,这些功能用于处理用户界面,作为控制器的活动,向下一个活动传递数据。我们后面要修改onTutSelected()方法来决定是否启动一个新的活动实例或者更新现有的片段实例。

步骤8:改变TutViewerFragment通信

现在让我们把注意力转到TutViewerFragment类上,它的代码也需要修改。片段不再查询启动目标来找出加载哪个URL,而是等待被通知要加载哪个URL。在样,我们可以直接修改WebView而不需要每次加载都重新创建片段。

首先,修改TutViewerFragment类,让它包含一个叫做updateUrl()的方法:

public void updateUrl(String newUrl) { if (viewer != null) { viewer.loadUrl(newUrl); } }

其次,删除所有onCreateView()方法下的功能,除了inflate()的调用。在TutViewerActivity类中,添加这些功能检索Intent然后调用updateUrl()方法,如下:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tutview_fragment); Intent launchingIntent = getIntent(); String cOntent= launchingIntent.getData().toString(); TutViewerFragment viewer = (TutViewerFragment) getFragmentManager() .findFragmentById(R.id.tutview_fragment); viewer.updateUrl(content); }

此时此刻,程序的行为还是没有变化。然而通过进一步的代码,片段现在可以共存在同一个活动中或者分开。

步骤9:添加双片段布局

现在让我们来创建带有两个片段的布局,以供特定情况使用。在layout-land目录(你可能需要自己创建),粘贴一份tutlist_fragment.xml。它将对横屏和竖屏提供不同的布局。竖屏模式将保持不变。编辑这个文件如下:

xmlns:android="http://schemas.android.com/apk/res/android"android:layout_android:layout_android:orientation="horizontal"> android:name="com.mamlambo.tutorial.tutlist.TutListFragment"android:layout_android:layout_android:id="@+id/tutlist_fragment"android:layout_weight="45"> android:name="com.mamlambo.tutorial.tutlist.TutViewerFragment"android:layout_android:layout_android:id="@+id/tutview_fragment"android:layout_weight="55">

这将界面分隔成水平地两个片段(左右结构)。

步骤10:添加动态选项

现在我们可以为程序添加一些简单的逻辑,可以在启动一个新的活动(双屏模式)和更新存在的片段(单屏模式)之间切换。

为了达到这个目的,更新TutListActivity类的onTutSelected()方法如下:

@Override public void onTutSelected(String tutUrl) { TutViewerFragment viewer = (TutViewerFragment) getFragmentManager() .findFragmentById(R.id.tutview_fragment); if (viewer == null || !viewer.isInLayout()) { Intent showCOntent= new Intent(getApplicationContext(), TutViewerActivity.class); showContent.setData(Uri.parse(tutUrl)); startActivity(showContent); } else { viewer.updateUrl(tutUrl); } }

我们所做的就是获取片段并检查它是否是现存的布局的一部分。如果不是,查看器活动启动,否则更新已存在的片段。

步骤11:运行最新的使用片段的程序

到此,程序将有两种模式:竖屏保持不变,横屏显示列表位于WebView的左侧。现在可以做几个改进,但是只是做微调,优化。比如,如果你在竖屏WebView模式下并旋转屏幕,结果还是只有WebView界面。你必须点击返回以获得双面视图。程序修正不在这个教程讲述的范围,但是你可以发现,如果使用适当的布局并且加上一些活动逻辑,你可以对于不同的屏幕和设备做到非常强大和灵活。

总结

片段API帮助组织用户界面组件,以使它们可以实现跨活动重用。这样,程序可以在相对少的代码量下,动态地适应它的流程和用户界面。你也能看到基于片段构建的代码更容易重新组织。更值得高兴的是,通过Google提供的兼容库,现在任何程序都可以使用片段了,它甚至兼容到Android
1.6。现在就使用片段来为每一个屏幕大小和形状创建你的程序用户界面吧!

?

?

内容很精彩,关注此空间?

本文《JUDE 的使用指南 (UML建模工具)》版权归Rong--所有,引用JUDE 的使用指南 (UML建模工具)需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • android开发分享荐                                                         Android思维导图布局:效果展示及使用方法
    思维导图布局的前身是树形布局,对树形布局基本使用还不太了解的朋友可以先看看我写的树形布局系列教程,了解了树形布局的使用方法后再来阅读本文章。先睹为快来看看效果吧,横向效果如下:纵向 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文是对《敏捷软件开发:原则、模式与实践》一书的深度解析,书中不仅探讨了敏捷方法的核心理念及其应用,还详细介绍了面向对象设计的原则、设计模式的应用技巧及UML的有效使用。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文将在前几篇关于Android测试理论知识的基础上,通过ApiDemoTest实例详细探讨如何使用ApplicationTestCase进行Android应用测试。建议读者先阅读Android测试教程系列中的相关内容,以便更好地理解本文的实践部分。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • Android开发:巧妙运用ViewStub写出类似Tab选项卡
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文探讨了如何在游戏启动画面中移除广告,特别是在游戏数据加载期间(大约5-6秒)广告会短暂显示的问题。通过调整XML布局和代码逻辑,可以实现广告的延迟加载或完全移除。 ... [详细]
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
  • 在Android中实现黑客帝国风格的数字雨效果
    本文将详细介绍如何在Android平台上利用自定义View实现类似《黑客帝国》中的数字雨效果。通过实例代码,我们将探讨如何设置文字颜色、大小,以及如何控制数字下落的速度和间隔。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
author-avatar
2502885590_296
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有