当前位置: 首页 > news >正文

什么是微软的 Application Framework?

 

我是荔园微风,作为一名在IT界整整25年的老兵,今天来看一下什么是微软的 Application Framework?

到底什么是 Application Framework?

还没有真正掌握任何一套Application Framework的使用之前,就来研究这个真的不是很明智,尤其如果你对面向对象还没有深刻体会的话。

一、知名杂志的说法

首先我们看看侯捷在其《程序员》杂志上的无责任书评中是怎么说的:演化(evolution)永远在进行,但这个世界却不是每天都有革命性(revolution) 的事物发生。动不动宣称自己(或自己的产品)是划时代的革命性的,带来的影响就像时下满街跑的大师一样使我们渐渐无动于衷(大师不可能满街跑)! 但是Application Framework 的的确确在我们软件界称得上具有革命精神。

什么是Application Framework?Framework这个字眼有组织、框架、体制的意思,Application Framework不仅是一般性的泛称,它其实还是面向对象领域中的一个专有名词。

基本上你可以说,Application Framework是一个完整的程序模型,具备标准应用软件所需的一切基本功能,像是文件存取、打印预览、数据交换...,以及这些功能的使用接口(工具栏、状态栏、菜单、对话框)。如果更以术语来说,Application Framework 就是由一整组合作无间的「对象」架构起来的大模型。喔不不,当它还没有与你的程序产生火花的时候,它还只是有形无体,应该说是一组合作无间的类架构起来的大模型。

这带来什么好处呢?程序员只要带个购物袋到类超级市场采买,随你要买MDI或OLE或ODBC或Printing Preview,回家后就可以轻易拼凑出一个色香味俱全的大餐。

类超级市场就是C++ 类库,以产品而言,在Microsoft 是MFC,在Borland 是OWL,在IBM则是OpenClass。这个类库不只是类库而已,传统的函数库(C Runtime 或 Windows API)乃至于一般类库提供的是生鲜超市中的一条鱼一支葱一颗大白菜,彼此之间没有什么关联,主掌中馈的你必须自己选材自己调理。能够称得上Application Framework 者,提供的是拼盘(就是那种带回家通通丢下锅就好的那种),依你要的是白菜火锅鱼头拼盘或是麻辣拼盘,菜色带调理包都给你配好。当然这样的拼盘是不能够就地吃的,你得给它加点能量。这能量就是所谓的application object(在 MFC 程序中就是派生自 CWinApp 的一个全局对象)。是这个对象引起了连锁反应(一连串的 'new'),使每一个形(类)有了真正的体(对象),把应用程序以及 Application Framework 整个带动起来。一切因缘全由是起。

Application Framework 带来的是,程序模型已经存在,程序员只要依个人需求加料就好:在派生类中改写虚函数,或在派生类中加上新的成员函数。这很像你在拼盘中依个人口味加盐添醋。

由于程序代码的初期规模十分一致(什么样风格的程序应该使用什么类,是一成不变的),而修改程序以符合私人需要的基本动作也很一致(我是指像开辟一个空的骨干函数这种事情),你动不了 Application Framework 的大架构,也不需要动。这是福利不是约束。

应用程序代码骨干一致化的结果,使优越的软件开发工具如 CASE(Computer Aid Software Engineering)tool 容易开发出来。你的程序代码大架构掌握在 Application Framework 设计者手上,于是他们就有能力制作出整合开发环境( Integrated Development Environment,IDE)了。这也是为什么 Microsoft、Borland、Symantec、Watcom、IBM 等公司的集成开发环境进步得如此令人咋舌的原因了。

有人说工学院中唯一保有人文气息的只剩建筑系,我总觉得信息系也勉强可以算上。带艺术气息的软件创作行为(我一直是这么认为的)将在 Application Framework 出现后逐渐成为工匠技术,而我们都将只是软件 IC 装配厂里的男工女工。其实也没什么好顾影自怜,功成名就的冠冕从来也不曾落在程序员头上;我们可能像纽约街头的工作者,自认为艺术家,可别人怎么看呢?不得而知!话说回来,把开发软件这件事情从艺术降格到工技,对人类只有好处没有坏处。不是亨利福特,我们又如何能够享受大众化的汽车?或许以后会出现「纯手工精制」的软件,谁感兴趣不得而知,我自己嘛...唔...倒是从来不嫌机器馒头难吃。

