C++ BUILDER 4 核心编程技术

C++ BUILDER 4 核心编程技术 pdf epub mobi txt 电子书 下载 2026

出版者:北京希望电脑公司/北京希望电子出版社
作者:徐新华
出品人:
页数:204
译者:
出版时间:1999-12
价格:30.00元
装帧:平装
isbn号码:9787900031013
丛书系列:
图书标签:
  • C++ Builder
  • C++
  • 编程
  • 开发
  • Windows
  • GUI
  • VCL
  • 数据库
  • 组件
  • 教程
  • 经典
想要找书就要到 小美书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

内容简介

本书全面深入地介绍了C++Builder 4的数据库及MIDAS编程技术。全书共分14章。前

2章集中介绍了应用程序的体系结构,重点是如何从单层、两层平滑地过渡到多层;随后,又

介绍了传统的数据库编程技术,包括数据集、BDE会话期、连接数据库、字段对象、表、查

询、存储过程、数据感知控件等内容;在最后两章详细剖析了几个典型的示范程序,以帮助

读者更快更好地掌握有关编程技巧。本书的重点是MIDAS技术,这是C++Builder4的精髓,

也是广大程序员迫切需要掌握的技术。

本书内容丰富、全面,语言简洁易懂。适用于程序员、数据库工作人员及大专院校相关

专业的师生自学、教学参考书。

本书配套光盘内容包括:1与本书配套的电子书;2送“精通VisualC++5.0”多媒体学

习软件。

《C++ Builder 4 核心编程技术》 本书致力于为您揭示 C++ Builder 4 强大的开发能力,引导您深入掌握其核心编程技术。如果您渴望高效地构建各类 Windows 应用程序,无论是界面美观的桌面软件,还是功能强大的数据库应用,抑或是需要精细控制的系统级工具,那么本书将是您不可或缺的得力助手。 本书内容涵盖: C++ Builder 4 概览与开发环境: 深入解析 C++ Builder 4 的发展历程、核心设计理念以及它在现代软件开发中的定位。 详细介绍集成开发环境(IDE)的各个组件、菜单、工具栏和窗口,指导您如何高效地进行项目管理、代码编写、编译调试以及资源管理。 从零开始,引导您创建第一个 C++ Builder 4 项目,熟悉基本的项目结构和文件组成。 面向对象编程(OOP)在 C++ Builder 4 中的应用: 系统地梳理 C++ 的面向对象特性,包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。 演示如何在 C++ Builder 4 中利用 VCL(Visual Component Library)框架,将面向对象的思想融入到用户界面(UI)和应用程序逻辑的构建中。 教授您如何设计和实现自定义类,以及如何利用现有的 VCL 组件来构建复杂的对象模型。 VCL 组件与用户界面设计: 全面剖析 VCL 库,这是 C++ Builder 4 的灵魂所在,它提供了丰富的预制可视化组件,极大简化了 UI 开发。 详细介绍各类常用 VCL 组件,如按钮(Button)、文本框(Edit Box)、标签(Label)、列表框(List Box)、组合框(Combo Box)、列表视图(List View)、树状视图(Tree View)等,讲解其属性、事件和常用方法。 指导您如何运用事件驱动编程模型,响应用户的交互操作,如点击按钮、输入文本等,并编写相应的事件处理程序。 深入探讨窗口(Form)的设计与管理,包括窗口的创建、布局、属性设置以及窗口间的切换和通信。 学习如何使用布局管理器,如 `TPanel`、`TGroupBox`、`TPageControl` 等,来组织和排列界面组件,实现响应式布局。 探索菜单(Menu)、工具栏(ToolBar)、状态栏(StatusBar)的创建与管理,提升用户体验。 数据访问与数据库编程: 重点介绍 C++ Builder 4 强大的数据库访问能力,包括 ADO(ActiveX Data Objects)和 BDE(Borland Database Engine)等技术。 详细讲解 `TTable`、`TQuery`、`TDataSource`、`TDBEdit`、`TDBGrid` 等数据感知型组件(Data-aware Components),以及如何通过它们连接数据库、执行 SQL 查询、显示和编辑数据。 指导您如何处理数据库连接、数据绑定、数据验证、数据排序和过滤等常见数据库操作。 教授您如何利用 `TClientDataSet` 等组件实现数据缓存和离线操作。 高级编程技术与深入探索: 异常处理(Exception Handling): 掌握 `try-catch` 块的运用,有效地处理程序运行时可能出现的错误,提高程序的健壮性。 文件操作(File I/O): 学习如何进行文件的读写操作,包括文本文件和二进制文件的处理,以及文件流(Stream)的使用。 图形与多媒体: 探索 C++ Builder 4 在图形绘制(如 `TCanvas`)和简单多媒体处理方面的能力,为您的应用增添视觉表现力。 多线程编程(Multithreading): 了解如何在 C++ Builder 4 中创建和管理线程,实现并发执行,提高应用程序的响应速度和效率。 COM/ActiveX 技术: 简要介绍 COM(Component Object Model)和 ActiveX 技术,以及如何在 C++ Builder 4 中使用或创建 COM 组件。 DLL 开发与使用: 学习如何创建和调用动态链接库(DLL),实现代码的模块化和重用。 内存管理: 深入理解 C++ 的内存管理机制,包括指针、引用、动态内存分配(`new`、`delete`)以及智能指针的应用,避免内存泄漏。 性能优化: 提供一些关于如何优化 C++ Builder 4 应用程序性能的实用技巧和方法。 本书的特点: 实践导向: 大量穿插了贴近实际开发的示例代码和项目案例,帮助您快速掌握知识并应用于实践。 循序渐进: 从基础概念讲起,逐步深入到高级主题,适合不同水平的学习者。 全面详尽: 覆盖了 C++ Builder 4 核心编程的方方面面,是您学习和查阅的宝贵参考。 易于理解: 语言清晰,逻辑性强,并配有图示和解释,确保您能轻松理解每个概念。 无论您是 C++ Builder 的初学者,还是希望系统提升技能的开发者,本书都将为您提供一条清晰的学习路径,助您成为一名出色的 C++ Builder 4 应用程序开发者。

