`
世说新语
  • 浏览: 23815 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Ruby Programming Language学习笔记之对象、类、模块(初稿)

阅读更多

对象、类、模块

1.1、封装

1.1.1类层次结构

Object:顶级类
Kernel:mix-in到Object中的模块
Class:产生类对象的类

Module Module是Class的父类

Classes, modules, and objects are interrelated. In the diagram that follows, the vertical arrows represent inheritance, and the parentheses meta-classes. All metaclasses are instances of the class `Class ’.

                          +------------------+
                          |                  |
            Object---->(Object)              |
             ^  ^        ^  ^                |
             |  |        |  |                |
             |  |  +-----+  +---------+      |
             |  |  |                  |      |
             |  +-----------+         |      |
             |     |        |         |      |
      +------+     |     Module--->(Module)  |
      |            |        ^         ^      |
 OtherClass-->(OtherClass)  |         |      |
                            |         |      |
                          Class---->(Class)  |
                            ^                |
                            |                |
                            +----------------+



1.1.2总论

Ruby所有的东西都是对象,而每个对象都是某个类的实例。类本身也是对象,称为类对象。既然类是对象,那么产生类对象的类是什么呢,就是Class类。
类对象有自己的方法、状态和ID。它不与它的实例分享这些信息。这一点与Java不同,Java中的static变量/方法就是类变量/方法,它们是类和类的所有实例共享的。


模块与类的主要区别是:不能实例化、不能继承(可以互相mix-in)
类可以mix-in多个module,但只能有一个父类

对象/类/模块都可以被重新打开,添加内容。打开类/模块与定义它们是一样的,但打开对象就需要用<<
可以给对象添加方法,称为singleton method(不推荐如此)。而在类中编写、可被类的所有实例使用的方法称为实例方法。

实体或事物最好建模为类,而实体说事物的特性或行为最好建模为模块。因此倾向于用名称作为类名,而用形容词作为模块名。
module的思想类似AOP(面向切面编程)。

module和class可以互相多层嵌套,用::引用,此时module和class的作用相当于namespace。





1.1.3类

类方法(类实例方法)
定义类方法用<<符号,以下是重新打开一个类
class << Point
     def class_method1      # This is an instance method of the eigenclass.
     end                               # It is also a class method of Point.
     def class_method2
     end
end
如果是在类定义的时候则可以这样
class Point
     # instance methods go here
     class << self
         # class methods go here as instance methods of the eigenclass
     end

    def Point.class_method1
    end

    def this.class_method2
    end

end
下面2种方法是一样的,这说明<<用于向对象添加方法 ,这个对象包括类对象和普通对象。
obj = T1.new

def obj.test
....
end

class << obj
....
end

类实例变量 :在类定义中定义的@variable_name

class Point
     # Initialize our class instance variables in the class definition itself
     @n = 0 # How many points have been created
     @totalX = 0 # The sum of all X coordinates
     @totalY = 0 # The sum of all Y coordinates

     def initialize(x,y) # Initialize method
         @x,@y = x, y # Sets initial values for instance variables
     end

     def self.new(x,y) # Class method to create new Point objects
          # Use the class instance variables in this class method to collect data
          @n += 1 # Keep track of how many Points have been created
         @totalX += x # Add these coordinates to the totals
         @totalY += y
         super # Invoke the real definition of new to create a Point
         # More about super later in the chapter
     end

     # A class method to report the data we collected
     def self.report
          # Here we use the class instance variables in a class method
          puts "Number of points created: #@n"
          puts "Average X coordinate: #{@totalX.to_f/@n}"
          puts "Average Y coordinate: #{@totalY.to_f/@n}"
     end
end