如果要三言两语点出 Application Framework 的特质,我会这么说:我们挖出别人早写好的一整套模块(MFC 或 OWL 或 OpenClass)之中的一部分,给个引子(application object)使它们一一具象化动起来,并被允许修改其中某些零件使这程序更符合私人需求,如是而已。

看了以上他说的内容,是不是一下子就明白了,不得不佩服啊。

二、普通程序员的说法

侯捷的这一段话实在已经点出Application Framework的精神。凝聚性强、组织化强的类库就是 Application Framework。一组合作无间的对象,彼此间靠消息的流动而沟通,并且互相调用对方的函数以求完成任务,这就是 Application Framework。对象存在哪里?在MFC中?MFC的各个类只是对象属性(行为)的定义而已,我们不能够说 MFC 中有实际的对象存在。唯有当程序被application object(这是一个派生自 MFC CWinApp 的全局对象)引出,才将我们选用的类一一具象化起来,产生实体并开始动作。

这样子说吧,静态情况下MFC 是一组类库,但在程序运行时期它就生出了一群有活动力的对象组。最重要的一点是,这些对象之间的关系早已建立好,不必程序员操心。好比说当用户按下菜单的【File/Open】项,开文件对话框就会打开;用户选好文件名后,Application Framework 就开始对着你的数据类,唤起一个名为Serialize 的特殊函数。这整个机制都埋好了,你只要把心力放在那个叫作 Serialize 的函数上即可。

选用标准的类,做出来的产品当然就没有什么特色,因为别人的零件和你的相同,做起来的成品也就一样。我指的是用户接口(UI)对象。但你要知道,软件工业发展到现阶段,UI 已经渐渐走上标准化了。软件一决胜负的关键在数据的处理。事实上,在真正做事这一点上,整个application framework 是无能为力的,也就是说对于数据结构的安排,数据的处理,数据的显示,Application Framework 所能提供的,无一不是单单一个空壳而已——在 C++ 语言来讲就是个虚函数。软件开发人员必须想办法改造(override)这些虚函数,才能符合个人所需。基于 C++ 语言的特性,我们很容易继承既有之类并加上自己的特色,这就是面向对象程序设计的主要精神。也因此,C++ 语言中有关于「继承」性质的份量,在MFC程序设计里头占有很重的比例,在学习使用MFC的同时,你应该对C++的继承性质和虚函数有相当的认识。

MFC 是一个零组件超级市场,所贩卖的零组件功能以及零组件

彼此之间的关系都已定义好;我们选择自己喜欢的零件,做出一个应用程序

Application Framework 究竟能提供我们多么实用的类呢?或者我们这么问:哪些工作已经被处理掉了,哪些工作必须由程序员扛下来?比方说一个标准的 MFC 程序应该有一个可以读写文件数据的功能,然而应用程序本身有它独特的数据结构,从 MFC 得来的零件可能与我的个人需求搭配吗?

我以另一个比喻做回答。

假设你买了一个整厂整线计划,包括仓贮、物料、MIS、生管,各个部门之间的搭配也都建立起来了,包含在整厂整线计划内。这个厂原先是为了生产葡萄酒,现在改变主意要生产白兰地,难道整个厂都不能用了吗?不!只要把进货原料改一改、发酵程序改一改、瓶装程序改一改、整个厂的其它设备以及设备与设备之间的联机配合都可以再利用。物料之后到生管,装瓶之后到仓贮,仓贮之后到出货,再加上 MIS监控全厂,这些程序都是不必改变的。

一个整厂整线计划,每一单元之间的联机沟通,合作关系,都已经建立起来,是一种构造好的运作模式。抽换某个单元的性质或部分性质,并不影响整体作业。整厂整线最重要最有价值的是各单元之间的流程与控制。

反映到面向对象程序设计里头,Application Framework 就是整厂整线规划,Application Framework 提供的类就是上述工厂中一个一个的单元。最具价值的就是各类之间的交互运作模式。

虽然文件读写(此动作在MFC 称为Serialize)单元必须改写以符合个人所需,但是单元与单元之间的关系依然存在而且极富价值。当用户在程序中选按【File/Open】或【File/Save】,框架窗口自动通知Document 对象(内存数据),引发Serialization 动作;而你为了个人的需求,改写了这个 Serialize 虚函数。你对 MFC 的改写范围与程度,视你的程序有多么特异而定。

可是如果酿酒厂想改装为炼钢厂?那可就无能为力了。这种情况不会出现在软件开发上,因为软件的必备功能使它们具有相当的相似性,Windows 又强调界面一致性,不然会给用户的操作带来学习阻力。好比说程序想支持 MDI 接口,想支持 OLE,这基本上是超越程序之专业应用领域之外的一种大格局,一种大架构,最适合 Application Framework 发挥。