作者简介

目录信息

目 录
第1章 设计数据库应用程序
1.1使用数据库
1.2数据库应用程序的体系结构
1.3设计用户界面
第2章 单层和两层的应用程序
2.1基于BDE的应用程序
2.2事务
2.3基于文件的单层数据库应用程序
第3章 创建多层应用程序
3.1多层体系结构的概述
3.2选择连接方式
3.3创建应用程序服务器的一般步骤
3.4远程数据模块
3.5Provider
3.6创建客户程序的一般步骤
3.7与应用程序服务器连接
3.8调用服务器上的接口
3.9在客户端纠错
3.10更新数据
3.11自定义应用程序服务器
3.12使远程数据模块不依赖于状态
3.13多层体系结构下的事务
3.14把客户程序设计为ActiveForm
第4章 BDE会话期
4.1TSession
4.2检索有关BDE会话期的信息
4.3管理BDE别名
4.4遍历所有的TDatabase构件
4.5访问Paradox表
4.6口令
4.7管理多个BDE会话期对象
第5章 连接数据库
5.1永久和临时的TDatabase构件
5.2控制连接
5.3遍历一个数据库的所有数据集
5.4TDatabase与TSession的关系
第6章 什么是数据集
6.1打开和关闭数据集
6.2数据集的状态
6.3浏览记录
6.4书签
6.5搜索特定的记录
6.6过滤
6.7修改数据
6.8事件
6.9TBDEDataSet
6.10TDBDataSet
第7章 字段对象
7.1具体的字段对象
7.2理解字段对象
7.3动态字段对象
7.4永久字段对象
7.5设置永久字段对象的特性
7.6属性集
7.7显示、转换和访问字段的值
7.8字段级纠错
7.9Oracle8的对象字段
第8章 访问表格
8.1使用TTable构件的一般步骤
8.2在表格中搜索记录
8.3对记录排序
8.4选择部分记录
8.5对表格整体的操作
8.6Master/Detai1关系
8.7嵌套表
8.8从另一个表格中引入数据
8.9使用TBatchMove
第9章 查询数据库
9.1有效地使用查询
9.2可以查询哪些数据库
9.3使用TQuery构件的一般步骤
9.4指定要执行的SQL语句
9.5参数
9.6执行查询
9.7异构查询
9.8双向游标
9.9查询结果
第10章 存储过程
10.1概述
10.2什么时候需要用存储过程
10.3怎样使用存储过程
10.4创建一个存储过程
10.5存储过程的参数
第11章 TClientDataSet
11.1浏览和编辑数据
11.2索引
11.3计算字段
11.4统计值
11.5数据包
11.6与应用服务器通信
11.7在文件中存取数据
第12章 使用数据控件
12.1C++Bui1der4中有哪些数据控件
12.2数据控件的基本用法
12.3显示单个字段的数据控件
12.4用列表框和组合框显示和编辑数据
12.5用复选框处理布尔类型的字段
12.6用单选分组框限制字段的值
12.7使用TDBGrid
12.8导航器
12.9数据源
第13章 剖析几个数据库应用程序
13.1一个后台查询的示范程序
13.2一个缓存更新的示范程序
13.3一个Client/Server示范程序
13.4一个TDBCtrlGrid构件的示范程序
13.5一个捕捉数据库错误的示范程序
13.6一个对数据集进行过滤的示范程序
13.7一个显示备注字段和图像字段的示范程序
13.8一个动态改变过滤条件的示范程序
13.9一个复杂的数据库应用程序
第14章 剖析几个MlDAS示范程序
14.1一个ActiveForm的例子
14.2一个动态传递SQL语句的示范程序
14.3一个雇员管理程序
14.4一个演示Master/Detail关系的示范程序
14.5一个动态设置查询参数的示范程序
· · · · · · (收起)