类变量
:@@variable_name
类变量一般直接在类中定义,而不在任何方法中定义;对与类方法和实例方法都是可见的。
class Point
     # Initialize our class variables in the class definition itself
     @@n = 0 # How many points have been created
     @@totalX = 0 # The sum of all X coordinates
     @@totalY = 0 # The sum of all Y coordinates
   
     def initialize(x,y) # Initialize method
          @x,@y = x, y # Sets initial values for instance variables
          # Use the class variables in this instance method to collect data
          @@n += 1 # Keep track of how many Points have been created
          @@totalX += x # Add these coordinates to the totals
          @@totalY += y
     end

     # A class method to report the data we collected
     def self.report
         # Here we use the class variables in a class method
        puts "Number of points created: #@@n"
          puts "Average X coordinate: #{@@totalX.to_f/@@n}"
          puts "Average Y coordinate: #{@@totalY.to_f/@@n}"
     end
end

类(实例)方法是类对象独有的,类实例变量也是类对象独有的,只有类(实例)方法可以访问。
类变量是类及其所有实例共有的。

实例方法:

实例变量: 在实例方法中定义的@variable_name,一般在initialize方法中初始化。

单例方法: 对象特有的(而不是在类中定义的)方法

常量: 给常量名重新赋值和修改常量所引用的对象,这个差别非常重要。Ruby中存在2中改变:改变标识符到对象的映射,改变对象的内容或状态。对于常量来说,前者是可以的,但会引起警告,也是不推荐的。后者则是完全没有问题的。
常量用::引用


1.1.4模块

Module是模块方法、实例方法、常量(类和模块也是常量)和类变量(@@variable_name)的集合。
A module is a named group of methods, constants, and class variables.