很明显,Application Framework是一组超级的类库。能够被称为 Framework 者必须其中的类性质紧密咬合,互相呼应。因此你也就可以想象,Framework 所提供的类是一伙的,不是单片包装的。你把这伙东西放入程序里,你也就得乖乖遵循一种特定的(Application Framework 所规定的)程序风格来进进程序设计工作。

三、各类学习资料上的说法

那其他资料上又是怎么描述Application Framework的?

1985 年,Apple公司的MacApp严格而系统化地定义出做为一个商业化 Application Framework 所需要的关键理念:

这里所指的 support 并不只是视觉性 UI 组件如menu、dialog、listbox...,还包括一个应用程序所需要的其它功能设备,像是 Document, View, Printing, Debugging。

另一个相关定义出现在 Ray Valdes 于1992年10月发表于Dr. Dobb's Journal 的 "Sizing up Application Frameworks and Class Libraries" 一文之中:

Donald G. Firesmith 在一篇名为 "Frameworks : The Golden path of the object Nirvana" 的文章中对 Application Framework 有如下定义:

* Nirvana 是涅盘、最高境界的意思。

Bjarne Stroustrup(C++ 原创者)在他的 The C++ Programming Language 一书中对于Application Framework 也有如下叙述:

Kaare Christian 在1994/02/08的PC Magazine 中有一篇"C++ Application Frameworks" 文章,其中有下列叙述(节录):

两年前我在纽约北边的乡村盖了一栋 post-and-beam 房子。在我到达之前我的木匠已经把每一根梁的外形设计好并制作好,把一根根的粗糙木材变成一块块锯得漂漂亮亮的零件,一切准备就线程只待安装。(注:所谓post-and-beam 应是指那种梁柱都已规格化,可以邮购回来自己动手盖的DIY——Do It Yourself——房子)。

使用Application Framework建造一个Windows 应用程序也有类似的过程。你使用一组早已做好的零件,它使你行进快速。由于这些零件坚强耐用而且稳固,后面的工作就简单多了。但最重要的是,不论你使用规格化的梁柱框架来盖一栋房子,或是使用Application Framework 来建立一个 Windows 程序,工作类型已然改变,出现了一种完全崭新的做事方法。在我的 post-and-beam 房子中,工作类型的改变并不总是带来帮助;贸易商在预制梁柱的技巧上可能会遭遇适应上的困扰。同样的事情最初也发生在Windows 身上,因为你原已具备的某些以 C 语言写 Windows 程序的能力,现在在以C++ 和Application Framework 开发程序的过程中无用武之地。时间过去之后,Windows 程序设计的类型移转终于带来了伟大的利益与方便。Application Framework本身把message loops 和其它Windows的苦役都做掉了,它促进一个比较秩序井然的程序结构。

Application Framework——建立Windows应用软件所用的C++类库。Windows API 是程序性的,Application Framework 则让你写面向对象式的Windows程序。它们提供预先写好的机能(以 C++ 类型式呈现出来),可以加速应用软件的开发。

Application Framework 提供数种优点。或许最重要的,是它们在面向对象程序设计模式下对Windows 程序设计过程的影响。你可以使用 Framework 来减轻例行但繁复的琐事,目前的 Application Framework 可以在图形、对话框、打印、求助、OCX 控制组件、剪贴板、OLE 等各方面帮助我们,它也可以产生漂亮的UI接口如工具栏和状态栏。

借着Application Framework的帮助写出来的代码往往比较容易组织化,因为 Framework改变了Windows管理消息的方法。也许有一天Framework还可以帮你维护单一一套代码以应付不同的执行平台。使用Application Framework的主要缺点是,没有单一一套产品广被所有的C++编译器支持。所以当你选定一套 Framework,在某个范围来说,你也等于是选择了一个编译器。

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

相关文章:

什么是微软的 Application Framework?

我是荔园微风,作为一名在IT界整整25年的老兵,今天来看一下什么是微软的 Application Framework? 到底什么是 Application Framework? 还没有真正掌握任何一套Application Framework的使用之前,就来研究这个真的不是很…...

一个关于宏定义的问题,我和ChatGPT、NewBing、Google Bard、文心一言 居然全军覆没?