读后感

评分

评分

评分

评分

评分

用户评价

评分

我一直在寻找一本能够系统性地介绍C++ Builder开发的书籍,在比较了市面上几本同类书籍后,我选择了《C++ BUILDER 4 核心编程技术》。这本书给我最深刻的印象是其内容的“实操性”和“系统性”的结合。书中不仅仅是理论的堆砌,而是通过大量的实例,一步步地引导读者动手实践。我特别喜欢书中关于“用户界面设计”的章节,它详细介绍了如何利用C++ Builder提供的丰富的控件来构建各种风格的用户界面,并能够通过属性编辑器来精细地调整控件的布局和外观。这种“可视化”的开发方式极大地提高了我的开发效率。书中对“事件处理机制”的讲解也十分清晰,让我能够理解如何编写代码来响应用户的各种操作,从而构建出具有交互性的应用程序。我跟着书中关于“数据库应用开发”的章节,学习了如何连接数据库、进行数据查询、数据绑定等操作,这为我开发数据管理类软件提供了坚实的基础。书中还涉及了“文件I/O”、“图形绘制”、“多媒体处理”等多个方面的技术,让我能够应对更广泛的应用开发需求。我特别注意到书中关于“性能优化”的章节,作者分享了一些实用的技巧,帮助我提高程序的运行效率,这对于开发大型、复杂的应用程序非常重要。总而言之,这本书为我提供了一个全面而实用的C++ Builder学习平台,让我能够快速掌握这款强大的开发工具,并将其应用到实际的项目中。

评分

我是一名刚刚接触C++ Builder的初学者,一直对Windows应用程序开发充满好奇,但又担心门槛太高。在朋友的推荐下,我购买了这本《C++ BUILDER 4 核心编程技术》,这本书的出现彻底改变了我对编程的看法。它不像我之前看过的某些技术书籍那样晦涩难懂,而是以一种非常友好的方式引导我入门。书中对C++ Builder IDE的介绍非常详尽,从安装到界面布局,再到各种常用工具的使用,都讲解得非常清晰。我最喜欢的是书中关于“可视化界面设计”的部分,我跟着书中的步骤,一步步地学会了如何在界面上放置按钮、文本框、列表框等控件,并能够通过属性编辑器来调整它们的样式和行为。这种“所见即所得”的开发方式让我感到无比兴奋,大大激发了我学习的兴趣。书中还通过一个又一个精心设计的实例,教会我如何编写代码来响应用户的操作,比如点击按钮时弹出消息框,输入文本后进行处理等。这些基础的事件处理让我逐渐掌握了C++ Builder的核心编程模式。此外,书中还涉及了文件操作、数据存储等内容,让我能够构建出更具实用性的程序。总的来说,这本书为我这个编程新手提供了一个非常好的起点,让我能够快速上手C++ Builder,并充满信心地继续我的编程学习之旅。