当一个类include一个模块的时候,模块的实例方法可见,模块的模块方法不可见。相反的,调用模块方法的语法是Module::method,而要调用模块的实例方法则必须通过include该模块的类的具体实例来调用。
A
Module is a collection of methods and constants . The methods in a module may be instance methods or module methods. Instance methods appear as methods in a class when the module is included , module methods do not. Conversely, module methods may be called without creating an encapsulating object, while instance methods may not. (See Module#module_function )

模块方法

module Base64
     def self.encode
     end

     def self.decode
     end
end
或者
module Base64
     def Base64.encode
     end

     def Base64.decode
     end
end

实例方法
module Base64
     def encode
     end

     def decode
     end
end

1.1.5对象

生成一个对象
obj=Object.new

给对象定义行为
def obj.talk
end
或者
class << obj
    def talk
    end
end
这些方法叫做单例方法。

1.1.6方法可见性

public/protected/private
ruby中的可见性只针对method 。变量统一都是private的,常量统一都是public的,它们没有可见性这一说。

对实例变量来说,它并不是在类定义中创建的,它是在运行时首次被赋值的时候创建的。它超脱于类之外,只是附着在运行时对象上,因此不能用public/protected/private这些编译时的方法来限定它。同事实例变量也不在类的继承体系中。原因相同。

public/protected/private都是在Module类中的方法,它们不是关键字 。它们可以在Class和Module 中使用,但不能在Object中使用。也就是说我们通过:
class << obj
    def talk
    end
end
添加单例方法时不能使用public/protected/private

public
默认

private
对实例方法可见
对于private方法m,任何时候都只能用m调用,不能用o.m或self.m调用

protected
对于protected方法m,任何时候都可以用m或o.m或self.m调用,因此常用于同一个类的不同实例之间互相访问数据。原理如下
A protected method defined by a class C may be invoked on an object o by a method in an object p if and only if the classes of o and p are both subclasses of, or equal to, the class C.

private_class_method
public_class_method

用于处理类方法的可见性问题

1.2、继承

方法搜索的顺序:当前类-->当前类mix-in的module(与声明顺序相反)-->父类-->父类类mix-in的module(与声明顺序相反)
super:获取并执行在方法查找路径上下一个 匹配该方法的名的方法。对类方法和实例方法同样有效。
this

public/protected/private的方法都会被继承(与Java不同)

实例方法 :继承

实例变量: 不继承。实例变量超脱于类及其继承体系之外。
对实例变量来说,它并不是在类定义中创建的,每一个对象都有一个实例变量集,集合中的实例变量是在运行时首次被赋值的时候创建的。它超脱于类及其继承体系 之外,是完全的运行时概念,只是附着在运行时对象上。有时实例变量看起来是被继承了的,这只是表面现象,内在的原因是实例变量在某些方法中被首次赋值从而 被创建,而这些方法被继承了,所以看起来像是实例变量也被继承了。代码如下:
class Point3D < Point
     def initialize(x,y,z)
          super(x,y)
          @z = z;
     end

     def to_s
          "(#@x, #@y, #@z)" # Variables @x and @y inherited?
     end
end

Point3D.new(1,2,3).to_s # => "(1, 2, 3)"

类方法 :继承

类变量: 继承
在定义该类变量的类及其所有子类中共享同一个变量。

常量: 继承
如果子类常量与父类常量同名,则子类和父类都会单独拥有2个常量,如:
Point::ORIGIN and Point3D::ORIGIN


抽象类:父类中可引用尚未实现的子类方法。
# This class is abstract; it doesn't define greeting or who
# No special syntax is required: any class that invokes methods that are
# intended for a subclass to implement is abstract.
class AbstractGreeter
     def greet
          puts "#{greeting} #{who}"
     end
end

# A concrete subclass
class WorldGreeter < AbstractGreeter
     def greeting; "Hello"; end
     def who; "World"; end
end

WorldGreeter.new.greet # Displays "Hello World"

评论

相关推荐

    【人工智能产业链分析】2018-2024年中国各地区AI产业集中度与财务状况及产业话语权研究

    中国全国AI人工智能产业链关系2018-2024集中度指标按地区分销售财务情况产业话语权指标等 数据来源:基于国内各部委公布数据及各地统计数据整理,或相关省、市数据 数据范围:全国、或各省份地市的统计数据 数据期间:(参见其文件名的标识表达了数据年度、或月度日度期间) 主要指标: 包含的数据文件有: 中国全国AI人工智能产业链产业基本情况2020-2024.zip 中国全国AI人工智能产业链产业上市公司按地区分销售情况统计表2020-2024.zip 中国全国AI人工智能产业链产业上市公司财务情况统计表2020-2024.zip 中国全国AI人工智能产业链产业上市公司销售情况统计表2020-2024.zip 中国全国AI人工智能产业链产业政策信息表2020-2024.zip 中国全国AI人工智能产业链关系表2024.zip 中国全国AI人工智能产业链集中度指标表2020-2024.zip 中国全国AI人工智能产业链名单2024.zip 中国全国AI人工智能产业链企业基本信息表2018-202501.zip 中国全国AI人工智能产业链企业名单2024.zip 中国全国AI人工智能产业链上市公司产业话语权指标表2020-2024.zip (近百MB数据的网盘链接)

    DOS游戏 - RPG - 侠客英雄传3

    注意事项: 1、运行游戏方法 :双击 “侠客英雄传3.bat” 运行。 2、更换光碟提示: 使用 CTRL+F4 组合键后 按空格即可跳过。

    电力电子领域两相交错并联Buck/Boost变换器的Matlab/Simulink仿真及控制策略分析

    内容概要:本文详细介绍了两相交错并联Buck/Boost变换器的建模与仿真,重点探讨了三种不同的控制方式及其性能表现。首先,文章描述了模型的基本架构,包括两个桥臂共用直流母线,MOSFET采用理想的双向开关,电流传感器安装在电感支路上。接着,分别讨论了开环控制、电压单环控制和电压电流双闭环控制的具体实现方法和优缺点。开环模式适用于观察硬件参数的影响,电压单环控制虽然稳定但在负载突变时响应较慢,而双闭环控制能够显著提高系统的动态响应和电流均流效果。此外,文章还分享了一些实用的仿真技巧,如正确设置死区时间和仿真步长,确保仿真的准确性和效率。 适合人群:电力电子工程师、科研人员、高校师生等对DC-DC变换器设计和仿真感兴趣的读者。 使用场景及目标:①研究两相交错并联Buck/Boost变换器的工作原理和控制策略;②优化变换器的设计参数,提高系统的稳定性和效率;③掌握Matlab/Simulink进行复杂电力电子系统仿真的方法和技术。 其他说明:文中提供了详细的代码片段和仿真波形,帮助读者更好地理解和应用相关理论和技术。

    ffmpeg7.0 + sdl3.0 播放音频

    ffmpeg7.0 + sdl3.0 播放音频

    基于龙贝格观测器的PMSM无传感器控制技术解析与应用

    内容概要:本文深入探讨了基于龙贝格观测器的永磁同步电机(PMSM)无传感器控制技术。首先介绍了龙贝格观测器相较于传统滑模观测器(SMO)的优势,特别是在减少系统抖振方面表现突出。接着详细解释了龙贝格观测器的工作原理,包括状态预测、误差补偿以及角度解算三大核心步骤,并提供了具体的代码实现。文中还讨论了实际工程应用中的挑战,如参数选择、噪声处理等问题,并给出了相应的解决方案。此外,文章通过实验数据展示了龙贝格观测器在不同工况下的性能优势,尤其是在高速和低速情况下的稳定性和响应速度。 适合人群:从事电机控制系统研究与开发的技术人员,尤其是关注无传感器控制领域的工程师。 使用场景及目标:适用于希望提升PMSM无传感器控制系统的稳定性、精确度的研发团队。主要目标是在保持高性能的同时降低系统复杂度,提高产品竞争力。 其他说明:文中不仅分享了理论知识和技术细节,还提供了大量实用的经验技巧,帮助读者更好地理解和应用龙贝格观测器进行实际项目开发。

    PMSM伺服系统转动惯量与阻尼系数在线辨识方法及仿真研究

    内容概要:本文深入探讨了永磁同步电机(PMSM)伺服系统的转动惯量和阻尼系数的在线辨识方法。文中介绍了两种主要的辨识方程:一种用于空载工况,另一种用于负载工况。通过详细的数学推导和Python、C、MATLAB代码示例,展示了如何在不同工况下精准辨识这些参数。此外,还讨论了1.5拍延时补偿、全电压前馈补偿和相电压重构等关键技术,以提高辨识精度和系统稳定性。仿真结果显示,在空载和负载突变情况下,辨识误差分别低于0.8%和2.3%。 适合人群:从事电机控制、自动化控制领域的研究人员和技术人员,尤其是对PMSM伺服系统感兴趣的工程师。 使用场景及目标:适用于需要在线辨识PMSM伺服系统转动惯量和阻尼系数的应用场合,如工业机器人、数控机床等。目标是在不影响正常生产的情况下,实时监测和调整电机参数,提升系统性能。 其他说明:本文不仅提供了理论推导和算法实现,还给出了具体的代码示例和仿真结果,便于读者理解和应用。同时,文中提到的技术可以作为其他类似算法验证的良好参考。

    (源码)基于Arduino的精确计时与PWM控制系统.zip

    # 基于Arduino的精确计时与PWM控制系统 ## 项目简介 本项目基于Arduino的TimerOne库,该库是Arduino平台上用于精确计时和PWM控制的开源库。主要面向Arduino板上的ATmega系列微控制器,可实现设置定时器、产生PWM信号、定时中断等功能,用于精确控制时间和电机速度。 ## 项目的主要特性和功能 1. 初始化定时器,设置初始参数。 2. 根据用户指定微秒数设置定时器周期。 3. 设定PWM输出的占空比,控制PWM输出大小。 4. 启动和停止PWM输出。 5. 设定和停止中断服务例行程序。 6. 重新启动和重置定时器。 7. 停止定时器计数。 8. 读取当前定时器的计数值并转换为微秒数。 ## 安装使用步骤 ### 安装 用户已下载项目源码文件后,可通过Arduino IDE的库管理器搜索并安装TimerOne库。 ### 使用 在代码中引入#include <TimerOne.h>,即可使用上述功能。

    weixin242基于微信小程序的外卖点餐系统设计与实现ssm(文档+源码)_kaic

    weixin242基于微信小程序的外卖点餐系统设计与实现ssm(文档+源码)_kaic

    (源码)基于Arduino的Wemos Mqtt Alarm Panel项目.zip

    # 基于Arduino的Wemos Mqtt Alarm Panel项目 ## 项目简介 本项目是一个基于Arduino平台的开源智能报警面板项目,命名为“Wemos Mqtt Alarm Panel”。该项目允许用户通过简单的MQTT操作来触发和控制报警系统。主要面向需要低成本、易于部署的智能家居或小型商业场所报警系统。项目仍在开发阶段,但已经具备基本功能并可供使用。 ## 项目的主要特性和功能 1. 低成本硬件需求主要使用Wemos D1 Mini或其他兼容的微控制器,以及Lolin 2.4英寸TFT显示屏。整体硬件成本较低,易于获取和部署。 2. 基于MQTT通信协议允许报警系统与MQTT服务器进行通信,实现远程控制和状态报告功能。 3. 界面友好采用直观的图形界面,支持触摸操作,方便用户进行交互。 4. 校准功能提供校准界面,确保触摸操作的准确性。 5. 可扩展性支持自定义报警事件和动作,允许用户根据需求进行个性化设置。 ## 安装使用步骤

    MATLAB实现SSA-ESN多输出回归:代码解析与应用实例

    内容概要:本文详细介绍了一个基于MATLAB的SSA-ESN(奇异谱分析-回声状态网络)多输出回归代码。该代码适用于处理复杂的非线性回归问题,具有多输出支持、友好的数据格式、丰富的可视化效果以及全面的评价指标等特点。文中不仅提供了详细的代码解析,还给出了具体的操作步骤和注意事项,帮助初学者快速理解和应用这一先进的回归方法。主要内容分为数据预处理、模型训练与预测、结果分析与可视化三个部分,涵盖了从数据准备到最终结果呈现的完整流程。 适合人群:对机器学习感兴趣特别是想学习和应用SSA-ESN进行多输出回归的新手程序员和研究人员。 使用场景及目标:①用于解决多输出的非线性回归问题;②提供一个完整的项目案例,帮助用户理解SSA-ESN的工作机制及其优势;③通过实际操作加深对机器学习理论的理解。 其他说明:代码已调试完毕,可以直接运行,附有详细的中文注释,便于学习和修改。此外,文中还提到了一些常见的错误及解决方案,如数据格式不匹配等问题。

    基于Matlab的模拟射击自动报靶系统:图像处理与计算机视觉技术实现高效报靶

    内容概要:本文详细介绍了一个基于Matlab的模拟射击自动报靶系统的实现方法。该系统利用图像处理技术和计算机视觉技术,通过一系列步骤如图像滤波、图像减影、二值化、噪声滤除、目标矫正、弹孔识别和环值判定,实现了对射击靶纸的自动化处理。此外,文中还介绍了如何使用Matlab的GUIDE工具创建友好的GUI界面,使系统更易于操作。系统不仅提高了报靶的速度和准确性,还在军事训练和民用射击活动中展现出广阔的应用前景。 适合人群:对图像处理、计算机视觉感兴趣的研发人员和技术爱好者,尤其是有一定Matlab基础的用户。 使用场景及目标:适用于射击训练和比赛中,用于快速准确地报靶,提高训练效率和比赛公平性。目标是通过自动化手段减少人工干预,确保报靶结果的客观性和实时性。 其他说明:文中提供了详细的代码示例和优化技巧,帮助读者更好地理解和实现该系统。此外,作者还分享了一些常见问题的解决方案,如光照突变、靶纸反光等问题的应对措施。

    【Docker Compose】高级编排实战指南:涵盖Web全栈、AI/ML、IoT、监控、CI/CD等多领域应用部署摘要 本文

    内容概要:本文深入探讨了 Docker Compose 的高级应用,旨在帮助用户从基础用户成长为能够驾驭复杂系统编排的专家。文章首先介绍了 Docker Compose 的核心高级特性,如 profiles、extends、depends_on、healthcheck、自定义网络、卷管理和环境变量管理。接着,通过 30 多个实战模板,覆盖了 Web 全栈、AI/ML、IoT、监控、CI/CD 等多个领域的复杂场景,展示了如何利用这些特性构建高效、可靠的应用环境。每个模板不仅提供了详细的代码示例,还附有解释要点,帮助读者理解其工作原理和应用场景。 适用人群:具备一定 Docker 基础,希望提升 Docker Compose 使用技能的开发者和运维人员,特别是那些需要管理复杂多服务应用的 DevOps 工程师。 使用场景及目标: 1. **Web 开发**:构建 LEMP、MERN 等全栈应用,简化开发和部署流程。 2. **数据处理**:实现 ETL 流程,结合消息队列和数据库进行高效数据处理。 3. **微服务架构**:使用 API 网关简化微服务入口管理,提升服务发现和路由配置的灵活性。 4. **监控与日志**:搭建 PLG 或 ELK 日志系统,实现日志的收集、存储和可视化。 5. **物联网**:构建 MQTT Broker 和时序数据库,支持 IoT 设备的数据接收和处理。 6. **机器学习**:部署 TensorFlow Serving 或 TorchServe,提供模型服务接口。 7. **CI/CD**:快速搭建 GitLab/Gitea 平台,支持代码托管和持续集成。 8. **安全测试**:使用 OWASP ZAP 对 Web 应用进行自动化或手动的安全扫描。 9. **教育与学习**:部署 Moodle,在线学习管理系统,支持课程创建和

    基于COMSOL的注浆技术仿真:浆液扩散特性与优化方案

    内容概要:本文详细探讨了利用COMSOL软件对注浆技术进行仿真的方法和技术细节。主要内容包括浆液扩散的数学建模、仿真模型的构建(如几何模型、边界条件、初始条件和控制方程)、关键参数(注浆压力、孔间距、地质条件)对浆液扩散的影响分析,以及实际工程应用案例。文中通过具体实例展示了如何通过仿真优化注浆施工参数,提高注浆效率并降低成本。此外,还讨论了倾斜裂隙、孔隙率和渗透率等因素对浆液扩散的具体影响及其应对措施。 适合人群:从事地下工程施工的技术人员、科研人员及高校相关专业师生。 使用场景及目标:①用于优化注浆施工方案,提高注浆效果;②为地下工程建设提供技术支持;③帮助研究人员深入理解浆液扩散机制。 其他说明:文章不仅提供了理论分析,还包括大量具体的代码示例和实践经验分享,有助于读者更好地理解和应用COMSOL仿真技术。

    【信息安全领域】实战项目汇总:涵盖网络渗透测试、Web应用安全加固、企业安全策略制定等多方面内容

    内容概要:本文列举了多个信息安全领域的实战项目示例,涵盖网络渗透测试、Web应用安全加固、企业安全策略制定与实施、恶意软件分析、数据泄露应急响应、物联网设备安全检测、区块链安全审计和云安全防护八大方面。每个项目均明确了具体的目标与步骤,如网络渗透测试通过模拟攻击发现并修复系统漏洞;Web应用安全加固则从代码审查、输入验证、身份验证、数据加密等方面确保应用安全;企业安全策略制定旨在构建全面的信息安全体系;恶意软件分析深入探究其功能与传播机制;数据泄露应急响应项目则聚焦于快速遏制影响、调查原因、恢复系统;物联网设备安全检测保障设备的安全性;区块链安全审计确保系统稳定可靠;云安全防护构建云环境下的安全体系。; 适合人群:信息安全从业人员、网络安全工程师、企业IT管理人员、安全研究人员。; 使用场景及目标:适用于希望深入了解信息安全各细分领域实战操作的专业人士,目标是掌握不同类型安全项目的实施流程与技术要点,提升实际工作中应对安全挑战的能力。; 其他说明:文中提供的项目示例不仅有助于理论学习,更为实际工作提供了具体的指导和参考,帮助相关人员在不同场景下有效开展信息安全工作,确保信息系统的安全性、稳定性和可靠性。

    基于matlab实现的博弈方法的电动汽车充电调度策略研究+源码(毕业设计&课程设计&项目开发)

    基于matlab实现的博弈方法的电动汽车充电调度策略研究+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于matlab实现的博弈方法的电动汽车充电调度策略研究+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于matlab实现的博弈方法的电动汽车充电调度策略研究+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于matlab实现的博弈方法的电动汽车充电调度策略研究+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于matlab实现的博弈方法的电动汽车充电调度策略研究+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于matlab实现的博弈方法的电动汽车充电调度策略研究+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用

    基于Matlab的违规限号车牌识别管理系统:从粗定位到精准识别

    内容概要:本文详细介绍了基于Matlab的违规限号车牌识别管理系统的开发过程和技术细节。系统主要分为多个步骤,包括车牌粗定位、灰度化、倾斜矫正、二值化、形态学处理、反色处理、精准定位、字符分割与识别、限号判断、语音播报和违规车牌信息导出。通过这些步骤,系统能够高效地识别并处理违规限号车辆,提升交通管理水平。 适用人群:适用于具有一定编程基础的技术人员,特别是对计算机视觉和数字图像处理感兴趣的开发者。 使用场景及目标:本系统主要用于城市交通管理部门,帮助执法人员快速识别和处理违反限号规定的车辆,提高交通管理的智能化水平。具体应用场景包括但不限于道路监控、停车场管理和临时检查点等。 其他说明:文中提供了大量Matlab代码示例,详细解释了各个步骤的具体实现方法。此外,作者还分享了许多实际开发过程中遇到的问题及其解决方案,有助于读者更好地理解和应用这些技术。

    2000-2017年各省国有经济煤气生产和供应业固定资产投资数据

    2000-2017年各省国有经济煤气生产和供应业固定资产投资数据 1、时间:2000-2017年 2、来源:国家统计j、能源nj 3、指标:行政区划代码、城市、年份、国有经济煤气生产和供应业固定资产投资 4、范围:31省

    HDRI大全三维环境切图

    HDRI大全三维环境切图

    ADAS系统核心技术解析:ACC、FCW、AEB、LKA的设计与实现

    内容概要:本文详细介绍了ADAS(高级驾驶辅助系统)中四个主要功能模块的设计与实现,分别是自适应巡航控制系统(ACC)、前向碰撞预警系统(FCW)、自动紧急制动系统(AEB)和车道保持辅助系统(LKA)。文章不仅展示了各个系统的具体算法实现,如ACC中的PID控制、FCW中的TTC计算、AEB中的状态机设计和LKA中的PD控制器,还分享了许多实际开发中的经验和挑战,如参数调校、传感器融合、时间同步等问题。此外,文中还提到了一些有趣的细节,如在暴雨天气下LKA的表现优化,以及AEB系统在测试过程中遇到的各种corner case。 适合人群:汽车电子工程师、自动驾驶研究人员、嵌入式软件开发者。 使用场景及目标:帮助读者深入了解ADAS系统的工作原理和技术细节,掌握关键算法的实现方法,提高在实际项目中的开发和调试能力。 其他说明:文章通过生动的语言和具体的代码示例,使复杂的理论变得通俗易懂,有助于初学者快速入门并深入理解ADAS系统的开发流程。

    (源码)基于PHP的历史年表聚合网站.zip

    # 基于PHP的历史年表聚合网站 ## 项目简介 本项目是一个历史年表的聚合网站,采用PHP编程语言开发。网站包含了众多功能函数,可处理系统信息、错误异常、数字、字符串、时间等,还具备数据库管理、搜索、用户管理等功能,同时拥有日志记录和安全防护模块。 ## 项目的主要特性和功能 1. 系统信息处理能获取系统名称、版本、描述等信息,还可管理令牌。 2. 错误处理具备生成错误消息、错误退出等功能。 3. 数据处理涵盖数字、字符串、时间的处理,如数字转汉字、字符串编码等。 4. 标签管理定义了多种与历史相关的标签信息,包括朝代、事件、人物等。 5. 数据库操作提供数据库管理、SQL查询语句生成、搜索、用户管理等功能。 6. 用户界面生成可生成和更新与时间、标签相关的用户界面元素。 7. 日志记录包含日志保存、格式化、核心记录等功能。 8. 安全防护拥有Web应用防火墙模块,增强网站安全性。 ## 安装使用步骤

Global site tag (gtag.js) - Google Analytics