文章目录 一、问题重述二、AI 解题2.1 ChatGPT2.2 NewBing2.3 Google Bard2.4 文心一言2.5 小结 一、问题重述 今天在问答模块回答了一道问题,要睡觉的时候,又去看了一眼,发现回答错了。 问题描述:下面的z的值是多少。 #define…...

【服务器数据恢复】断电导致RAID无法找到存储设备的数据恢复案例

服务器数据恢复环境: HP EVA存储,6块SAS硬盘组建的raid5磁盘阵列。上层操作系统是WINDOWS SERVER。该存储为公司内部文件服务器使用。 服务器故障&分析: 在遭遇两次意外断电后,设备重启时raid提示“无法找到存储设备”。管理员…...

Windows上不可或缺的5款宝藏软件,工作效率拉满!

职场小白与大牛的区别:小白需要耗费大半天琢磨的事情,而大牛可以只花5分钟就能处理。 “牛人”,即拥有过人之处,专业、经验、技术等等,学会灵活运用高效率的工具也是关键的一点。工具找得好,运用得快&#…...

链表内指定区间反转

题目: 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。 例如: 给出的链表为 1→2→3→4→5→NULL,m2,n4 返回 1→4→3→2→5→NULL 数据范围&#xff…...

Vue中如何进行地图展示与交互(如百度地图、高德地图)?

Vue中如何进行地图展示与交互 随着移动互联网的普及,地图应用已经成为人们生活中不可或缺的一部分。在Vue.js中,我们可以使用第三方地图库(如百度地图、高德地图)来实现地图的展示和交互。本文将介绍如何在Vue.js中使用百度地图和…...

uni-app组件概述

1、组件 1.1、组件的含义 组件是视图层的基本组成单元。 组件是一个单独且可复用的功能模块的封装。 组件&#xff0c;包括&#xff1a;以组件名称为标记的开始标签和结束标签、组件内容、组件属性、组件属性值。 <component-name>是开始标签&#xff0c;</compon…...

什么是防火墙?它有什么作用?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、什么是防火墙 二、防火墙的分类 1、软件防火墙 2、硬件防火墙 三、防火墙的作用 1、防止病毒 2、防止访问不安全内容 3、阻…...

基础工程(cubeide串口调试,printf实现,延时函数)

0.基础工程&#xff08;cubeide串口调试&#xff0c;printf实现&#xff0c;延时函数&#xff09; 文章目录 0.基础工程&#xff08;cubeide串口调试&#xff0c;printf实现&#xff0c;延时函数&#xff09;外部时钟源CLOCK(RCC)系统时钟SYS与DEBUG设置UART串口设置cubeide设置…...

大厂设计师都在用的9个灵感工具

每一件伟大的设计作品都离不开设计师灵感的爆发。设计师有很多灵感来源&#xff0c;比如精美的摄影图片、酷炫的网站设计、APP的特色功能、友好的用户体验动画&#xff0c;或者一篇文章。 设计师每天都需要收集灵感&#xff0c;把灵感收集当成日常生活。在这篇文章中&#xff…...

安全实现SpringBoot配置文件自动加解密

需求背景 应用程序开发的时候&#xff0c;往往会存在一些敏感的配置属性 数据库账号、密码第三方服务账号密码内置加密密码其他的敏感配置 对于安全性要求比较高的公司&#xff0c;往往不允许敏感配置以明文的方式出现。 通常做法是对这些敏感配置进行加密&#xff0c;然后在…...

数据结构--队列2--双端队列--java双端队列

介绍 双端队列&#xff0c;和前面学的队列和栈的区别在于双端队列2端都可以进行增删&#xff0c;其他2个都是只能一端可以增/删。 实现 链表 因为2端都需要可以操作所以我们使用双向链表 我们也需要一共头节点 所以节点设置 static class Node<E>{E value;Node<E…...

网络安全:信息收集专总结【社会工程学】

前言 俗话说“渗透的本质也就是信息收集”&#xff0c;信息收集的深度&#xff0c;直接关系到渗透测试的成败&#xff0c;打好信息收集这一基础可以让测试者选择合适和准确的渗透测试攻击方式&#xff0c;缩短渗透测试的时间。 一、思维导图 二、GoogleHacking 1、介绍 利用…...

Linux 命令总结

基本操作 Linux关机,重启 # 关机 shutdown -h now# 重启 shutdown -r now 查看系统,CPU信息 # 查看系统内核信息 uname -a# 查看系统内核版本 cat /proc/version# 查看当前用户环境变量 envcat /proc/cpuinfo# 查看有几个逻辑cpu, 包括cpu型号 cat /proc/cpuinfo | grep na…...