评分

我一直对Windows桌面应用程序的开发有着浓厚的兴趣,尤其是那些能够提供丰富用户界面和强大功能的软件。在接触到C++ Builder 4之前,我主要使用的是其他一些开发工具,但总觉得在开发效率和图形界面集成方面有所欠缺。当我翻开这本《C++ BUILDER 4 核心编程技术》时,我立刻被它系统性的讲解所吸引。书中不仅仅是枯燥的代码堆砌,而是循序渐进地引导读者理解C++ Builder的核心理念。我尤其喜欢其中关于“可视化编程”的阐述,它详细介绍了如何在IDE中通过拖放控件来构建用户界面,以及如何通过属性编辑器来修改控件的外观和行为,这极大地降低了开发门槛,让编程变得更加直观有趣。书中对于VCL(Visual Component Library)的深入剖析更是让我眼前一亮,它涵盖了各种常用控件的用法,以及如何自定义控件、创建自己的组件。我跟着书中的例子,尝试着实现了一个数据录入界面,通过学习如何使用数据库控件进行数据源连接、字段绑定,以及如何编写代码来处理数据的增删改查,我深刻体会到了C++ Builder在数据库应用开发方面的强大能力。书中还详细介绍了如何处理各种用户事件,比如按钮点击、鼠标移动、键盘输入等,并讲解了如何编写响应这些事件的代码,使得应用程序能够与用户进行有效的交互。此外,书中对异常处理和错误调试的讲解也十分细致,这对于编写健壮、可靠的软件至关重要。这本书为我提供了一个扎实的C++ Builder编程基础,让我能够更自信地去应对各种复杂的开发挑战。

评分

这本书的封面上赫然写着“C++ BUILDER 4 核心编程技术”,我怀揣着学习先进开发工具的热情把它买回了家。拆开包装,一股淡淡的油墨香扑面而来,立刻激起了我想要深入了解的欲望。我首先被吸引的是书中对C++ Builder IDE的详细介绍,作者从安装配置到界面布局,再到各项工具的用法,都进行了细致的讲解。我尤其欣赏其中对于组件化开发思想的阐述,它让我明白了如何通过拖拽和属性设置来快速构建用户界面,这对于过去习惯于纯代码开发的程序员来说,无疑是一次颠覆性的体验。书中还花了大量篇幅讲解了C++ Builder特有的VCL(Visual Component Library),它提供了海量预置的控件和组件,涵盖了从标准按钮、文本框到更复杂的网格、图表等,极大地提高了开发效率。我按照书中的示例,尝试着创建了一个简单的通讯录程序,通过学习如何连接数据库、进行数据绑定,我惊喜地发现,原来复杂的数据库操作可以如此直观和便捷。书中对事件驱动编程模型的解释也十分到位,让我理解了在图形界面应用程序中,用户交互是如何触发相应的代码执行的,这对于编写响应迅速、交互友好的软件至关重要。此外,书中还涉及了多线程编程、异常处理、文件操作等基础但重要的C++知识,并结合C++ Builder的特性进行了讲解,使得这些理论知识有了更直观的应用场景。总而言之,这本书为我打开了一扇通往高效Windows应用程序开发的大门,让我对C++ Builder这款强大的开发工具有了全新的认识,也对未来的编程实践充满了期待。

评分

在我准备深入学习Windows应用程序开发的时候,很多人都向我推荐了C++ Builder,而这本《C++ BUILDER 4 核心编程技术》成为了我的首选学习资料。这本书的结构安排非常合理,从基础的C++语法回顾,到C++ Builder IDE的全面介绍,再到VCL(Visual Component Library)的深入解析,层层递进,逻辑清晰。我特别喜欢书中对“事件驱动编程”的讲解,它通过大量的实例,让我清晰地理解了如何通过编写事件处理函数来响应用户的各种操作,例如点击按钮、选择菜单项等。这使得我能够构建出真正具有交互性的应用程序。书中对“控件的生命周期”的探讨也让我印象深刻,让我理解了控件从创建到销成的整个过程,以及在不同阶段可以执行的操作,这对于编写健壮的程序至关重要。我跟着书中关于“内存管理”的章节,学习了如何在C++ Builder中有效地管理内存,避免内存泄漏,这对于开发大型、长时运行的应用程序来说是必不可少的。书中还详细介绍了如何使用C++ Builder进行“多线程编程”,这使得我能够开发出更具响应速度的应用程序,避免界面卡顿。此外,书中关于“DLL的创建和使用”的章节,也为我打开了新的视野,让我能够将代码模块化,提高代码的复用性。总而言之,这本书不仅教会了我如何使用C++ Builder,更重要的是让我理解了Windows应用程序开发背后的核心原理,为我未来的编程之路打下了坚实的基础。

