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

Object-c基础知识(二)继承复合

(好像是在Swift公布之前)这是前一段时间在某本书上看到的,感觉讲解的很详细,在此自己也总结下,让自己有进一步的加深理解。本程序主要简单的涉及到了继承(之前总结过)、复合、代码重构、文件依赖关系知

(好像是在Swift公布之前)这是前一段时间在某本书上看到的 ,感觉讲解的很详细,在此自己也总结下,让自己有进一步的加深理解。

本程序主要简单的涉及到了继承(之前总结过)、复合、代码重构、文件依赖关系知识点(都涉及的很少,但是可以)


由于程序简单,所有的类都再一个文件中。而不是将接口和实现文件分开。

其实分开是很好管理的对于大的项目。

 *之前已经讲了继承了,是的关系           复合:可以是一个类中,定义另一个类作为实例变量,类的复合 有的关系

 *进一步分析了object-c中存取方法的使用。存取方法总是成对出现的,一个用来设置属性的值,另一个用来读取属性值。

 *有时程序的需要只有一个getter方法(用于只读属性,例如磁盘文件大小),或者只有一个setter方法(例如密码设置)

 * cocoasetter方法是根据更改属性的名字命名的,前缀加set  getter方法直接用属性名字,没有前缀get

 *在本程序中对于实现存取方法时,没有考虑内存管理问题和对象所有权问题


如果要拆分文件

*拆分文件,(源文件组织) 比如在程序中,可以创建一个用来存放用户界面类的群组,可以再创建一个用来存放数据处理类的群组

 *主要拆分接口和实现两个文件

 *要区分#improt <>  #import ""的区别 前者用于导入系统头文件,后者用于导入项目本地的头文件;

 *依赖关系:在这种依赖关系中,头文件或者源文件需要使用另一个头文件的信息。文件导入过于混乱延迟编译时间,也会导致不必要的重复编译   @class    #import



import 

@interface Tire : NSObject
@end

@implementation Tire
-(NSString *) description{
return (@"i am a tire ,i last a while.");
}
@end

@interface Engine : NSObject
@end

@implementation Engine

-(NSString *) description{
return (@"i am a engine .");
}
@end

@interface Car : NSObject
{
Engine *engine;
Tire *tires[4];
}
-(Engine *)engine;
-(void) setEngine:(Engine *) newEngine;

-(Tire *) tireAtIndex:(int)index;
-(void) setTire:(Tire *) tire atIndex: (int) index;
-(void) print;
@end

@implementation Car

-(Engine *)engine{
return engine;
}
-(void) setEngine:(Engine *) newEngine{
engine = newEngine;
}

-(Tire *) tireAtIndex:(int)index{
if (index <0 || index >3) {
NSLog(@"error index!");
exit(1);
}
return tires[index];
}
-(void) setTire:(Tire *) tire atIndex: (int) index{
if (index <0 || index >3) {
NSLog(@"index error!");
exit(1);
}
tires[index] = tire;
}
-(void)print{
NSLog(@" %@ ",engine);
NSLog(@" %@",tires[0]);
NSLog(@" %@",tires[1]);
NSLog(@" %@",tires[2]);
NSLog(@" %@",tires[3]);
}
@end


@interface Slant : Engine
@end

@implementation Slant

-(NSString *)description{
return @"i am a slant6!";
}
@end

@interface AllWeatherRadial : Tire
@end

@implementation AllWeatherRadial
-(NSString *)description{
return @"i am a tire for rain or shine";
}
@end

int main(int argc, const char * argv[])
{

@autoreleasepool {

// insert code here...
NSLog(@"Hello, World!");
Car *car = [Car new] ;

Engine *engine = [Engine new];
[car setEngine:engine];

for (int i =0; i<4; i++) {
Tire *tire = [Tire new];
[car setTire:tire atIndex:i];
}

[car print];

Engine *slant = [Slant new];
[car setEngine:slant];

for (int i=0; i<4; i++) {
Tire *alltire = [AllWeatherRadial new];
[car setTire:alltire atIndex:i];
}

[car print];
}
return 0;
}

之前还有简单的程序没有写出来,本程序是在其基础上进行修改了。

重构的概念在这里有所体现。   改进了内部架构,但是并没有影响它的外部行为;具体的说,代码 移植和优化的方式就是重构。进行重构时,会通过移植某些代码来改进程序的架构,但是代码的运行结果没有收到影响。

点击打开链接


 




推荐阅读
  • jsappsugar,基于,js,语法,定义 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • Myappcrashedandthecodeisthefollowing:我的应用程序崩溃,代码如下:elseif(){CGDetailVie ... [详细]
  • ObjectiveC与Swift之间的互相调用和跳转
    Objective-C与Swift之间的互相调用和跳转-一、OC和Swift互相跳转首先在需要引入Swift的文件中导入头文件#import工程名-Swift.hOC跳转Swift ... [详细]
  • 我的iOS开发入门自学路径
    我有一个清单,列着希望在大学里完成的事。比如,学一门乐器,和朋友去旅游,搭建自己的博客,去滑翔,看各主题的书籍。其中一项是,写自己的App并且上架。去年开始,我准备完成这一项,所以 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 多态性这个词表示有许多形式。通常,当存在类的层次结构并且通过继承相关时,会发生多态性。Objective-C多态表示对成员函数的调用将导致执行不同的函数,具体取决于调用该函数的对 ... [详细]
  • 客户端我有一个使用基本POST或GET方法连接到远程服务器的java应用程序:URLurlnewURL(urlStr);HttpURLConnectionconn(HttpURLC ... [详细]
  • 概述UIStackView是iOS9中新增的API,类似于Android中的线性布局。UIStackView相当于一个容器,根据向UIStackView中添加视图的顺序,UIStack ... [详细]
  • c语言的编译器是什么,c语言编译器是什么
    本文目录一览:1、常见的C语言编译器是什么?2 ... [详细]
  • 文章框架前言呀!!再也不三心二意了,从今往后专心搞iOS!嗯!从大一开始就嚷嚷对iOS热爱的很,结果呢,就毕设写了个垃圾,咦!所以现在起,iOS就是我的主线了!先写这篇垃圾文章壮壮 ... [详细]
  • UIView视图,表示屏幕上的一块矩形区域,同时处理该区域的绘制和触屏事件。一个视图也可以作为其他视图的父视图,同时决定着这些子视图的位置和大小.UIView类做了大量的工作去管理 ... [详细]
author-avatar
敖军士
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有