使用腾讯手游助手作为开发测试模拟器的方案---以及部分问题的解决方案

此文主要介绍使用第三方模拟器(这里使用腾讯手游助手)作为开发工具&#xff0c;此模拟器分为两个引擎&#xff0c;一个与其他模拟器一样基于virtualbox的标准引擎&#xff0c;不过优化不太好&#xff0c;一个是他们主推的aow引擎&#xff0c;此引擎。关于aow没有太多的技术资料…...

牛客网论坛最具争议的Linux内核成神笔记,GitHub已下载量已过百万

原文地址&#xff1a;牛客网论坛最具争议的Linux内核成神笔记&#xff0c;GitHub已下载量已过百万 1、前言 Linux内核是一个操作系统&#xff08;OS&#xff09;内核&#xff0c;本质上定义为类Unix。它用于不同的操作系统&#xff0c;主要是以不同的Linux发行版的形式。Linu…...

docker如何容器迁移(实战)

手把手教你如何做容器迁移 第一步准备数据 假设要迁移一个 mysql 服务&#xff08;docker部署&#xff09;&#xff0c;由于数据库过大&#xff08;超过50 GB&#xff09;&#xff0c;用mysqldump备份和还原则太过耗时&#xff0c;下面尝试拷贝目录的方式来迁移&#xff0c;详…...

Android kotlin序列化之Parcelable详解与使用(二)

一、介绍 注解序列化篇&#xff1a;Android kotlin序列化之Parcelize详解与使用_蜗牛、Z的博客-CSDN博客 通过上一篇注解序列化&#xff0c;我们已了解的kotlin的序列化比Java复杂了很多。而且有好多问题&#xff0c;注解虽好&#xff0c;但是存在一些问题。 一般在大型商业…...

C++ 类设计的实践与理解

前言 C代码提供了足够的灵活性&#xff0c;因此对于大部分工程师来说都很难把握。本文介绍了写好C代码需要遵循的最佳实践方法&#xff0c;并在最后提供了一个工具可以帮助我们分析C代码的健壮度。 1. 尽可能尝试使用新的C标准 到2023年&#xff0c;C已经走过了40多个年头。新…...

循环链表的创建

循环链表的介绍及创建&#xff08;C语言代码实现&#xff09; 点击打开在线编译器&#xff0c;边学边练 循环链表概念 对于单链表以及双向链表&#xff0c;其就像一个小巷&#xff0c;无论怎么样最终都能从一端走到另一端&#xff0c;然而循环链表则像一个有传送门的小巷&…...

如何让GPT的回答令人眼前一亮,不再刻板回复!

我们平常在使用GPT的时候&#xff0c;是否觉得它的回复太过于死板、官方化&#xff0c;特别是用于创作、写论文分析的时候&#xff0c;内容往往让读者提不起兴趣、没有吸引人的地方&#xff0c;甚至有些内容百度都可以搜到。 举个例子&#xff0c;如下图: 问GPT&#xff0c;AI…...

JMeter测试笔记(四):逻辑控制器

引言&#xff1a; 进行性能测试时&#xff0c;我们需要根据不同的情况来设置不同的执行流程&#xff0c;而逻辑控制器可以帮助我们实现这个目的。 在本文中&#xff0c;我们将深入了解JMeter中的逻辑控制器&#xff0c;包括简单控制器、循环控制器等&#xff0c;并学习如何正…...

【计算机组成原理·笔记】I/O接口

I/O接口 概述I/O接口的功能和组成 I/O接口的组成I/O接口的功能 I/O接口类型 按数据传送方式按功能灵活性按通用性按数据传输的控制方式 概述 I/O接口通常是指主机与I/O设备之间设置的硬件电路以及相应的软件控制&#xff0c;主机通过I/O接口和I/O设备相连接。 I/O接口的功…...

MIT6.024学习笔记(二)——图论(1)

学习不是为了竞争和战胜他人&#xff0c;而是为了更好地了解自己和世界。 - 达赖喇嘛 文章目录 图的相关概念涂色问题基础涂色方法&#xff08;贪婪算法&#xff09;证明 二分图匹配问题应用&#xff1a;稳定婚烟问题算法性质及其证明 图的相关概念 图的定义&#xff1a;一组&…...

饼状图使用属性时,使用驼峰命名法

饼状图是使用D3.js等JavaScript库来绘制的&#xff0c;而JavaScript中的属性名通常采用驼峰式命名法&#xff0c;即第一个单词的首字母小写&#xff0c;后面单词的首字母大写&#xff0c;例如fontSize、fontWeight等。而CSS中的属性名采用连字符命名法&#xff0c;即单词之间用…...