评分

作为一名已经有几年编程经验的开发者,我一直在寻找一款能够提升我Windows应用程序开发效率的工具。在尝试了不同的开发环境后,我将目光投向了C++ Builder 4,并购买了这本《C++ BUILDER 4 核心编程技术》进行学习。这本书的优点在于其内容的深度和广度都非常令人满意。作者从最基础的环境搭建开始,逐步深入到C++ Builder的核心组件和技术。我尤其欣赏书中对于VCL(Visual Component Library)的讲解,它详细地介绍了VCL的架构、常用控件的属性和事件,以及如何通过VCL来创建自定义的控件和组件。书中大量的代码示例都非常贴合实际开发需求,并且解释清晰,易于理解。我尝试着书中关于“面向对象设计”的章节,理解了如何在C++ Builder中运用类、对象、继承、多态等概念来组织代码,这不仅提高了代码的可重用性和可维护性,也让我对面向对象编程有了更深的理解。书中还涉及了诸如数据库连接、报表生成、网络通信等高级主题,并提供了相应的解决方案和代码示例,这对于我进一步拓展开发领域非常有帮助。我特别关注了书中关于“性能优化”的部分,作者分享了一些提高程序运行效率的技巧和方法,这对于开发大型、复杂的应用程序来说至关重要。总而言之,这本书为我提供了一个全面而深入的C++ Builder学习指南,让我能够更有效地利用这款强大的工具来开发高性能、用户友好的Windows应用程序。

评分

这本书对我而言,更多的是一种“唤醒”式的体验。在我之前,我对C++ Builder这款工具的印象仅停留在“可以用来做Windows程序”这个模糊的概念上。然而,《C++ BUILDER 4 核心编程技术》用一种极其扎实且富有条理的方式,将C++ Builder的强大功能展现在我面前。我尤其赞赏书中对VCL(Visual Component Library)的深度挖掘,它不仅仅列举了各种控件的用法,更重要的是阐述了VCL背后的设计哲学,即组件化的开发思想。通过学习书中关于如何创建自定义组件、如何封装常用功能的内容,我开始意识到,原来可以如此高效地构建可复用、可维护的软件模块。书中关于“对象模型”的讲解也让我受益匪浅,它让我理解了C++ Builder是如何利用C++的面向对象特性,来简化图形界面应用程序的开发的。我跟着书中关于“消息处理机制”的章节,深入理解了Windows应用程序的事件驱动模型,这对于我编写响应迅速、用户体验良好的程序至关重要。书中对于“异常处理”和“调试技巧”的讲解也十分实用,让我能够更自信地应对开发过程中遇到的各种问题。我特别注意到书中关于“数据库集成”的章节,它详细介绍了如何利用C++ Builder提供的强大数据库访问组件,来快速实现与各种数据库的数据交互,这对于开发数据驱动型应用程序提供了极大的便利。总而言之,这本书为我提供了一个全新的视角来审视C++ Builder,让我能够将其作为一种强大的生产力工具,去创造更复杂的、更具创意的软件。

评分

对于我这样一位C++开发者来说,转型到C++ Builder环境,我最看重的是它能否在保留C++强大能力的同时,提供更高效的GUI开发方式。《C++ BUILDER 4 核心编程技术》这本书恰恰满足了我的需求。它并没有让我放弃C++的优势,而是将C++的强大与C++ Builder的可视化开发理念巧妙地结合起来。书中对VCL(Visual Component Library)的介绍令我印象深刻,它不仅仅是各种控件的集合,更是一种完整的组件化开发框架。我尤其欣赏书中关于“继承和多态在VCL中的应用”的章节,这让我能够更好地理解如何通过继承来扩展现有控件的功能,如何利用多态来编写更具通用性的代码。书中关于“消息处理机制”的深入讲解,让我能够更好地理解Windows应用程序的事件驱动模型,并编写出响应迅速、用户体验良好的程序。我跟着书中关于“数据库连接和操作”的章节,学习了如何利用C++ Builder提供的便捷工具来访问和管理数据库,这极大地提高了我的数据处理效率。书中还涉及了“文件操作”、“注册表操作”等多个Windows系统编程的重要方面,为我提供了更全面的开发能力。我特别注意到书中关于“窗体设计器”和“代码编辑器”的联动讲解,这让我能够在一个集成化的环境中高效地完成开发任务。总而言之,这本书为我提供了一个从C++到C++ Builder的平滑过渡,让我能够充分发挥C++的强大能力,同时又享受C++ Builder带来的开发效率提升。

评分

当我准备探索Windows应用程序开发的新领域时,《C++ BUILDER 4 核心编程技术》这本书成为了我的首选。我被它系统的结构和深入浅出的讲解所吸引。书中对C++ Builder IDE的介绍非常详尽,从安装配置到界面布局,再到各项工具的用法,都进行了细致的讲解。我尤其欣赏其中对于“可视化编程”的阐述,它详细介绍了如何在IDE中通过拖拽控件来构建用户界面,以及如何通过属性编辑器来修改控件的外观和行为,这极大地降低了开发门槛,让编程变得更加直观有趣。书中对VCL(Visual Component Library)的深入剖析更是让我眼前一亮,它涵盖了各种常用控件的用法,以及如何自定义控件、创建自己的组件。我跟着书中的例子,尝试着实现了一个数据录入界面,通过学习如何使用数据库控件进行数据源连接、字段绑定,以及如何编写代码来处理数据的增删改查,我深刻体会到了C++ Builder在数据库应用开发方面的强大能力。书中还详细介绍了如何处理各种用户事件,比如按钮点击、鼠标移动、键盘输入等,并讲解了如何编写响应这些事件的代码,使得应用程序能够与用户进行有效的交互。此外,书中对异常处理和错误调试的讲解也十分细致,这对于编写健壮、可靠的软件至关重要。总而言之,这本书为我提供了一个扎实的C++ Builder编程基础,让我能够更自信地去应对各种复杂的开发挑战,并享受创造强大Windows应用的乐趣。

评分

当我拿到这本《C++ BUILDER 4 核心编程技术》时,我最先关注的是它是否能帮助我解决实际开发中的痛点。作为一名长期从事C++开发的工程师,我深知传统C++开发Windows GUI的繁琐,而C++ Builder的出现似乎带来了新的希望。这本书的亮点在于它并没有仅仅停留在介绍IDE的各种按钮和菜单,而是深入剖析了VCL(Visual Component Library)的设计理念和实现机制。我通过阅读书中关于“组件模型”的章节,对VCL的组件化、可视化特性有了更深刻的认识,这让我能够更灵活地组合和扩展现有的控件,甚至创建自己的定制化组件。书中对“消息映射”机制的讲解也十分透彻,让我理解了C++ Builder是如何将C++的类与Windows的消息处理机制紧密结合起来的,这对于编写高效、可靠的Windows应用程序至关重要。我特别喜欢书中关于“数据库访问”的章节,它详细介绍了如何利用C++ Builder提供的强大的数据访问组件,例如TDataSet、TTable、TQuery等,来与各种数据库进行交互,大大简化了数据驱动型应用程序的开发过程。书中对“异常处理”和“错误调试”的详细阐述,也让我能够更有效地解决开发过程中遇到的各种问题,提高了我的调试效率。此外,书中关于“对象持久化”和“流操作”的讲解,也为我提供了一种有效的方式来保存和加载应用程序的状态。总而言之,这本书为我提供了一个全面而深入的C++ Builder学习指南,让我能够更高效地利用这款强大的工具来开发高质量的Windows应用程序。

评分

还行

评分

还行

评分

还行

评分

还行

评分

还行

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 book.quotespace.org All Rights Reserved. 小美书屋 版权所有