使用Spring Boot、Spring Security和Thymeleaf的整合示例

使用Spring Boot、Spring Security和Thymeleaf的整合示例 大纲&#xff1a; 创建Spring Boot项目 集成Thymeleaf作为模板引擎 配置Spring Security实现身份验证和授权 创建登录页面和主页 创建管理员页面和普通用户页面 实现用户角色和权限管理 详细步骤&#xff1a; 创建Sprin…...

Linux--ServerProgramming--(7)IPC

1.管道 2.信号量 2.1 概念 信号量 是一个计数器&#xff0c;用于实现进程间互斥和同步。 信号量的取值可以是任何自然数。 最简单的信号量是只能取 0 和 1 的变量&#xff0c;这也是信号量最常见的一种形式&#xff0c;叫做二进制信号量&#xff08;Binary Semaphore&#…...

最优化理论-KKT定理的推导与实现

目录 一、引言 二、最优化问题的基本概念 三、KKT条件的引入 1. 梯度条件 2. 原始可行性条件 3. 对偶可行性条件 四、KKT定理的表述 五、KKT定理的证明 1. 构造拉格朗日函数 2. 构造拉格朗日对偶函数 3. 推导KKT条件 4. 解释KKT条件 六、KKT定理的应用 七、总结 …...

chatgpt赋能python:Python中引入其他包的指南

Python中引入其他包的指南 Python是一种流行的编程语言&#xff0c;拥有丰富的开源软件包和库。许多Python程序将使用其他包来增强其功能。在本文中&#xff0c;我们将探讨如何在Python项目中使用和引入其他包。 什么是Python包和库&#xff1f; Python包是一组可重复使用的…...

设计模式-组合模式

应用场景 实现规则匹配的逻辑 比如> <,同时支持 and or 多个条件组合 新增一个条件就增加一个实现类 说明 对于这种需要实现规则匹配的逻辑&#xff0c;可以考虑使用策略模式。策略模式可以将不同的算法封装成不同的策略类&#xff0c;让它们可以相互替换&#xff0c;…...

看设计作品的网站软件/滨州seo招聘

俗话说工欲善其事&#xff0c;必先利其器做Python开发同样也是这样一个道理&#xff0c;那么Python用什么开发工具呢?其实Python开发工具能用的有很多的&#xff0c;今天小编就为大家推荐几款&#xff0c;这些里面总有一款适合你。NO1. PycharmPycharm可以应用于写相应脚本和程…...

wordpress迁移后地址没变/google下载官网

在我们了解linux操作系统之前我们首先要先知道虚拟机的运行架构&#xff0c;我们在初学linux的时候&#xff0c;如果在我们的真实PC上做操作你就会发现&#xff0c;你很多时候都是在重装系统的状态下&#xff0c;当然你也可以在linux操作系统上去装一个KVM虚拟机&#xff0c;不…...

wordpress侧边栏图片/东莞互联网推广

编写一个word2htm.vbs,然后把它拖放到存放word文档内&#xff0c;点按两下word2htm.vbs,目录内的所有文档会自动转换成htm文件。word2htm.vbs的编码如下。Set fsObject CreateObject ("Scripting.FileSystemObject")myDocDirfsObject.GetAbsolutePathName("&qu…...

大连建设工程信息网专家库/页面seo是什么意思

中小型软件开发项目一般都具有任务急、工期短的特点&#xff0c;要在确保满足 时间、质量、成本和效益的情况下交付给客户满意软件产品&#xff0c; 必须保证团队与客户、团队成员之间能良好的沟通与协作。沟通与协作是团队开发活动的基础&#xff0c;它贯穿于软件开发的整个生…...

做棋牌网站的步骤/网级移动营销app下载

jsoup 是一款Java 的HTML解析器&#xff0c;可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于jQuery的操作方法来取出和操作数据。 进入http://www.open-open.com/jsoup/下载jsoup 通过链接获取到http://www.…...

万户网络做网站很垃圾/it行业培训机构一般多少钱

//释放PersonA 对象 那么我需要先把DogB release&#xff0c;然后在释放 [personA release];//清空指针personA nil; //------ 关于retainCount为1 、 -1 、 0 、 无穷大的条件 //1&#xff1a;为对象计数&#xff0c;当创建对象时或者对象即将释放时为1&#xff0c;即对象计…...